A complete rich text editor.
Ready for your app.
Classic and Notion-style editing with ready-made UI, a headless core, and native Angular, React, Vue and Vanilla integrations.
MIT-licensed Free editor Optional Pro for collaboration, AI and export
Meet Domternal Pro 1.0. Explore what Pro adds Get started
in minutes.
Pick your framework, install the packages and follow the setup below.
npm install @domternal/core @domternal/theme @domternal/vanilla Add these elements to your page before the module runs.
<div id="toolbar"></div> <div id="editor" class="dm-editor"></div> <div id="bubble" class="dm-bubble-menu"></div>
import { StarterKit, BubbleMenu } from '@domternal/core'; import { DomternalEditor, DomternalToolbar, DomternalBubbleMenu, } from '@domternal/vanilla'; import '@domternal/theme'; const editorEl = document.getElementById('editor')!; const toolbarEl = document.getElementById('toolbar')!; const bubbleEl = document.getElementById('bubble')!; const dm = new DomternalEditor(editorEl, { extensions: [StarterKit, BubbleMenu], content: '<p>Hello from Vanilla!</p>', }); new DomternalToolbar(toolbarEl, { editor: dm.editor }); new DomternalBubbleMenu(bubbleEl, { editor: dm.editor });
Add a host element. The headless core leaves styling to you.
<div id="editor"></div>
import { Editor, Document, Text, Paragraph, Bold, Italic, Underline, } from '@domternal/core'; new Editor({ element: document.getElementById('editor')!, extensions: [Document, Text, Paragraph, Bold, Italic, Underline], content: '<p>Hello <strong>Bold</strong>, <em>Italic</em> and <u>Underline</u>!</p>', });
Add the theme to your global stylesheet before using the component.
@use '@domternal/theme';
import { Component, signal } from '@angular/core'; import { DomternalEditorComponent, DomternalToolbarComponent, DomternalBubbleMenuComponent, } from '@domternal/angular'; import { Editor, StarterKit, BubbleMenu } from '@domternal/core'; @Component({ selector: 'app-editor', imports: [DomternalEditorComponent, DomternalToolbarComponent, DomternalBubbleMenuComponent], template: ` @if (editor(); as ed) { <domternal-toolbar [editor]="ed" /> } <domternal-editor [extensions]="extensions" [content]="content" (editorCreated)="editor.set($event)" /> @if (editor(); as ed) { <domternal-bubble-menu [editor]="ed" /> } ` }) export class EditorComponent { editor = signal<Editor | null>(null); extensions = [StarterKit, BubbleMenu]; content = '<p>Hello from Angular!</p>'; }
import { Domternal } from '@domternal/react'; import { StarterKit, BubbleMenu } from '@domternal/core'; import '@domternal/theme'; export default function Editor() { return ( <Domternal extensions={[StarterKit, BubbleMenu]} content="<p>Hello from React!</p>" > <Domternal.Toolbar /> <Domternal.Content /> <Domternal.BubbleMenu /> </Domternal> ); }
<script setup> import { Domternal } from '@domternal/vue'; import { StarterKit, BubbleMenu } from '@domternal/core'; import '@domternal/theme'; const extensions = [StarterKit, BubbleMenu]; </script> <template> <Domternal :extensions="extensions" content="<p>Hello from Vue!</p>" > <Domternal.Toolbar /> <Domternal.Content /> <Domternal.BubbleMenu /> </Domternal> </template>
One editor.
The whole editing stack.
Classic and Notion-style editing, ready-made controls and a core you can extend.
Notion-style Block UX
Slash commands, block menus and drag-to-nest on the same core as classic editing. Enable the block-control extensions and the Notion preset to build the workflow your app needs.
Rich content, built in
Add the content your documents need. Choose modular extensions and keep control of the editor you ship.
- Tables
- Images
- Task lists
- Mentions
- Markdown
- LaTeX math
- Code blocks
- Emoji
Built-in Toolbar & Theme
The toolbar follows the features you enable. Start with light or dark themes and match your app with CSS custom properties.
Two workflows.
Both built in.
Move structured blocks in Notion-style mode, or paste Markdown into the classic editor and keep working.
Drag to nest tasks
Turn a launch checklist into a structured plan. Drag related tasks under their parent and keep the next steps together, with completed work still in view.
Paste Markdown, get rich text
Copy a Markdown launch brief and paste it into the classic editor. Headings, nested tasks, a delivery table and highlighted code become one formatted document. Check a task and keep editing.
Collaboration, AI,
review and export.
Bring shared editing, AI assistance and document workflows into your app. Enable the Pro extensions you need on the same Domternal editor core.
- Real-time collaboration
- Inline comments and threads
- Version history with author diff
- AI through your own endpoint
- Notion-style columns
- Word and PDF export
Built for production
Concrete safeguards and extension APIs for editors that have to hold up in real applications.
Composable core
Schema conflicts fail clearly at startup. Extension inheritance and fluent, dry-runnable commands keep custom behavior predictable.
Four-layer URL hardening
Dangerous URL protocols are blocked in parsing, rendering, commands and input rules for both links and images.
Accessible, stable UI
Keyboard-operable controls, visible focus, semantic state and overflow-aware floating UI keep complex editing interactions usable.
SSR ready
Generate editor HTML on Node.js 22+ through linkedom, including Angular Universal, Astro and other supported server runtimes.
Free editor.
Complete Pro suite.
Deploy it your way: no Domternal-hosted SaaS is required, and optional collaboration and AI services connect to infrastructure and providers you choose.
View full pricing & plan detailsFree
- Angular, React, Vue & Vanilla components
- Classic and Notion-style editing with built-in UI and themes
- Tables, images, math and Markdown
- 70+ extensions across 17 packages
- Accessibility Foundations: keyboard navigation & ARIA patterns
Install from npm, no account needed
Pro Team
billed annually at €1,908billed monthly, cancel renewals anytimebilled annually at $2,148billed monthly, cancel renewals anytime
Up to 5 developers included
Then €28 per developer / month, up to 15Then €35 per developer / month, up to 15Then $32 per developer / month, up to 15Then $40 per developer / month, up to 15
More than 15 developers? Talk to us →
Everything in Free, plus:
- Real-time collaboration, comments and version history
- AI writing assistant on your own endpoint
- Notion-style columns, Word (.docx) and PDF export
- Unlimited applications and end users for one named Customer
Commercial license. OEM rights require a separate agreement.
Buy Team →Enterprise
Custom terms, priced on the deal
All Pro features, with scope and terms defined in your Order.
Available only when expressly included in the accepted Enterprise Order:
- OEM and standalone redistribution rights
- Multi-entity and corporate-group scope
- Procurement, support and SLA terms
View full pricing & plan details
Building alone, bootstrapped, or working on something open source? Write to us and let’s find a price that works.
Prices exclude VAT and similar transaction taxes. No delivery or handling fees.
Prices shown in EUR. Your order specifies the billing currency. Prices shown in USD. Your order specifies the billing currency.
Start with Free.
Build more with Pro.
Start with the complete MIT editor. Add collaboration, AI, document review and export when your application needs them.