v0.54.0
Immutable release. Only release title and notes can be modified.
0.54.0 (2026-08-13)
💖 The math block and diagram block has been sponsored by DINUM 🇫🇷
Math Block
A long requested feature, you can now add block & inline math to a BlockNote editor. They are driven by Katex & support much of Latex for all your notation needs.
math-block.mp4Diagram Block
We've also added support for a diagram block driven by Mermaid.js, allowing you to add diagramming to the editor.
diagram-block.mp4Source Block with Preview
Both the Math block & Diagram block are built on a primitive that you can build your own custom blocks from. The Source Block with Preview primitive allows you to build a pair of a block which renders content with an inline editor for the content being rendered. This can enable other sorts of preview-like features in the future, exposed as an API for you to build your own custom blocks with.
🚀 Features
- Adds a Math block (2a34f7d70)
- Adds a Diagram block (0fca0ee7a)
- core: Source-with-preview, syntax highlighting & exporter images (503c796d3)
🩹 Fixes
- ai: Operations on collaborative documents (#2952)
- ai: Operations on blocks containing comments (#2953)
- pdf: Add custom font and fontFamily options for CJK (#2945)
- Expose first suggestion as active descendant (#2965)
- xl-docx-exporter: Clamp list nesting to the levels DOCX defines (#2969)
❤️ Thank You
- Adarshsm adarshmudugal@gmail.com
- Nick The Sick (@nperez0111)
- Pupuking723 2318857637@qq.com
v0.53.0
Immutable release. Only release title and notes can be modified.
0.53.0 (2026-08-06)
🚀 Features
- shadcn: ⚠️ Use base-ui instead of radix (BLO-1279) (#2913)
🩹 Fixes
- getCellSelection throwing error in positions (BLO-1193) (#2911)
- Multi-column slash menu items within a column (BLO-905) (#2914)
- Suggestion menu behaviour (BLO-1283, BLO-955) (#2930)
- Ignore useless block/inline content mutations (BLO-1224) (#2912)
- slash-menu: Better overflow behavior (BLO-1192) (#2909)
- Slash menu item selection behaviour (BLO-1222) (#2838)
- HTML export/parse round trip ignoring empty blocks (BLO-873) (#2931)
- core: Guard getBlock() calls to prevent TypeError on stale blocks (#2941)
- Stop stale node view positions crashing the editor (#2938)
- Multi-column trailing blocks, column hover borders & drop cursor left edge BLO-1226 (#2885)
⚠️ Breaking Changes
- shadcn: ⚠️ Use base-ui instead of radix (BLO-1279) (#2913)
❤️ Thank You
- Yousef yousefdardiry@gmail.com
- Nick Perez nick@blocknotejs.org
- Matthew Lipski (@matthewlipski)
v0.52.1
Immutable release. Only release title and notes can be modified.
0.52.1 (2026-07-20)
🩹 Fixes
- react: Avoid importing yjs in the default UI (#2902)
❤️ Thank You
- Nick Perez nick@blocknotejs.org
v0.52.0
Immutable release. Only release title and notes can be modified.
0.52.0 (2026-07-20)
🚀 Features
- Migrate to Vite+ (#2745)
- Decouple yjs from blocknote/core (#2741)
moveBlocksbehaviour when leaving empty columns (BLO-1109) (#2842)- comments: Confirm before discarding an unsaved comment (blo-1197) (#2861)
- core: Support "plain" block content (BLO-335) (#2868)
⚠️ Migration Guide
Yjs is now decoupled from @blocknote/core. Instead of passing a collaboration option directly to the editor, you now wrap your editor options with the withCollaboration helper imported from @blocknote/core/yjs.
Before (< 0.52.0):
const editor = useCreateBlockNote({ // ...other editor options collaboration: { provider, fragment: doc.getXmlFragment("document-store"), user: { name: "My Username", color: "#ff0000", }, }, });
After (>= 0.52.0):
// Import the helper from the decoupled Yjs entrypoint: import { withCollaboration } from "@blocknote/core/yjs"; const editor = useCreateBlockNote( withCollaboration({ // ...other editor options collaboration: { provider, fragment: doc.getXmlFragment("document-store"), user: { name: "My Username", color: "#ff0000", }, }, }), );
The collaboration object itself (provider, fragment, user, showCursorLabels, etc.) is unchanged — you only need to:
- Import
withCollaborationfrom@blocknote/core/yjs. - Wrap your editor options object with
withCollaboration(...), keeping thecollaborationproperty inside it.
The same applies when creating an editor with BlockNoteEditor.create(withCollaboration({ ... })).
🩹 Fixes
- Align side menu to tables (BLO-1117) (#2837)
- Remove cursor flicker in trailing block (#2839)
- table: Guard stale block after changes for table handles (#2821)
- xl-ai: Remove 'use client' from server entry (BLO-1235) (57596cee6)
- tables: Tab causing indent in last table cell (BLO-1211) (#2831)
- core: Use dynamic propSchema when extending default block specs (#2882)
- xl-pdf-exporter: Fix emoji rendering for ZWJ sequences in PDF export (#2871)
- core: Ignore synthetic mousemove events without coordinates in side menu (#2895)
- core: Read hardBreakShortcut from block spec impl (#2891)
- xl-email-exporter: Update react-email deps to fix fresh install tests (#2898)
- core: Call scrollIntoView() on Enter (#2802)
❤️ Thank You
- Nick The Sick (@nperez0111)
- Luc H wereld03@gmail.com
- Nick Perez nick@blocknotejs.org
- Yousef yousefdardiry@gmail.com
- Matthew Lipski (@matthewlipski)
- Alex Yang (@himself65)
- Yousefed yousefdardiry@gmail.com
- Satoren satoreyo@hotmail.com
v0.51.4
Immutable release. Only release title and notes can be modified.
0.51.4 (2026-06-02)
🩹 Fixes
- add explicit type annotations for callback params losing contextual typing (#2815)
- Comments emoji picker button issues (BLO-1199) (#2769)
- core: add editor cleanup in BlockNoteEditor.test.ts to prevent unhandled DOMObserver errors (#2816)
- table: prevent crash when pressing Enter in a table cell (#2793)
❤️ Thank You
- Matthew Lipski @matthewlipski
- Nick Perez
- Nick the Sick @nperez0111
- Yuki Terashima @y-temp4
v0.51.3
Immutable release. Only release title and notes can be modified.
0.51.3 (2026-05-26)
🩹 Fixes
- table cell colors (BLO-1198) (#2770)
❤️ Thank You
- Matthew Lipski @matthewlipski
v0.51.2
Immutable release. Only release title and notes can be modified.
0.51.2 (2026-05-20)
🩹 Fixes
- color picker icons (BLO-1189) (#2762)
❤️ Thank You
- Matthew Lipski @matthewlipski
v0.51.1
Immutable release. Only release title and notes can be modified.
What's Changed
- fix: backslash newlines when copying from a code block by @nperez0111 in #2709
Full Changelog: v0.51.0...v0.51.1
v0.51.0
Immutable release. Only release title and notes can be modified.
0.51.0 (2026-05-14)
This release removes ~100 dependencies from @blocknote/core
This version we have completely rewritten the markdown ↔ html conversion primarily to remove ~80 dependencies from the package. This was a burden to everyone who does not rely on markdown conversion in their editor. If you run into issues with our new markdown parser & serializer, feel free to post an issue if it is obviously incorrect. We do ask however, if your issue is related to some edge case of the markdown format that you instead handle the markdown parsing in your application and invoke editor.tryParseHTMLToBlocks instead, as we do not intend to handle all markdown documents.
🚀 Features
- Trailing block extension rewrite (#2733)
- markdown: replace unified.js with custom markdown parser/serializer (#2624)
- react: configurable portal targets for floating UI (#2729, #2692)
🩹 Fixes
- Pasting plain text from VSCode (BLO-366) (#2713)
- Parse new lines in
text/plainas line breaks (BLO-1170) (#2712) - Code block PDF export (BLO-987) (#2725)
- Formatting toolbar opening when inserting file block with
trailingBlock: false(BLO-860) (#2704) - numbered list item decorations missed on initial render (#2734)
- flicker-free mobile formatting toolbar via CSS custom properties (#2617, #2616)
- add
bn-thread-orphanedCSS class to distinguish orphaned threads (#2737, #2735) - set width attribute on image and video elements in editor render (#2740, #2726)
- a11y: use figure/figcaption for media block captions (#2717)
- ai: loosen serialization of blocks in columns (#2716, #2718)
- core: trigger codeblock input rule on Enter and place cursor inside (#2686)
- core: preserve list item type when pasting into empty list items (#2722, #2330)
- core: unmount editors in transformPasted tests to prevent unhandled error (e62880b21)
- drag-n-drop: support PDF block drag & drop (BLO-893) (#2714)
- i18: improve french translation for empty toggle list (#2721)
- markdown: emit tight lists when serializing blocks to markdown (#2715)
- markdown: skip placeholder text for empty files (#434, #2719)
- markdown: stable round-trip for tables, captions, and audio (#2720)
❤️ Thank You
- Cyril G @Ovgodd
- Manuel Raynaud @lunika
- Matthew Lipski @matthewlipski
- Movm @Movm
- Nick the Sick @nperez0111
v0.50.0
Immutable release. Only release title and notes can be modified.
0.50.0 (2026-05-04)
🚀 Features
- Dark mode styling for file block wrapper component (BLO-866) (#2680)
- Drag hendle menu delete button removes all other blocks in selection (BLO-1007) (#2683)
- Enter moves selection to cell below in tables (BLO-1006) (#2685)
- additional heading top padding (BLO-1008) (#2690)
- Code mark input rule edge case (BLO-938) (#2698)
- mantine: upgrade peer dep range for @mantine/core and @mantine/hooks to allow
9.x(#2655)
🩹 Fixes
- Hardcoded strings in comment components (BLO-1033) (#2681)
- Color naming & CSS (BLO-946) (#2684)
- link HTML attributes (BLO-915) (#2687)
- guard hideMenuIfNotFrozen against undefined view state (#2694, #2699)
- Clicking comment overlapping link opens link (BLO-1091) (#2696)
- prevent table row drag from moving an extra adjacent row (#2703)
- clipboard: use ProseMirror selection state for Shadow DOM compatibility (#2677)
❤️ Thank You
- jt_fox @LimChaeJune
- Matthew Lipski @matthewlipski
- Nick Perez
- Wieland Lindenthal @wielinde
- Yousef

