Upstream 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.async task abstraction, structured concurrency #34473
  • ✅ File-change detection (improved 'autoread') #37971
  • ✅ Image API: vim.ui.img
  • ✅ dir.lua directory browser (replaces netrw) #39723
  • ✅ Reimplement cmdwin as 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, :lsp command, default mappings, improved enable() and stop() behavior
  • API: nvim_open_tabpage(), enhanced nvim_open_win() + nvim_win_set_config()
  • Default statusline: diagnostics, progress-status
  • Prompt-buffer enhancements: multiline input/paste, undo/redo
  • Treesitter: incremental selection via in / an textobjects

0.11

0.10

  • Default colorscheme
  • LSP inlay hints
  • TermRequest, TermResponse
  • treesitter: builtin parsers for bash, markdown, python
  • vim.snippet
  • vim.iter
  • vim.lpeg, vim.re, vim.glob, vim.base64

0.9

0.8

  • LSP improvements (v3.16 spec coverage, configuration, LspAttach)
  • Lua API: vim.fs, vim.cmd{}, measure require() in --startuptime, :map/:command/:au can 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

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.