Migrating from TOAST UI Editor
tui.editor has had no maintainer activity since August 2024. Inkroom is its spiritual successor β modern ProseMirror core, same batteries-included philosophy β and ships a compatibility layer so migration is one line for most codebases.
Fast path
npx inkroom-migrate-toast ./src # dry-run: prints every edit + a manual-work reportnpx inkroom-migrate-toast ./src --write # appliesor by hand:
import Editor from "@toast-ui/editor";import "@toast-ui/editor/dist/toastui-editor.css";import Editor from "@inkroom/toast-compat";import "@inkroom/editor/style.css";Your existing constructor options, event wiring and addImageBlobHook keep
working. Dark theme: delete the second CSS import β dark mode is built in
(theme: "dark" or "auto").
Compatibility matrix
π’ works unchanged Β· π‘ accepted with changed behavior (one-line console notice, never silent) Β· π΄ needs a code change
| tui.editor API | Status | Notes |
|---|---|---|
new Editor({ el, height, minHeight, initialValue, placeholder, autofocus }) | π’ | |
initialEditType: "markdown" | "wysiwyg" | π’ | |
events: load / change / caretChange / focus / blur / keydown / keyup | π’ | same signatures |
hooks.addImageBlobHook(blob, cb) | π’ | drives Inkroomβs upload pipeline |
getMarkdown / setMarkdown / getHTML / insertText / getSelectedText / reset | π’ | |
changeMode / isMarkdownMode / isWysiwygMode | π’ | |
exec("bold" | "italic" | "strike" | "heading" | "ul" | "ol" | "task" | "quote" | "codeblock" | "hr" | "indent" | "outdent" | "undo" | "redo" | "addTable" | "addImage") | π’ | |
toolbarItems (string names) | π’ | indent/outdent/scrollSync have no toolbar slot (commands still work) |
Editor.setLanguage(code, data) / language: "ko-KR" | π’ | 10 languages built in |
Viewer (viewer: true, Editor.factory) | π’ | read-only mode, chrome hidden |
hide / show / setHeight / getHeight / moveCursorToStart/End | π’ | |
setHTML | π‘ | converts through sanitized HTML parsing (async) |
previewStyle: "vertical" | "tab" | π‘ | Inkroomβs markdown mode is a real editor with highlighting, not a preview split |
usageStatistics | π‘ | nothing to disable β Inkroom never collects statistics |
theme: "dark" | π’ | plus "auto" |
tui plugin functions (chart, uml, β¦) | π΄ | use @inkroom/plugin-code, @inkroom/plugin-math, @inkroom/plugin-mermaid; chart/UML on the roadmap |
@toast-ui/react-editor / vue-editor | π΄ | switch to @inkroom/react / @inkroom/vue (better APIs; codemod flags each site) |
| Custom toolbar item objects | π΄ | use the Inkroom toolbar API |
CSS hooks .toastui-editor-* | π΄ | new names under .ink-*; tokens via CSS custom properties |
What you gain immediately
- Maintained dependency, CVE response commitment (SECURITY.md)
- Lossless round-trip with a published contract (round-trip.md)
- ~2Γ smaller download (size.md) β tuiβs CSS alone is 31Γ ours
- Slash menu, bubble menu, footnotes, front matter, real Vue 3 support
- A Pro path (collab, comments, track changes, DOCX/PDF) that is self-hosted and flat-priced instead of nonexistent
Getting help
Open a GitHub Discussion
with the migration tag β first response within 24h during the launch
window. Real-world migration case studies live in docs/case-studies/.