Open source · MIT · built on ProseMirror · 0.x preview

Rich text that writes clean HTML.

An HTML5 WYSIWYG editor with a headless core and an optional toolbar. Made for long documents, with no paid tiers and no closed extensions.

$ npm install stilo-editor
Try it
editor.getHTML() live

Why Stilo

Built for very large documents

Typing feels immediate in a document of 10,000 paragraphs, about 400,000 words. Measured in a real browser against budgets, not assumed.

HTML is the public format

Content goes in as HTML and comes out as clean, semantic, self-contained HTML, with a strict allowlist for tags, attributes and inline styles.

Headless core, optional UI

The core works without any UI. The default toolbar and menus are a separate, replaceable module.

Entirely open source

MIT licensed, aiming at the feature level of the established editors, with no paid tiers and no closed “pro” extensions.

Extensible by design

Every feature is an extension with the same shape, so adding your own follows the same path.

Framework-agnostic

Vanilla TypeScript, ESM only, types included and tree-shakable.

What it does

With the default extensions and toolbar. On macOS, use ⌘ for Ctrl and Option for Alt.

Text

Bold, italic, underline, strikethrough, inline code, subscript and superscript, font family and size, text color and highlight, text case.

Ctrl+B Ctrl+I Ctrl+U

Blocks

Headings, quotes, code blocks, horizontal lines, alignment and line spacing. Move any block up and down.

Ctrl+Alt+1…6 Alt+↑

Lists

Bulleted, numbered and checklists, nested with Tab. Type - , 1. or [ ] to start one.

Ctrl+Shift+7 8 9

Tables

Insert from a grid, add and delete rows and columns, merge and split cells, header rows, handles on rows and columns, resizable columns.

Tab Shift+Tab

Links and images

A link popover with “open in new tab”. Paste an image or a screenshot and resize it with its handles.

Ctrl+K Ctrl+V

Paste cleanup

HTML pasted from the web, Microsoft Word and Google Docs is cleaned up: real lists, tables with their column widths. Or paste plain text.

Ctrl+Shift+V

Find and replace

Match case, whole word, replace one or all, with an exact count of the matches. A status bar counts words and characters.

Ctrl+F

Markdown as you type

**bold**, ==highlight==, # for headings, > for quotes, ``` for code, --- for a line.

Backspace undoes it

Keyboard and accessibility

The toolbar follows the WAI-ARIA Toolbar pattern, every popover works with the keyboard alone, every tooltip shows its shortcut.

Alt+F10 Esc

Get started

main.ts

Options, commands, events and the toolbar: API reference.