Roadmap
Toward 0.1.0
Release 0.1.0 will be a proof of concept showing that Rust and C code can coexist.
The release will be complete when the rendering code has been fully migrated to safe Rust, with C code calling it only through an FFI layer. This release will be based on Neovim 0.13.
The goals for this release are:
- Preserve established Vim editing behavior and existing plugin interfaces.
- Move the rendering code into safe Rust while keeping an FFI layer so C code can call it.
- Keep implementation logic in safe Rust and isolate unavoidable unsafe code at the language boundary.
- Validate migrations with focused compatibility and behavior tests.
- Document the implementation and provide clear build and installation guidance.
- Document the migrated Rust code in the Rustvim Book, an mdBook explaining how the editor’s rendering code works.
Upstream roadmap
The inherited Neovim roadmap is presented below as upstream context. For the latest plans, see Neovim’s roadmap.
Upstream archive: This is the Neovim roadmap inherited when this website was forked. Its release numbers, plans, and completed work refer to Neovim. See the Rustvim roadmap for this project’s direction.
This is a high-level overview of the project direction. Detailed plans and priorities are tracked in milestones (tentative, may be changed or dropped at any time).
- Version numbers (
0.1,0.2, …) track production releases. The next upcoming version has a (estimated) target date. - backlog holds low-priority items.
- needs-owner holds zero-priority items (no feasible path to completion).
Next
Future (unknown release)
- Prepare for 1.0
- Redesign
--remote - Redesign (simplify) remote plugin concept, eliminate
:UpdateRemotePlugins - Unified event interface,
nvim_on() - Multibuffer #30463
- Lua remote plugin host
- LSP:
vim.lsp.server() - UI protocol: window layout events, messages
- UI “block-level elements” so plugins can reason about regions
- UI “affordance” indicator so users know which elements they can interact with
0.13 “Batteries Included”
- ✅ Multicursor
- ✅ CmdAtom: subscribe to any user action
- ✅ Dot-repeat “just works” with any operator mapping (
operatorfunc,:omap). - ✅
vim.asynctask abstraction, structured concurrency #34473 - ✅ File-change detection (improved
'autoread') #37971 - ✅ Image API:
vim.ui.img - ✅
dir.luadirectory browser (replacesnetrw) #39723 - ✅ Reimplement
cmdwinas a normal buffer+window #40312 - Interactive
:!(:[range]terminal,:[range]write :term sudo tee %, …) #1496 - Packspec,
pkg.json - Remote-ssh
Completed
Here are the headline features of the previous releases; for details see the release notes.
0.12 “The year of Nvim OOTB”
- Plugin manager (
vim.pack) #34009 - No more “Press ENTER” #27855
- UI
:connect,:restart#5035 - Progress messages (demo)
- LSP: 11+ new capabilities,
:lspcommand, default mappings, improvedenable()andstop()behavior - API:
nvim_open_tabpage(), enhancednvim_open_win()+nvim_win_set_config() - Default statusline: diagnostics, progress-status
- Prompt-buffer enhancements: multiline input/paste, undo/redo
- Treesitter: incremental selection via
in/antextobjects
0.11
- Async tree-sitter (avoids blocking UI/input)
- LSP “config” concept:
vim.lsp.config#31031 - LSP: auto-completion (:help lsp-completion)
- LSP: multiclient support
- TUI: URL highlight, theme event
- UI
:detach#5035
0.10
- Default colorscheme
- LSP inlay hints
- TermRequest, TermResponse
- treesitter: builtin parsers for bash, markdown, python
vim.snippetvim.itervim.lpeg,vim.re,vim.glob,vim.base64
0.9
- TUI as a remote UI
- LSP semantic token highlighting
- EditorConfig support
- ’exrc’ and related “:trust database” features
- ‘statuscolumn’
- ‘diffopt’ “linematch” feature
- :Inspect, :InspectTree
- vim.loader optimized Lua module loader
- vim.version semver module
$NVIM_APPNAME- Lua script runner:
nvim -l
0.8
- LSP improvements (v3.16 spec coverage, configuration,
LspAttach) - Lua API:
vim.fs,vim.cmd{}, measure require() in--startuptime,:map/:command/:aucan print Lua source location - treesitter API: use queries to define spellcheck regions (aka “spellsitter”)
vim.ui_attach()- UI and RPC performance
- user-defined command preview
cmdheight=0- clickable statusline
0.7
- Tree-sitter integration (highlighting, folds)
- TUI: extended keys (CTRL-i vs TAB, SHIFT modifier, …!)
- Global statusline:
laststatus=3
0.6
- Unified diagnostics API
- Updated defaults
0.5 + 0.5.1
- Expanded Lua API and user config (
init.lua) - Built-in Language Server Protocol (LSP) support
- Tree-sitter integration (experimental)
- Decorations API improvements: extmarks, virtual text, highlights
- Lua API improvements
- LSP support improvements
0.4
- Lua “stdlib”
- Externalized UI: multigrid
- Externalized UI: floating windows
- Externalized UI: messages
0.3.x
- API: buffer update events
- Vimscript expression parser:
nvim_parse_expression() - Windows: MSVC support
- 0.2.1 Built-in Lua:
vim.api,:lua,nvim_execute_lua(), … - 0.2.1 Externalize UI components: cmdline, wildmenu
- 0.2.1 Windows
:terminal - 0.2.1 Pre-packaged “universal” binary for Linux
0.2.x
- Windows support
- Externalized UI: popumenu
- Externalized UI: tabline
- Pre-packaged builds for Windows and macOS
0.1.x
- First public release
- Publish a stable product that can be used as a benchmark for progress
What is Rustvim?
Rustvim is a Vim-based text editor whose implementation is being incrementally migrated to Rust, with an emphasis on compatibility and maintainability.
Participate
Follow development in the Rustvim repository and report bugs or request features.