A modern CMS lets you compose a page from blocks: a hero, a quote, an image gallery, a pricing table, a call-to-action. WordPress's Gutenberg pioneered this pattern — and then buried it under React complexity, theme-compatibility quirks, and a sea of "block library" plugins.
Contensio's block editor is purpose-built, Laravel-native, and pluggable. Blocks are PHP classes registered through the plugin API. Content stays structured in the database — not trapped in HTML-with-comment markers. Themes render blocks through Blade partials they fully control.
Blocks that ship in the core
Heading
H2–H6 with optional subhead
Paragraph
Rich text with links, emphasis, inline code
Image
From media library, with caption + alt
Gallery
Grid or masonry of media
Quote
Pull-quotes with optional citation
List
Bulleted or numbered
Code
Syntax-highlighted snippets
Video
Self-hosted or embedded
Divider
Visual break between sections
Plugins register their own blocks
A Forms plugin can register a Contact Form block. A
Commerce plugin can register a Product Grid. The editor picks
them up automatically; no core modifications, no theme changes.
// In your plugin's service provider
BlockType::register('contact-form', [
'label' => 'Contact form',
'icon' => 'bi-envelope',
'fields' => [
'form_id' => ['type' => 'select', 'options' => $forms],
'cta_label' => ['type' => 'text', 'translatable' => true],
],
'render' => 'forms::blocks.contact-form',
]);
Content stays structured
Each block is stored as JSON — type, field values, position. Your theme renders it, your SEO tools read from it, your import/export moves it. Unlike WordPress's block markers (HTML comments that encode block data), Contensio's blocks are first-class data you can query.
FAQ
Yes — drag-and-drop reordering, one-click duplicate, per-block visibility toggle (useful for scheduling A/B copy).
Autosave is built in — every few seconds your draft is saved. You can revert to the previous save from the editor.
Yes. Fields marked "translatable" have per-language values; the rest (like an image reference) are shared across languages.