Comparison
Measured where it can be measured, and honest where it cannot. Including the column that says what the others do better.
The numbers
| Matra | Tiptap | Lexical | Slate | |
|---|---|---|---|---|
| Bundle, gzipped, starter kit | 31.1 kB | 117.2 kB | ~35 kB | ~50 kB |
| Packages installed | 2 | 50 | 34 | 12 |
| Of those, outside the editor’s own scope | 0 | 22 | 10 | 8 |
| Engine underneath | its own | ProseMirror | its own | its own |
| Engine types in your code | none | ProseMirror | Lexical | Slate |
| Command types | inferred | augmentation | manual | manual |
| React binding | first-class | first-class | first-class | first-class |
| Vue binding | first-class | first-class | community | community |
| Svelte and Solid bindings | first-class | community | community | community |
| Threaded comments | free | subscription | build it | build it |
| Collaborative cursors | free | free | free | build it |
Bundle figures from the benchmarks, gzipped. Package
counts measured on 2026-09-07 by asking npm to resolve a React install of each, with
React itself and @types/* left out · Tiptap 3.31.3, Lexical 0.50.0, Slate 0.126.2.
Reproduce it with node scripts/rivals.mjs.
Extension by extension
Tiptap 3 moved most of its old Pro extensions to MIT. This list is shorter than it was, and saying so is cheaper than being caught.
Only here
Only there
Questions
Yes. `@matrajs/collab` exports `remoteCursors()`, which draws everyone else’s caret and selection as decorations and maps their positions through your own edits, so a remote caret stays on the word it was on while you type in front of it. It ships with `colorFor()` for a stable per-person colour and a stylesheet you can replace. The difference from Tiptap is underneath: Tiptap’s collaboration is Yjs, a CRDT; Matra exchanges ProseMirror-style steps against a central authority you host. Matra’s is simpler to run and cannot merge two clients that were both offline for an hour.
No. The document model is the same shape — nodes, marks, a schema, positions as integers — so a document converts, but the API does not match. Extensions are plain objects rather than classes, commands are typed from the array you passed rather than from module augmentation, and there is no ProseMirror underneath to reach into. Moving a small editor across is an afternoon; moving one with custom node views and ProseMirror plugins is not.
A gap cursor, an audio node, ruby text, CRDT collaboration through Yjs, a library of styled React components, and — behind a subscription — track changes, DOCX and ODT import and export, and pagination. Tiptap also inherits ProseMirror’s ecosystem, which is a decade deep. Everything else Tiptap publishes openly has an equivalent here.
Yes, measurably. An application importing the editor and a starter kit, bundled with esbuild and gzipped, is 31.1 kB with Matra and 117.2 kB with Tiptap 3.30. A React install resolves 2 packages for Matra and 50 for Tiptap, of which 22 are outside the @tiptap scope — mostly ProseMirror.
No. The document model, the transform system, position mapping and the view are its own, with no runtime dependencies at all. The ideas are ProseMirror’s and are credited as such; the code is not.
`@matrajs/core` and every framework binding are MIT and stay that way, and that includes the extensions other editors charge for — threaded comments, a table of contents, unique block ids, the drag handle. Three packages are source-available and commercial: AI streaming edits, collaboration, and version history. They are free for evaluation, personal projects, education, charities, and organisations with fewer than three developers on the software.
Lexical is Meta’s, has been hardened by Facebook-scale traffic, and has a first-class React story. It also has its own document model, so nothing transfers from a ProseMirror background, and a React install resolves 34 packages. Matra is smaller, has Vue, Svelte and Solid bindings that are not community projects, and reads and writes Markdown in Node with no DOM.
Slate gives you the least and asks the most: no schema to speak of, no extension model, and the editing behaviour is yours to write. That is the right trade when your document is nothing like a document. When it is a document, a schema and seventy-nine extensions save months.