Editor

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 demo
demo.jswatch the home row work
NORMAL
run a motion:

Autoplay 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.

Engine

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.

Grammar

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.

Adapters

Standalone view or your textarea.

createEditorView mounts a rendered editor; attachTextareaEditor upgrades the form field you already ship without changing how you read value.

Plugin SDK

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

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.

Wrappers

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.

Yapture Notebook

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 →
Video

Cuitty Video renders Cuitty Editor sessions to looping GIFs and MP4s with renderGif() — keystroke timelines become marketing footage programmatically.

See Video →
SDK

Same packaging discipline as the rest of Cuitty: scoped packages, typed APIs, exact pins, and installs routed through Socket Firewall.

See the SDK →
Adapter parity

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.