A modal editor, written in Odin end‑to‑end.
Vim-style editing with an LSP client, a DAP debugger, Flutter hot
reload and AI chat built in. One core/ compiled natively into Linux,
macOS and Windows frontends — and to WebAssembly for the browser.
Features
Modal editing
Vim motions, operators and chords, multiple cursors, folding, persistent undo, registers.
Language servers
Diagnostics, go-to-definition, hover, completion, signature help, references and symbols.
Debugger
DAP via lldb-dap: breakpoints, stack, locals, watches and a memory view — plus Dart/Flutter through the VM service.
Run & hot reload
:runlaunches native binaries, Flutter with hot reload/restart, or plain Dart.Panes, tabs, sessions
Splits and tabs, floating panes, and project sessions that restore layout, breakpoints and folds.
Find anything
Fuzzy file picker, command palette, project-wide grep, ctags jumps, inline git diff.
AI chat
A chat pane driving the
claude,codexorgeminiCLIs, with permission prompts.Scriptable
Lua 5.4 scripting, native plugins through a versioned C ABI, and fully remappable keys.
Syntax highlighting
C, C++, Odin, Rust, Dart, Swift, Lua, Python, Ada, Markdown, YAML, HTML, CSS, JavaScript, TypeScript.




Platforms
Linux
XCB and Wayland in one binary, Cairo/Pango drawing, OpenGL ES renderer.
macOS
AppKit + CoreText, with a Metal renderer.
Windows
Win32 + Direct2D/DirectWrite, with a D3D11 renderer.
Browser
The same core as WebAssembly on a canvas. Try it here.
On its own the browser demo is editing-only: files live in your
browser's private storage (:open / :export move them in and
out). To work on a real project, run editor-daemon --site in its directory
and open the editor.pawsm.com link it prints: the same page then edits those files and
runs language servers, git, the debugger and AI chat on your machine. Chrome and Edge
ask once to let the page reach apps and services on your device; Firefox asks too, and
again in each new tab and after 24 hours unless you tick “Remember my choice for this
site”. In Safari, open the http://127.0.0.1 link it prints instead.