Block-Based Editor
18+ block types powered by Editor.js. Each block is independently editable and movable.
18+ block types powered by Editor.js. Each block is independently editable and movable.
Multiple users edit the same content simultaneously. Y.js ensures conflict-free sync.
See where teammates are editing in real time, with colored cursors and name labels.
Full Strapi Upload integration. Drag-drop images, videos, audio — served from your CDN.
Portable, structured data. Render on any frontend — React, Vue, Svelte, plain HTML, anything.
Proper Strapi v5 custom field. Use in any content type via the Content-Type Builder.
npm install magic-editor-x// config/plugins.ts
export default () => ({
'magic-editor-x': {
enabled: true,
config: {
collaboration: {
enabled: true,
},
},
},
});npm run build && npm run developThen in Content-Type Builder: add a new field → Custom → Magic Editor X.
| Block | Description |
|---|---|
| Paragraph | Standard text with inline formatting (bold, italic, code, link) |
| Heading | H1–H6 |
| List | Ordered or unordered lists with nesting |
| Checklist | Interactive checkboxes |
| Quote | Blockquotes with optional caption |
| Code | Code block with language picker (syntax highlight) |
| Delimiter | Horizontal rule |
| Image | Via Strapi Media Library, with caption and alt text |
| Gallery | Multi-image grid |
| Video | Strapi Media Library video with poster image |
| Audio | Audio file with built-in player |
| Attachment | Downloadable file (PDF, ZIP, etc.) |
| Embed | YouTube, Vimeo, Twitter/X, CodePen, Figma, generic iframe |
| Table | With header row, alignment, add/remove rows/columns |
| Warning | Styled callout with title + message |
| Raw HTML | Escape hatch for custom markup |
| Marker | Highlight text |
| InlineCode | Inline code formatting |
Magic-Editor-X outputs structured JSON that is trivial to render on any frontend:
{
"time": 1712000000000,
"blocks": [
{
"type": "header",
"data": { "text": "Hello world", "level": 1 }
},
{
"type": "paragraph",
"data": { "text": "This is <b>bold</b> and <a href='https://example.com'>linked</a>." }
},
{
"type": "image",
"data": {
"url": "https://cdn.example.com/uploads/photo.jpg",
"caption": "A photo",
"stretched": false
}
}
],
"version": "2.x"
}Render it in React:
function renderBlock(block) {
switch (block.type) {
case 'header':
return React.createElement(`h${block.data.level}`, {}, block.data.text);
case 'paragraph':
return <p dangerouslySetInnerHTML={{ __html: block.data.text }} />;
case 'image':
return <img src={block.data.url} alt={block.data.caption} />;
// ... other block types
}
}Or use one of the existing Editor.js renderers (HTML, React, Vue).
Powered by Y.js, an industry-standard CRDT library. Benefits:
Collaboration limits by tier:
| Feature | Free | Premium | Advanced |
|---|---|---|---|
| Full editor access | ✓ | ✓ | ✓ |
| All 18+ block types | ✓ | ✓ | ✓ |
| Real-time sync | ✓ | ✓ | ✓ |
| Live cursors | ✓ | ✓ | ✓ |
| Media Library | ✓ | ✓ | ✓ |
| Custom field | ✓ | ✓ | ✓ |
| Collaborators / doc | 2 | 10 | ∞ |
| Version history | — | ✓ | ✓ |
| AI Assistant | — | Usage-based | Full |
| Priority support | — | ✓ | ✓ |
| Price | $0 | $9.90/month | $24.90/month |
Made by Joulee Tech GmbH. Free tier · 30-day money-back guarantee on paid tiers.