A block editor that hands you JSON.
Notion-style editing on Tiptap — slash menu, drag handles, tables, uploads. No CSS framework, no opinion about where your content lives, and a renderer for the server in the box.
A real editor — type in it, and the other two tabs follow.
Try it
This is a real editor. Type in it. Select some words for the toolbar, press / on an empty line for the block menu, or drag a block by its handle.
Everything you do here changes the other two tabs. That JSON is the product — it is what lands in your database.
Lists, marks, and links
Tables, images, callouts, task lists
Ship versioned JSON
Tick this box and watch the JSON change
{
"type": "doc",
"attrs": {
"schemaVersion": 1
},
"content": [
{
"type": "heading",
"attrs": {
"level": 2
},
"content": [
{
"type": "text",
"text": "Try it"
}
]
},
{
"type": "paragraph",
"content": [
{
"type": "text",
"text": "This is a real editor. Type in it. "
},
{
"type": "text",
"marks": [
{
"type": "bold"
}
],
"text": "Select some words"
},
{
"type": "text",
"text": " for the toolbar, press "
},
{
"type": "text",
"marks": [
{
"type": "code"
}
],
"text": "/"
},
{
"type": "text",
"text": " on an empty line for the block menu, or drag a block by its handle."
}
]
},
{
"type": "callout",
"attrs": {
"emoji": "🍃",
"tone": "info"
},
"content": [
{
"type": "paragraph",
"content": [
{
"type": "text",
"text": "Everything you do here changes the other two tabs. That JSON is the product — it is what lands in your database."
}
]
}
]
},
{
"type": "bulletList",
"content": [
{
"type": "listItem",
"content": [
{
"type": "paragraph",
"content": [
{
"type": "text",
"text": "Lists, "
},
{
"type": "text",
"marks": [
{
"type": "italic"
}
],
"text": "marks"
},
{
"type": "text",
"text": ", and "
},
{
"type": "text",
"marks": [
{
"type": "link",
"attrs": {
"href": "https://github.com/zahidshowrav/blockleaf"
}
}
],
"text": "links"
}
]
}
]
},
{
"type": "listItem",
"content": [
{
"type": "paragraph",
"content": [
{
"type": "text",
"text": "Tables, images, callouts, task lists"
}
]
}
]
}
]
},
{
"type": "taskList",
"content": [
{
"type": "taskItem",
"attrs": {
"checked": true
},
"content": [
{
"type": "paragraph",
"content": [
{
"type": "text",
"text": "Ship versioned JSON"
}
]
}
]
},
{
"type": "taskItem",
"attrs": {
"checked": false
},
"content": [
{
"type": "paragraph",
"content": [
{
"type": "text",
"text": "Tick this box and watch the JSON change"
}
]
}
]
}
]
}
]
}- Versioned JSON
- Every document carries a schema version, and every change to the stored shape ships a migration.
- Server rendering included
@blockleaf/rendererturns stored JSON into React or HTML with no editor and no ProseMirror.- One stylesheet
- Custom properties, no Tailwind, no
prose, no build step of its own.