Most teams that need a rich-text editor reach for the same heavyweight libraries, inherit their abstractions, and then spend the next month bending them to fit. We got tired of that pattern — so we built our own editor from scratch, and we are releasing it in the open. It is called Rune, and you can try it today at runeditor.com.
Our own path to Rune was the same. We tried the established editors and kept hitting one of two walls: the genuinely capable ones carried licensing costs that scaled badly against what we actually needed, and the cheaper options meant weeks of fighting someone else's abstractions to do anything custom. Talking to other developers, we heard the same frustration again and again — it is not a niche complaint. So we built the editor we wished we had had: capable, dependency-free, and free to use.
What you write is what you get
Rune is a headless, configuration-driven WYSIWYG editor with zero dependencies. There is no ProseMirror underneath, no Slate, and no build step to stand up. It is a single library that outputs sanitized HTML and otherwise stays out of your way — everything a document needs, nothing it doesn't.
Headless means the editor ships its behaviour, not your design. You bring the look; Rune brings the editing. Theming is plain CSS variables, dark mode included, so it inherits your design system instead of forcing one on you.
Config-driven, not framework-driven
The thing we cared about most was control. Rune's toolbar and menus are driven entirely by configuration: enable a block or a mark and it appears, disable it and it is gone — with no other files to touch. You ship exactly the editing surface your product needs, no more.
And it goes wherever you do. The same editor runs as vanilla JavaScript, or inside React, Vue, Svelte, or as a Web Component. Setup takes about five minutes across any of them.
Everything a document needs
Out of the box, Rune covers the building blocks of a real document:
- 14 block types — headings, lists, tables, callouts, code, task lists, toggles, columns, video, and dividers
- 12 inline marks and 5 formatting controls — including font size, color, highlight, alignment, and line-height
- 7 plugins — markdown shortcuts, smart typography, regex find-and-replace, drag-to-reorder, a format painter, and an emoji picker
- Real-time collaboration with live cursors, tracked suggestions, and threaded comments
- Offline-first persistence to IndexedDB, so documents survive a refresh or a dropped connection
Collaboration is included, not an afterthought
Most editors treat real-time collaboration as a bring-your-own-backend problem: the editor handles the cursors, but you stand up and operate a separate sync service to make any of it work. Rune ships with a built-in Yjs collaboration server, so live cursors, tracked suggestions, and threaded comments work out of the box — there is no separate backend to run, secure, and pay for. It is there when you enable it, and gone when you do not.
Why we open-sourced it
We build tools we would want to use, and an editor this central to a product should not be a black box you cannot change. Rune is MIT-licensed and free — even the attribution is removable through configuration. If it saves another team the month we spent, that is the point.
It is the first of what we are calling Labs: software we write and maintain in the open, used in our own engagements and shared with anyone who can use it.
Try it
Rune installs from npm as a single package:
- Source on GitHub: github.com/parityfox/rune
- Live playground and docs: runeditor.com
- More on our Labs page: parityfox.com/labs/rune
npm install @parityfox/rune-editorIf you are weighing an editor for your product and want a second opinion on the trade-offs, we are happy to talk.
Begin a conversation → about the systems you depend on.