A next-generation Vim editor, drawn — not rendered — in your browser.
Vem is a modal text editor built entirely on the canvas-native VectoJS UI engine. There is zero DOM in the editing area: every glyph, cursor, selection, and split divider is drawn directly to Canvas 2D. The result is a Vim that feels native anywhere a canvas exists — in the browser at vem.run, or natively via the Tauri desktop shell.
Try it now: vem.run — full NORMAL / INSERT / VISUAL /
COMMAND editing, :vsp/:sp splits, tabs, mouse selection & wheel scrolling,
/ search, and the official plugin set, running live in your browser.
| Repo | What it is |
|---|---|
| vem | The editor monorepo: @vemjs/core, renderer-vecto, lsp-client, plugin-api |
| vem-plugins | Official plugins: telescope, lualine, treesitter, git, autopairs, and more |
| vem-website | vem.run — the live playground and docs site |
| vem-desktop | Tauri desktop shell — same editor, native window, XDG-based config/cache |
@vemjs/core— the pure Vim state machine: modes, motions, operators, buffers, undo, keybinding parser. No rendering, no DOM, fully testable.@vemjs/renderer-vecto— the VectoJS canvas renderer: workspace explorer, tabs, resizable split panes.@vemjs/lsp-client— JSON-RPC 2.0 LSP client for completion, hover, and diagnostics.@vemjs/plugin-api— TypeScript-first plugin SDK: keybinding overrides, statusline segments, pickers, gutter decorations, event hooks.
Text editors fight the DOM: layout thrash, focus quirks, compositor overhead.
Vem sidesteps all of it — the editor is a single scene graph of mathematical
shapes, laid out and hit-tested by VectoJS, with accessibility projected to a
real shadow DOM so screen readers and automation still work. Plugins are plain
TypeScript. No Lua, no WASM toolchain, no build step for a .vemrc.js.
Actively developed. The packages are published on npm under the
@vemjs scope and power
vem.run. Issues and PRs are welcome in the individual
repositories.