Pico
Stupidly simple flat-file CMS
Pico is a minimal, fast flat-file content management system that uses Markdown files for content and Twig templates for layout. It needs no database and no admin backend.
Key features
- No database required
- Markdown content
- Twig templating
- Tiny footprint
Pros & cons
Strengths
- Extremely lightweight
- Zero configuration to start
Trade-offs
- No admin UI by default
- Not for large dynamic sites
Pico replaces
Last reviewed Sep 13, 2026 · 769 words
A Pico site is a folder of Markdown files and a PHP interpreter, and that sentence is also the complete architecture. Drop about.md into content/ and /about exists. There is no database, no install wizard, no admin login, and nothing to update except the one release archive. On 128 MB of RAM it will serve a personal site or documentation for years, which it has been doing since 2012. The trade is stated plainly in the cons: no admin UI, and no place in the design for a large dynamic site.
How a page becomes a URL
Pico maps the content/ directory straight onto URLs. content/index.md is the home page, content/projects/pico.md is /projects/pico, and content/projects/index.md is /projects. Each file opens with a metadata block in YAML between --- lines, with keys like Title, Description, Date, Author and Template, followed by ordinary Markdown. Pico renders it at request time through a Twig template from the active theme, so a change to a file is live on the next reload with no build step. That is the difference from Hugo and its cousins: same flat files, but the rendering happens per request in PHP rather than once at build time.
Install is an unzip
Download the release archive from the official site, unzip it into the web root, and serve it with PHP. Apache users get clean URLs from the shipped .htaccess. On nginx you add a rewrite so unknown paths land on index.php:
location / {
try_files $uri $uri/ /index.php?$uri&$args;
}
Composer users can instead run composer create-project picocms/pico-composer to get the same layout with plugins managed as packages. There is no official Docker image; community images exist, and the simplest honest container is the official php:apache image with the release unzipped into /var/www/html. That is a two-line Dockerfile and it stays in your control. Configuration is a single config/config.yml for the site title, base URL, theme and plugin settings.
No admin means editing is your editor
This is the part that decides whether Pico suits you. Content changes happen over SFTP, in a git repo that a hook deploys, or in a text editor on the server. A third-party admin plugin has existed on and off, and I would not build a workflow on it; Pico's own maintainers treat the absence of an admin panel as a feature, and the plugin ecosystem reflects that. If the person editing the site would rather click than commit, that is the moment to look at Grav, which is the bigger flat-file project in the same family with a supported admin panel, or at the wider CMS category for the database-backed options.
Themes and plugins are small and PHP
Themes are Twig templates plus CSS; the default theme is plain, and the theme index on the site has a few dozen options of varying age. Plugins are single PHP classes hooked into Pico's request lifecycle, with the popular ones covering pagination, tags, search and sitemap generation. Writing one takes an afternoon if you know PHP. Keep the count low; every plugin runs on every request, and part of the point of Pico is that a request costs almost nothing.
Where it stops
Pico is not for a site with comments, user accounts, a shop, or thousands of pages that need querying. It reads the content directory on each request, so a very large site slows down in ways a static generator does not, and it has no caching layer of its own beyond what your PHP setup provides. It is also single-author by design; there is no concept of users because there is no login. For a personal site, a project's documentation, or a small business's five pages, none of that matters. Compared with WordPress, you are trading a plugin ecosystem you would not use for an attack surface you no longer have.
What I'd do
Pico in the official php:apache image behind Caddy, content in a git repo, a post-receive hook that pulls into the container's volume. Two plugins at most. For a documentation site or a personal homepage I would choose it over a static generator when I do not want a build step in the way of a quick fix, and over Grav when nobody but me will ever edit the files. The moment a second, less technical editor appears, move to Grav and keep the Markdown.
Compare Pico
21 head-to-head comparisons.
- Pico vs Ghost
- Pico vs Wagtail
- Pico vs Grav
- Pico vs October CMS
- Pico vs Orchard Core
- Pico vs Pagekit
- Pico vs Statamic
- Pico vs Mezzanine
- Pico vs Craft CMS
- Pico vs Microweber
- Pico vs Anchor CMS
- Pico vs Piranha CMS
- Pico vs PublicCMS
- Pico vs Kirby
- Pico vs Winter CMS
- Pico vs Bludit
- Pico vs MODX Revolution
- Pico vs Fork CMS
- Pico vs ProcessWire
- Pico vs Backdrop CMS
- Pico vs Automad
Similar content management systems apps
Ghost
Content Management SystemsProfessional publishing platform for blogs and newsletters
Replaces WordPress, Substack
Payload CMS
Content Management SystemsTypeScript-native headless CMS and application framework
Replaces Contentful, Sanity
Docsify
Content Management SystemsDocumentation site generator
Replaces GitBook
WordPress
Content Management SystemsThe most popular content management system in the world
Replaces Wix, Squarespace
Wagtail
Content Management SystemsDeveloper-friendly Django CMS with a great editor experience
Replaces Adobe Experience Manager, WordPress
Grav
Content Management SystemsFast flat-file CMS with no database required
Replaces WordPress, Squarespace