Skip to content

v0.11.0 - The Editor Framework!

Compare
Choose a tag to compare
@doodlewind doodlewind released this 11 Jan 07:33
· 935 commits to master since this release
blocksuite-cover

The BlockSuite v0.11.0 release is now available! With 317 PRs landed and 6 new contributors, this version marks a milestone in our journey: evolving from a proprietary editor to a general-purpose editing framework.

BlockSuite originated as an editor designed to meet the needs of the AFFiNE knowledge base, which is why, for a long time, it provided a default EditorContainer that included both document editing and whiteboard functionalities. Early updates also focused heavily on specific features for AFFiNE products.

However, during the development of BlockSuite, we've built a range of front-end infrastructures from the ground up, spanning from rich text editing to whiteboard rendering. This version introduces extensive engineering refactoring and modular layering, resulting in the birth of a new, universal editing framework.

Traditionally, developing a stable rich text editor could take years of challenging work. But the evolution of BlockSuite has far outpaced this. We believe our work stems from embracing a new architectural pattern called document-centric, which simplifies the complex architecture of traditional editors by natively building the data layer in the editor with CRDT, thereby providing a more efficient development experience.

Key changes in BlockSuite 0.11.0 for developers include:

  • The new @blocksuite/presets package, which splits the independently usable DocEditor and EdgelessEditor, among others.
  • Distinct structuring of the BlockSuite framework layer, including atomic concepts like Editor, Block, Fragment, Widget, and definitive guides on how they combine. The current DocEditor and EdgelessEditor are based on this headless framework layer.
  • Based on BlockSuite headless, the accompanying front-end framework has been switched from lit to atomico for the experimental editor abed. This proves the feasibility of using the BlockSuite framework independently of specific front-end frameworks. We're also embracing React, Vue, and more diverse front-end frameworks, and there's more to come in terms of framework adaptation!
  • Completely rewritten BlockSuite framework tutorial and architectural exploration documentation, also available in Chinese for convenience.

We've also switched to the new home page blocksuite.io, welcome to give it a spin!

The establishment of the framework layer is just the first step in BlockSuite's longer-term vision. The current stable framework layer modules and APIs are still akin to the more low-level, headless part of tools like ProseMirror. Plans are already in place for more out-of-the-box preset support. Stay tuned!

Notable Product Features in 0.11

  • Support for Linked Page Previews (#5813): Added the basic functionality to support linked page previews in the Table of Contents (TOC), enhancing user navigation experience.
  • Enhanced Bookmark Functionality (#5636): Improved the bookmark block to appear directly at the top level of the edgeless canvas, simplifying the process of pasting elements into the whiteboard.
  • Consistent Dragging Behavior (#5613): Improved the consistency of dragging behavior, support dragging paragraphs and images outside of the note block.
  • Frame Sidebar Support (#5584): Added support for frame sidebars fragment, which brings more intuitive control in edgeless editor.
  • Frame Navigator Optimization (#5498): Optimized the frame navigator, enhancing user navigation efficiency and experience.
  • New Table of Contents (TOC) (#5539): Introduced a new TOC fragment, enhancing document organization and navigation capabilities.
  • Embed View for Certain Attachment Types (#5475): Added embed view support for certain attachment types, enhancing the presentation and interactivity of multimedia content.

Notable Framework Enhancements in 0.11

  • Canvas Content Interleaving Based on LayerManager (#5347): Enabled canvas content interleaving with DOM based on LayerManager, enhancing the editor's visual representation and flexibility.
  • Support for Multiple Editor Instances (#5878): Implemented support for multiple editor instances, increasing the flexibility and scalability of the editing environment.
  • Vitest Browser Test Runner (#5536): Added the DOM-based Vitest browser test runner, making easier for writing integration tests.
  • Support for Custom Inline Nodes (#5909): Introduced the custom InlineSpec feature, enhancing flexibility in text editing, especially for advanced content editing like inline LaTeX.
  • Surface Elements API (#5874): Introduced a new surface elements API, avoid raw Y.Map manipulations.
  • Replaced Export Manager (#5934): Fully removed the last part of legacy ContentParser and introduced a new export manager based on snapshot and adapter mechanisms, greatly enhancing support for third-party formats and scalability.
  • Persisting Editing Session State (#5804): Implemented the temporary storage of user toolbar options and other temporary states through SessionStorage, enhancing usability in frequent switching scenarios.
  • Multi-Instance Selection Enhancement (#5852): Refactored the surface selection mechanism to support multiple instances, making the SurfaceSelection in EdgelessEditor more aligned with DocEditor.
  • Optimized Zoom In/Out Performance (#5791): Performance optimization for zoom in and out functionalities, improving response speed and smoothness.
  • Inline Editor Renaming (#5671): Renamed VirgoEditor to InlineEditor to more accurately reflect its functionality.
  • Stash and Pop for Reactive Proxy (#5627): Introduced stash and pop functionalities for reactive proxies, making state management of local non-collaborative fields easier.
  • Splitting Editor Container into Sub-Editors (#5612): Divided the EditorContainer into multiple sub-editors, improving manageability and modularization.
  • Editor and Presets Package Reorg (#5570): Renamed @blocksuite/editor to @blocksuite/presets to more accurately reflect its function and purpose.
  • Embed Block Helper (#5518): Added an createEmbedBlock helper API in @blocksuite/blocks, simplifying the creation and management of embedded content.

Detailed Bugfixes

New Contributors

Full Changelog: v0.10.0...v0.11.0