An editor writers do not fight with
Most of your team will spend all of their time on one screen. It is built to stay out of the way — and underneath, rich text is stored as a document rather than a blob of HTML, which is what lets the system catch a broken heading order while somebody is still typing.
For writers, editors, and anyone who touches a page
Rich text is a document, not a string
A rich-text value is the node tree the editor produced, stored in a jsonb column. It is not an HTML string that somebody will later parse with a regular expression. That difference is invisible on the day you write a paragraph and decisive on every day after it.
Because the body is structured, the platform can ask questions about it: is the heading order sound, does that table have header cells, does that link say something other than "click here", what language is that quoted passage in. Those are WCAG requirements, and they are checkable here because there is a tree to walk.
The rules live in one place and both sides use it — the editor applies exactly what the server enforces, so nothing passes in the browser and fails on save. Minimum and maximum length count the body’s text rather than its markup, which is why bolding a word no longer costs an author eight characters of their budget.
An editor surface: a toolbar, a heading, a paragraph, a callout, and a two-column table with header cells.
h3 between two h2s is a question it can answer. The screen itself
- Room to actually write
- Rich text opens into the full width of the page rather than a cramped box. The sidebar, the save button and the readiness check stay on screen, so nothing has to be closed to check something.
- A form shaped to the content
- Each content type gets its own fields, laid out in tabs that come from the type’s own declaration. Nobody has to work out which of fifteen empty boxes matters for a press release.
- Tabs you can link to
- Moving between tabs changes the address, so switching language or pressing Back does not throw you to the top of the form. The default tab is left out of the URL, so the bare entry link stays canonical.
- Read-only means read-only
- Somebody without permission to edit sees a page with the editing removed rather than one greyed out — and the text stays selectable, so they can still copy what they came for.
What writers get without asking anybody
All of it ships. None of it is a plugin to install or a ticket to raise.
- Headings, lists, quotes and dividers
- Tables, with real header cells
- Callouts for warnings and asides
- Column layouts
- Images, resizable in place
- Video embeds
- Links between entries
- Alt text on every image, with a “decorative” option
- A language marker on a quoted passage
Ten minutes before a launch
The page is written, the images are in, and the readiness panel says one thing is missing: a heading jumps from level two to level four. It is not a warning somebody will see in an audit next quarter — it is on the screen, next to the save button, while the person who can fix it in four seconds is still looking at it.
Media arrives from the library, not from your desktop
An image in a body is a reference to an asset in the media library, not a copy pasted into the document. Replace the asset and every entry using it shows the new one; the alt text lives with the asset, so it is written once rather than re-typed by whoever happens to use it next.
The editor asks for a derivative rather than the original — a thumbnail in a picker, a preview in the body — so a page with twelve images does not cost the writer twelve full-size downloads while they work.
A legacy HTML body from an older version is still a valid value. It reads, validates and renders as it always did, and the editor rewrites it as a document the next time somebody saves — so content upgrades as it is edited rather than in a migration that has to parse everything at once.
Questions writers ask
Do I need to know anything technical?
No. Everything on this page happens in a browser, in an ordinary form. The only part of Apograph that involves code is defining what types of content exist, which an engineer does once.
What happens if I close the tab by accident?
Whatever you last saved is kept, and every save is kept permanently. The worst case is losing what you typed since the last one.
Can two people edit the same page?
They can both open it, and the second save wins — but nothing is lost. The first save is still a version sitting in the timeline, so you can compare the two and restore the earlier one if the wrong edit landed on top.
Why can I not search inside a body properly?
Free-text search reaches the body, but it is a plain text match rather than an indexed search. Filters deliberately do not offer rich text at all, because comparing two documents would compare serialisations of a tree rather than prose.
Next
Every feature is included, free
The core is MIT licensed and every feature is in it — none of them is paid-only. Community runs free in production; a plan buys room and governance, not a different product.