
Template details
Stenope
The static website generator for Symfony developers
About this template
Stenope is a static site generator that runs inside a Symfony application, turning a standard Symfony app into a static HTML website by scanning routes and dumping every page to files.
What is Stenope?
Stenope is an open-source static website generation tool built specifically for the Symfony PHP framework. It takes an existing Symfony app and, via a console command, crawls it like a search engine and dumps every page into static HTML files. It provides tools for loading and parsing content from local Markdown files or headless CMS sources, applies processors for tasks like syntax highlighting and slug generation, and hydrates custom PHP objects with the enriched data for listing and retrieval. The project is maintained by Symfony developers and can be installed with Composer.
Key Features
- Symfony-native — Runs in any existing Symfony project, installable via
composer require stenope/stenope, and connects with standard Symfony components. - Format-agnostic content loading — Does not impose a format, structure, or location for data; supports local Markdown files and distant headless CMS sources.
- Processor pipeline — Enriches parsed data by applying a series of processors, including syntax highlighting and slug generation, with custom processors documented in a cookbook.
- Object hydration — Hydrates custom PHP objects with enriched data and provides interfaces for listing and retrieving them, functioning like an ORM for content.
- CLI build command — Generates a static site with
bin/console -e prod stenope:build ./staticafter clearing the cache, placing all output in a specified directory. - Extensible architecture — Provides entrypoints, interfaces, and default implementations that are entirely replaceable, with features that can be added or removed.
- Twig integration — Offers Twig integration for templates and linking contents.
- Starter skeleton — Offers a Stenope Skeleton for creating a new app from scratch.
Who is it for?
- Symfony developers who need to generate static websites without leaving their familiar framework ecosystem.
- Teams building content-driven sites that want to load content from local Markdown files or headless CMSs and hydrate PHP objects.
- Developers who want full control over the generation pipeline and prefer to replace default implementations rather than adapt to imposed structures.
What can you do with Stenope?
- Build a static site from an existing Symfony app: run two console commands and output a full static HTML site into a folder like
./static. - Create a blog system: Stenope is not a ready-to-use blogging system, but its content management tools let you quickly write your own blog.
- Process content with syntax highlighting: enrich Markdown content automatically during the build.
- Load content from multiple sources: parse local files and distant headless CMS data with equal ease.
How does Stenope work?
Stenope scans the Symfony app like a search engine crawler, dumping every page into a static HTML file. It then loads and parses data sources, applies processors, hydrates PHP objects, and provides interfaces for listing and retrieving content. The entire process is controllable via entrypoints and replaceable default implementations.
FAQ
How do I install Stenope?
Run composer require stenope/stenope in an existing Symfony app. If you're starting from scratch, you can use the Stenope Skeleton.
Is Stenope a ready-to-use blogging system?
No. The project explicitly states it is not a ready-to-use blogging system, but you can quickly write your own blog system with its content management tools.
How do I generate a static site with Stenope?
After clearing the cache with bin/console -e prod cache:clear, run bin/console -e prod stenope:build ./static. Your Symfony app is then available as a static website in the ./static directory.
What content formats does Stenope support?
The documentation lists supported formats, including Markdown and HTML. Processing features like syntax highlighting are available for parsed content.
















