vim.wasm is a WebAssembly port of the Vim editor that runs in web browsers.
The project compiles Vim's C source code into WebAssembly using emscripten and binaryen, allowing the editor to execute on a Web Worker and communicate with the main thread via SharedArrayBuffer. This approach preserves nearly all of Vim's functionality including syntax highlighting, Vim script execution, text objects, and recent features like popup windows. Files are managed through an in-browser interface where dragging files into the browser tab opens them in Vim, the `:write` command stores changes in memory, and the `:export` command downloads files. The tool supports system clipboard integration through the `"*` register, persistent storage of configuration files in IndexedDB under `~/.vim`, and can fetch remote files via URL. Additional capabilities include evaluating JavaScript code with `:!` commands and access to vimtutor.
Adoption requires a modern desktop browser with SharedArrayBuffer support, currently Chrome, Firefox, Safari, or Chromium-based browsers, with feature flags enabled on Firefox and Safari. The project explicitly describes itself as early-phase and experimental, acknowledging bugs and incomplete behavior. It suits developers who want a familiar Vim editing experience in the browser without installing native software, though the in-memory file handling and manual browser tab closure differ from standard Vim workflows. The tool is packaged as an npm module for integration into web applications.
Development activity shows active maintenance with updates to the underlying Vim version and documented changelog entries. The project maintains clear usage documentation and provides an npm package interface for developers integrating it into larger applications. Bug reports and limitations are transparently communicated in the README, indicating ongoing refinement of the WebAssembly implementation.