Documentation
Setting up the editor, the options and commands of every feature, running your own collaboration server, and moving across from TinyMCE or Froala.
New here? Start with the introduction and quick start.
Getting started
-
Introduction
An embeddable rich text editor written in TypeScript. It has its own document engine, a default interface, a headless API and adapters for the common frameworks.
-
Installation
Better Rich Text isn't on a public package registry. After you buy a licence, download the zip from your Lemon Squeezy receipt or order page.
-
Programmatic API
Everything the toolbar does is a typed command, so anything a person can do in the editor, your code can do too.
-
Frameworks
Every adapter wraps the same
createRichTextEditorand behaves the same way. -
Presets
@better-rich-text/presetshas four ready-made presets forcreateRichTextEditor. -
Licence
Better Rich Text Commercial Licence, version 1.0. Copyright © 2026 Dwayne Charrington.
Features
-
Tables
Tables are built from three parts: the model and commands in
@better-rich-text/plugin-table, the table view the plugin contributes toEditorView, and the table interface in… -
Document structure
Five opt-in packages add structure and references to a document. Each is a separate plugin with its own commands, hooks and interface, so an editor only pays for the ones it installs.
-
Smart content
Mentions, merge tags, conditional content, dates, templates, emoji and image editing.
-
Code and math
Two opt-in plugins.
-
Markdown
Better Rich Text reads and writes CommonMark and GitHub Flavored Markdown. You can paste it, type it, edit it as source, store it and bind it to forms, and plugins can add their own syntax.
-
Comments
@better-rich-text/plugin-commentsadds threaded comments anchored to text: a margin sidebar with cards beside their text, inline thread popovers, replies, @mentions, reactions… -
Suggestions
Suggestion mode (track changes) records edits as proposals instead of applying them.
-
Revision history
Revision history is opt-in. It adds snapshots (manual, automatic and after saves), a history panel that compares any version with the current document or with another version, and…
-
AI assistance
The AI plugin adds writing actions (improve, fix spelling and grammar, shorten, expand, simplify, change tone, translate, summarise, turn into a list, continue writing, and free-form…
-
Proofing
@better-rich-text/plugin-proofingadds spelling, grammar and style checking. Native browser spellcheck works with no setup. -
Quality tools
Three opt-in tools help authors publish content that works for everyone: an accessibility checker, a link checker and visual aids that show block structure and invisible characters.
-
Documents
Word import and export, PDF files, full-page HTML and email export. Each format is its own package, so an editor only bundles what it uses.
-
Menus and dialogs
Opt-in interface features for a classic editor: a menu bar, a context menu, a Styles menu, help, preview and block handles.
-
Skins
A skin sets the look of the editor chrome (toolbar, menus, popovers, dialogs, find panel, status bar, source view, character picker, selection toolbar) and the content area.
-
Localisation
The editor interface (toolbar, menus, dialogs, find and replace, table tools, status bar, slash menu, context menu and command palette) is English by default.
Collaboration and servers
-
Users
One function tells the editor who people are. Comments, suggested edits, revision history, live presence and mentions all read names, avatars, titles and colours from it, so you write…
-
Server
Better Rich Text runs entirely in the browser. You only need a server for features that store or fetch shared data.
-
0004 Collaboration
Real-time collaboration is opt-in. Several people edit one document, see each other's selections and carets, and discuss text in anchored comment threads.
Migrating
-
Migrating
@better-rich-text/migratemoves an existing TinyMCE or Froala integration across. -
TinyMCE parity
Every TinyMCE 7 plugin, open source and premium, with the Better Rich Text package, feature and commands that cover it.
Architecture
-
0001 Architecture
The document is an immutable JSON tree owned by an original TypeScript engine. Every content change compiles to primitive, invertible operations applied to an isolated transaction…
-
0002 Inline content invariant
Every caret position is a
TextPoint(text leaf id + UTF-16 offset). To make that true, a textblock's children are text leaves and inline atoms where adjacent leaves never share… -
0003 Filters and actions
Events report what happened. Hooks let extensions change how it happens.
-
0005 Suggestions
Suggestion mode records edits as proposals that people accept or reject. It must work for any command (typing, paste, AI, input rules, lists), in standalone editors and under real-time…