Public beta available — Start here
Stesura
What sets us apart

The six things that were hard to build.

From a distance every editor's feature list looks the same. These are the parts that took the longest, that can't be bolted on afterwards, and that decide whether a document tool actually holds up for contracts and filings.

01Export

Page 7 is page 7.

In the editor, in the PDF, and for everyone else on the matter. One layout engine decides where every page breaks, and the export is that decision printed.

Most editors export by handing HTML to the browser's print pipeline and letting it re-paginate from scratch. That is why exports surprise people: a heading ends up alone at the foot of a page, a footnote drifts, the page count moves between one machine and the next. Stesura never re-flows on export.

Deterministic

The same document produces the same PDF — on any machine, for any user, every time.

No re-flow on export

Page breaks, headers, footers and numbering are decided once, in the editor, and carried over.

Print-exact pagination

Page counts, break points and numbering match. The PDF is the document, printed — not a second attempt at laying it out.

What we don't claim: pixel-identical rendering between your browser and the PDF. No one can honestly promise that, and the people who do are describing a target that doesn't hold still. What we guarantee is the pagination — where the breaks fall, how many pages there are, and what each one is numbered.

See where the edges are

Word in, Word out.

Your clients will send you a .docx. They will expect a .docx back. That constraint is not negotiable, so we treated it as a first-class feature rather than a converter bolted on at the end.

Import and export are the same model, not two half-maintained pipelines.

Named styles, multi-level numbering and numbering overrides survive both directions.
Sections keep their page size, margins, and first / even / odd headers and footers.
Footnotes, endnotes, comment threads and tracked insertions and deletions come back as themselves.
Equations round-trip as OMML — real math nodes on the way in, real math fields on the way out.

Documents your backend can edit.

Generate a document from a template, push a clause update across forty matters, or stamp in a signature block — from the server, while people have the document open in front of them.

Collaboration is server-authoritative, not a CRDT living in the browser. The server holds the document, so the server can change it.

A server-side edit is an ordinary ProseMirror transaction against the real schema — validated by the same rules as a keystroke, not a mutation applied to a document nobody is checking.
It rebases against live authors like any other edit, with explicit contention results you can retry on.
Postgres for storage, Redis for fan-out, presence and live cursors included.
All of it runs on your infrastructure. There is no hosted service in the path.

Drop it in. It is a React component.

Install it, render it, style it. There is no iframe, no SaaS dependency and no mandatory backend — the editor runs client-side, in your bundle, under your CSS.

Nothing proprietary sits between you and the document.

The whole document is a plain JSON tree you can store, diff, validate and generate.
The ProseMirror layer is kept separate from React, so the same schema and commands run on your server.
Real nodes in the real DOM — inspectable, themeable, and testable with the tools you already use.
Ships as npm packages you version yourself, not a script tag pointing at someone else's CDN.

Extensible where it counts.

Most editors that ship a word processor's feature set close the door behind them. The whole point of building on ProseMirror was to leave it open.

What we don't hand over is the schema's spine — track changes, comments, numbering and pagination all depend on knowing how the document is shaped. Everything around it is yours.

Your own nodes and marks, rendered as React node views inside the editor's React tree.
Plugins with the complete ProseMirror API — no wrapper dialect to learn first.
Toolbar tabs, groups and buttons defined declaratively, alongside or instead of ours.
Floating menus, context menus, right-hand panels and status-bar items, all through one extension API.
Also true

The details that only show up in real documents.

None of these sell an editor on their own. All of them are the reason a document looks wrong three weeks into a project.

AI that redlines

AI edits can land as tracked suggestions — reviewed, accepted or rejected exactly like any other author's.

Tables that split

A table row can break across a page boundary mid-cell, instead of being shoved whole onto the next page.

Images that behave like Word's

Anchored images with square, tight, in-front and behind text wrapping — not just block images between paragraphs.

Headers and notes are real editors

Headers, footers, footnotes and endnotes each run as an isolated editor with its own rules, not as a text field.

Language is part of the document

Every block carries its own language, so one document can spell-check an English clause and a French one correctly — and spell its numbering out in the right language. Bidi-aware throughout, with ten UI locales including Hebrew and Arabic.

No server required

A local-authority mode runs the same engine entirely in the browser, with IndexedDB persistence and multi-tab sync.

Put a real word processor in your product.

Book a demo, or start with the open-source core today.

Want to know why we build this? Read it here: