A powerful, extensible browser-based text editor inspired by Neovim, featuring a complete plugin architecture with Telescope-style fuzzy finding, built from scratch with TypeScript and a custom reactivity system.
This project is an educational exercise to explore the core concepts of a modern text editor and the architectural patterns behind a complex frontend application. It aims to deconstruct and implement fundamental features of Vim/Neovim, such as modal editing, a reactive UI, and a flexible keymapping system, all while being completely self-contained with zero runtime dependencies.
- Install dependencies:
npm install
- Run the development server:
npm run dev
The architecture is designed to be modular and extensible. Learn more about the internal components in the documentation below.
| File | Description |
|---|---|
| OVERVIEW.md | A high-level look at the application architecture and data flow. |
| REACTIVITY.md | An explanation of the custom reactivity system that powers the UI. |
| STATE.md | How global reactive state is managed. |
| RENDERER.md | How the editor is drawn onto the HTML canvas. |
| STATUS_BAR.md | How the extensible status bar is managed and rendered. |
| INPUT_MANAGER.md | How keyboard input and Vim's command sequences are processed. |
| KEYMAPS.md | How to define and manage keybindings for different modes. |
| BUFFER.md | The data structure for holding and manipulating text. |
| CURSOR.md | The logic for cursor state and movement. |
| CONTAINER.md | The dependency injection container used to wire services together. |
| EVENT_BUS.md | The simple pub/sub system for decoupled communication. |
| EXTENDING.md | A guide on how to add new features and commands. |
| TODO.md | A list of planned features and ideas for the future. |