Neovim motions for every text box.
One ModalEditor core with real operators, motions, text objects, registers, and a plugin SDK. Mount it as a standalone editor — or upgrade the textarea you already ship.
The real engine, in your browser
Live demoAutoplay loops a motion sequence until you click in and take the keyboard. Chips feed real keystrokes — nothing on this page is a recording.
Drops into whatever you ship
import { ModalEditor, createEditorView } from '@cuitty/editor-core';
import { tokyoNightThemePlugin } from '@cuitty/editor-theme-tokyo-night';
import { surroundPlugin } from '@cuitty/editor-sample-surround';
const editor = new ModalEditor({
text: 'const answer = value\n',
plugins: [tokyoNightThemePlugin(), surroundPlugin()],
});
const view = createEditorView(document.querySelector('#editor'), { editor });
view.focus();Vanilla core. Textarea upgrade for existing forms. Solid, React, and Astro wrappers. The Plugin SDK registers motions, keymaps, and themes.
An editing grammar, packaged.
One core, zero dependencies.
A vanilla JS ModalEditor state machine: modes, motions, operators, text objects, registers, counts, and undo history. No framework, no bundler requirements.
Real Vim composition.
Operators compose with motions and text objects — d, y, c against w, f, %, iw, i", and counts. It is an editing grammar, not a keybinding veneer.
Standalone view or your textarea.
createEditorView mounts a rendered editor; attachTextareaEditor upgrades the form field you already ship without changing how you read value.
Everything is a plugin.
Motions, operators, text objects, keymaps, and themes all register through one runtime API — the same one the core uses for itself.
Themes are plugins too.
CSS-variable themes with optional Tailwind class hooks. Tokyo Night ships in the box; this page's demo is themed with Cuitty brand tokens.
React, Solid, and Astro.
First-class ModalEditorView wrappers with change subscriptions and editor handles, plus an Astro component for content sites.
Works with the rest of Cuitty.
REPL cells in the Yapture Notebook run Cuitty Editor through the textarea adapter — modal editing, surround verbs, and a live vim-mode badge inside every cell.
See Modules →Cuitty Video renders Cuitty Editor sessions to looping GIFs and MP4s with renderGif() — keystroke timelines become marketing footage programmatically.
See Video →Same packaging discipline as the rest of Cuitty: scoped packages, typed APIs, exact pins, and installs routed through Socket Firewall.
See the SDK →The standalone view and the textarea adapter share one state machine — same keymaps, same registers, same undo history. Parity is verified keystroke-by-keystroke: a paired playback harness diffs every state transition between the two surfaces and emits a copy-ready debug report.
Give your users the home row.
Zero dependencies, MIT licensed, and adapter-first: keep your form logic, upgrade the editing. Install the core, pick a wrapper, and ship modal editing in an afternoon.