A JavaScript port of Vim that runs in web browsers with ASM.js, persistent configuration, and local file access.
Vim.js is a JavaScript port of the Vim text editor that runs in web browsers using ASM.js compilation. It provides the core Vim editing experience with modal editing, commands, and configuration while enabling integration with web technologies like JavaScript execution and cloud storage access. The project solves the problem of bringing powerful terminal-based text editing to browser environments.
Vim users who want to edit text in web browsers with familiar Vim keybindings, and developers interested in porting complex C applications to the web using Emscripten and ASM.js.
Developers choose Vim.js because it offers the most authentic Vim experience available in a browser, with persistent configuration, local file access, and the ability to execute JavaScript from within the editor. Unlike simple Vim keybinding libraries, it's an actual port of Vim with its full editing engine.
JavaScript port of Vim
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Compiled to ASM.js for near-native speed in supported browsers like Firefox and Chrome, enabling smooth modal editing without heavy lag.
Saves ~/.vimrc settings across sessions, allowing users to maintain custom keybindings and preferences as in terminal Vim.
Supports executing JavaScript code directly from within Vim, bridging traditional editing with web-specific functionality and extensions.
Available as NW.js desktop app, Firefox extension, and web versions, offering multiple ways to integrate Vim into different environments.
Requires emscripten with ASYNCIFY, GCC, cproto, and high memory, making setup difficult for developers without specialized tooling.
Uses a small feature set for online demos; the normal Vim feature set is too large and slow, limiting advanced editing capabilities.
Optimized for Firefox, Chrome, and IE; performance and compatibility may degrade in unsupported or older browsers.