github TypeCellOS/BlockNote v0.56.0

5 hours ago

0.56.0 (2026-10-14)

This release brings two major features:

  • Layout blocks & block frames (preview): custom blocks that hold and arrange other blocks, such as tabs, steppers and alerts with a body. 💖 Sponsored by XWiki.
  • Version history overhaul: a new history sidebar, version comparisons with author attribution, and a YHub storage backend. 💖 Sponsored by DINUM 🇫🇷.

See below for details. This release has breaking changes; see Breaking changes before upgrading.

🚀 Features

  • Layout blocks & block frames (preview): custom blocks can now hold other blocks (layoutOnly) and draw a frame around their content and children (renderFrame). (#3059)
  • Keyboard settings for custom blocks (experimental): set how Enter, Backspace and Shift-Tab work in a block with experimental_keyboard. (#3059)
  • Toggles rebuilt: Enter in an open toggle adds a block inside it, a closed toggle keeps its children, you can drop blocks into a toggle (also an empty one), and the toggle button is accessible to screen readers. (#3059)
  • Menus follow the schema: the slash menu and block type select show only the block types your schema supports, including only the configured heading levels. (#3059)
  • Version history rebuilt, with customizable snapshot actions. (#3090)
  • Side menu hover rewritten: the side menu now follows the block under the pointer, which fixes nested blocks, columns, scrolling containers and overlapping editors. New hoverMargin and dropMargin options. (#3179)
  • Down arrow in a block without content at the end of the document creates a paragraph. (#3113)
  • Better Backspace handling in nested blocks. (#3124)
  • Mod+A shortcut changes. (#2995)

🔥 Performance

  • Less layout shift when the Inter font loads. (#3130)
  • Large version diffs show in one transaction. (#3090)
  • Removed an unused source preview anchor. (#3099)

🩹 Fixes

  • Suggestion menu: it opens below unless cramped, keeps its side and width while you filter, flips above when fewer than five items fit below, and doesn't jump when it scrolls. (#3188, #3190, #3198)
  • Email exporter: text is escaped instead of being inserted as HTML. (#3100)
  • Dropping a block into a toggle works with a real drag. (#3195)
  • WebKit no longer scrolls when a block is dropped. (#3122)
  • The formatting toolbar stays hidden when focus returns to editor UI. (#3187)
  • A code block typed without a language uses the default language. (#3024)
  • Inline code no longer clears comments. (#2832)
  • Math previews open on the first click, and selected inline math is styled correctly. (#3129, #2983)
  • Markdown autolinks round-trip. (#3115)
  • insertInlineContent no longer adds content after the cursor. (#3112)
  • No error when the placeholder style is already removed. (#3145)
  • Block changes from before the view exists are no longer marked. (#3193)

⚠️ Breaking changes

Side menu

  • By default, the side menu only shows while the pointer is over the editor (including its padding). Before, it also showed up to 250px around it. Set sideMenu.hoverMargin to widen the area. (#3179)

Custom blocks & toggles

  • blockTypeSelectItems(dict) is now blockTypeSelectItems(editor), because the items depend on the schema. (#3059)
  • Deprecated, still works: meta.hardBreakShortcut. Use experimental_keyboard.enter and experimental_keyboard.shiftEnter. (#3059)

Behavior changes

  • Mod+A now selects the current block first, and the whole document on the second press. Set selectAllBehavior: "document" to select the whole document right away. (#2995)
  • Backspace at the start of a nested block now merges it into the block above, like a top-level block. It un-nests the block only when they can't merge. (#3124)
  • A code block created without a language gets the configured defaultLanguage ("text" by default) instead of "". (#3024)

Imports

  • @blocknote/core no longer exports the built-in extensions (including versioning) or UniqueID from its root. Import them from @blocknote/core/extensions. getDefaultSlashMenuItems, filterSuggestionItems, insertOrUpdateBlockForSlashMenu and getDefaultEmojiPickerItems stay in the root. (#3090)
  • The versioning components (VersioningSidebar, useVersionUsers) moved from @blocknote/react to @blocknote/react/versioning. (#3090)

Versioning


Layout blocks & block frames (preview)

💖 This feature is sponsored by XWiki. Thanks for supporting BlockNote!

Layout blocks and block frames let you control how a block's children are rendered. With them, you can build block types that weren't possible before:

  • Block frames: renderFrame draws one frame around a block's content and its child blocks.
  • Layout blocks (layoutOnly: true): blocks with no content of their own that hold and arrange other blocks. Columns are now built this way.

These APIs are a preview and can change before they're stable. We'd love your feedback in Discussions or an issue.

Tabs block

Tabs block

Stepper block

Stepper block

Alert block with a title and body

Alert block with a title and body

Version history overhaul

💖 This feature is sponsored by DINUM 🇫🇷

Version history has been rebuilt from the ground up:

  • History sidebar: browse stored versions, newest first, and view any version read-only.
  • Comparisons: compare a version with the previous one, with the start of the document, or with any other version. Hover a change to see who inserted, deleted or reformatted it, and when.
  • Version actions: name, restore (the current content is saved first) and delete versions, or customize the actions with your own.
  • YHub storage backend, faster diffs, and fixes for concurrent edits (nested blocks now merge correctly).

❤️ Thank you

  • Matthew Lipski
  • Yousef
  • Nick Perez
  • Adarshsm
  • Rovshan Muradov
  • Kevin Jahns (Yjs)

Don't miss a new BlockNote release

NewReleases is sending notifications on new releases.