PHPackages                             checlou/flat-file-cms-bundle - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. checlou/flat-file-cms-bundle

ActiveSymfony-bundle

checlou/flat-file-cms-bundle
============================

Bundle to add a CMS based on markdown files to an symfony web app

01PHP

Since Nov 17Pushed 2y ago1 watchersCompare

[ Source](https://github.com/lolozere/CheclouFlatFileCMSBundle)[ Packagist](https://packagist.org/packages/checlou/flat-file-cms-bundle)[ RSS](/packages/checlou-flat-file-cms-bundle/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

Checlou Flat File CMS Bundle for Symfony App
============================================

[](#checlou-flat-file-cms-bundle-for-symfony-app)

Symfony Bundle to create a CMS with flat files into a symfony app.

Purpose
-------

[](#purpose)

Provide a solution to a CMS feature in an existing symfony app.

- Content in markdown files

Fast installation
-----------------

[](#fast-installation)

Requirements : install a basic symfony app with composer.

```
symfony new my_project_directory --version="6.3.*"
composer require checlou/flat-file-cms-bundle
```

Set the configuration in `config/packages/checlou_flat_file_cms.yaml` :

```
checlou_flat_file_cms:
  content_path: '%kernel.project_dir%/var/cms'
```

Copy files from `Tests/Functional/app/Website/cms` to `var/cms` to a basic page dataset.

Theming
-------

[](#theming)

The default theming is a basic bootstrap 4 theme. You can override it by overriding the twig templates.

- Write documentation to explain how to override twig templates

Content example
---------------

[](#content-example)

### File

[](#file)

Name of the file : `a-page.md`

```
---
title: Page title
type: page
slug: a-page.html
---

Summary

===

Main content
```

Two differents types of content :

- page : a page with a title, a summary and a main content
- post : a post with a title, a summary and a main content

Default values :

- type : page
- slug : filename with `.html` extension and path as prefix
- title : filename without extension

### Organized by folders

[](#organized-by-folders)

```
content/
├── a-page.md
├── index.md
├── blog/
│   ├── a-post.md
│   └── another-post.md
│   └── a-category/
│       └── a-post.md

```

The index.md file is the content used to display the home page of the CMS. You can use this kind of file to create a page with a slug like

- `/home` with an `index.md` file in the folder `home/`

Others solutions to manage flat files
-------------------------------------

[](#others-solutions-to-manage-flat-files)

### Pico CMS or Grav CMS

[](#pico-cms-or-grav-cms)

Full app to manage a website with flat files. But you can not use it to add a CMS feature to an existing app. Use Symfony components.

-
-

### Symfony Bundles

[](#symfony-bundles)

-  : too old (last commit in 2015)
-

### Twig markdown to html

[](#twig-markdown-to-html)

Extension to convert markdown to html in twig templates. We do not use it. Should we use it ?

[https://twig.symfony.com/doc/3.x/filters/markdown\_to\_html.html](https://twig.symfony.com/doc/3.x/filters/markdown_to_html.html)

### Ideas

[](#ideas)

-

Todo
----

[](#todo)

- More tests of Page and Pages class and Twig extension
- Shortcode system
- Inject global vars to use in markdown : by configuration and by event
- Content cache to rebuild without parsing files
- Configure the CMS to say that pages are isolated (no parent) even if it's in a subfolder
    - Usecase : a specific folder with isolated pages
- Transform link to markdown file to the url of the page
    - Usecase : use autocompletion in markdown editor to link to another page
- Command to generate all the website as an artefact
    - Usecase : use Github Pages to host the website
- Use [https://twig.symfony.com/doc/3.x/filters/markdown\_to\_html.html](https://twig.symfony.com/doc/3.x/filters/markdown_to_html.html) ?

###  Health Score

12

—

LowBetter than 0% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity1

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity20

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/597f7a20ca7db451c30f19115824c5ed3bc8bb3527eaf64c29d1236892ad2f4a?d=identicon)[lolozere](/maintainers/lolozere)

---

Top Contributors

[![lolozere](https://avatars.githubusercontent.com/u/1579110?v=4)](https://github.com/lolozere "lolozere (1 commits)")

### Embed Badge

![Health badge](/badges/checlou-flat-file-cms-bundle/health.svg)

```
[![Health](https://phpackages.com/badges/checlou-flat-file-cms-bundle/health.svg)](https://phpackages.com/packages/checlou-flat-file-cms-bundle)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
