Neovim 0.12 Ships Built-In Plugin Manager, Overhauled LSP, and an Experimental UI Redesign in Its Largest Release in Years
Neovim 0.12.0, released March 29, adds a native plugin manager, inline LSP completions, a redesigned message interface, LuaJIT-powered performance gains, and built-in HTTP requests, setting the stage for a 1.0 release targeted in the next development cycle.
The Neovim project released version 0.12.0 on March 29, delivering what amounts to the editor’s most substantial update in years. The release introduces a built-in plugin manager, significantly expanded Language Server Protocol support, an experimental interface redesign, and dozens of performance improvements across the codebase.
More than a year after version 0.11, the new release addresses several longstanding requests from the Neovim community while pushing the editor closer to a 1.0 milestone now explicitly targeted in the 0.13 roadmap.
A Native Plugin Manager Arrives
Neovim 0.12 introduces vim.pack, an integrated package management system that allows users to install, update, and pin plugins without relying on third-party tools like lazy.nvim or packer.nvim. The module supports pinning plugins to specific commit hashes for audited versions and updating only after changes have been reviewed, a workflow that aligns with the security-conscious direction the project has taken in recent releases.
The addition is significant because plugin management has historically been one of the steepest parts of the Neovim learning curve, with newcomers forced to choose among competing external managers before writing a single line of configuration. By shipping a built-in solution, the project lowers the barrier to entry while maintaining the flexibility that experienced users expect.
LSP Capabilities Expand Across the Board
The Language Server Protocol integration, already one of Neovim’s strongest features, receives its most comprehensive upgrade to date. New capabilities include inline completion via the textDocument/inlineCompletion protocol, document color rendering, reimplemented code lens with virtual line display, workspace diagnostics, document link navigation through the gx mapping, and dynamic registration support.
A new :lsp command consolidates client management into a single interface, replacing the previous LspInfo, LspRestart, and LspLog commands. Semantic token requests have been optimized to query only the visible viewport, reducing overhead in large files. The completion system now supports custom ordering, colored symbol previews, nearest-match sorting, and insert-mode autocompletion through a new autocomplete option.
These changes collectively reduce the need for external LSP wrapper plugins, bringing much of what previously required nvim-cmp or other completion frameworks into the editor itself.
Experimental UI Redesign Targets Common Frustrations
The release includes ui2, an opt-in interface redesign that tackles some of Neovim’s most persistent user experience complaints. The new system eliminates the “Press ENTER” prompt that has interrupted workflows since the editor’s earliest days, instead displaying command output in dedicated windows or inline in the command line.
The ui2 system also introduces command-line syntax highlighting and implements a buffer-based pager interface, meaning long output can be scrolled and searched like any other buffer. The UI layer has been architecturally decoupled from the core, enabling the editor to be restarted or reconnected to a running session without closing the interface.
Performance Gains and LuaJIT Upgrade
Neovim 0.12 ships with LuaJIT 2.1, delivering a reported 15 to 20 percent speed improvement for Lua plugins and reduced memory overhead. Glob pattern matching now uses a new Peglob implementation that achieves roughly 50 percent faster execution, and register insertion operations run up to 10 times faster than in previous versions.
The build system also gains an experimental Zig-based alternative to CMake, signaling the project’s interest in exploring faster and more portable build tooling for future releases.
Built-In Tools and Editor Enhancements
Two new optional packages ship with the release. :Undotree provides an interactive visual representation of the undo history, and :DiffTool enables file and directory comparisons directly within the editor, both features that previously required external plugins.
The new vim.net.request() function enables HTTP GET requests from within the editor, making it possible to open URLs directly with :edit https://... and view the response as a buffer. A :restart command allows users to restart Neovim mid-session without closing the editor, preserving the session state when used with session management plugins.
Additional editor commands include :iput for indentation-aware paste, :uniq for deduplicating buffer lines, and :retab -indentonly for reformatting only whitespace.
Security Tightening and Breaking Changes
The release introduces stricter security defaults, including explicit trust requirements for project-level configuration files and changes to executable lookup behavior on Windows, where the current directory is no longer searched for executables. A bundled tee.exe addresses a longstanding gap on Windows systems.
Several breaking changes accompany the release. Diagnostic signs are no longer configurable through :sign-define, the Ctrl-R key now inserts registers literally rather than as user input, and URI parsing follows RFC 3986 more strictly. LSP null values use vim.NIL instead of nil, requiring updates to plugins that interact with language server responses.
Road to 1.0
The Neovim roadmap indicates that version 0.13, themed “The Year of Batteries Included,” will focus on standard library expansion and explicitly targets preparation for a 1.0 release. Planned features for the next cycle include multicursor support, an image display API, and a unified event interface, suggesting that the project views 0.12 as the penultimate major release before reaching the stability milestone the community has long anticipated.