Attach content anywhere
A ContentArea is a generic container of sections you bolt onto any entity β Page, Product, Category. Your model, your routes, your templates. ContentBlocks never owns the URL.
Build content areas from sections, columns and blocks β in-context, with live preview. Framework-native, extensible, no CMS lock-in.
The editor works on your real page. A block's form sits in the sidebar, the page's preview beside it, and nothing reaches visitors before Publish.





Each thumbnail is the block as your visitors get it, styled by the kit's stylesheet alone. Retheme it with seven CSS custom properties.
titletextrich_textimagegallerybuttonbutton_groupcardlisticonalertdivideraccordiontableembedvideobreadcrumbhtml_rawtabscomposer require klehm/content-blocks klehm/content-blocks-kit
php bin/console doctrine:migrations:diff && php bin/console doctrine:migrations:migrateThen attach a ContentArea to your entity, add ContentAreaType to a form, and call cb_render_content_area() in your template. The Quick start walks through the whole path in five minutes.
ContentArea β Section β Column β Block
(container) (layout) (preset) (type + JSON data)ContentArea is a titleless, slug-less container. The host app brings its own entity (a Page, a Productβ¦) with a OneToOne to a ContentArea. That single design choice is why ContentBlocks drops into an existing app instead of asking you to migrate into a CMS.
| β ContentBlocks does | β ContentBlocks does not |
|---|---|
| Store structured content (sections / columns / blocks) as your data | Own your routing, URLs, or SEO |
| Render an in-context builder with live preview | Ship a CMS, admin panel, or user management |
| Provide an extensible block-type system | Force a CSS framework (Tailwind/Bootstrap) on you |
| Enforce your auth model via a thin interface | Know who your users are β you wire that |
| Draft / publish / discard content states | Replace your templating β you keep full control of markup |
A public demo runs the builder on a real page: blocks.clementmuller.fr. Edit, preview on every viewport, publish β no install needed.
Installing is a short, deterministic path β and it's documented for AI coding agents too. See AGENTS.md and the machine-readable llms.txt index.
ContentBlocks is built and maintained by ClΓ©ment Muller, a freelance Symfony developer. I offer installation, integration and customization β custom blocks, theming to your design system, Sylius or legacy-app integration, content migration. Get in touch through clementmuller.fr.