What neovim/neovim shipped
Written by FoxPlug from the repository's own releases; not affiliated with Neovim. Paste your own repository in the box below and FoxPlug writes the same weekly update for your product. This page is an automatic summary of the releases, pull requests and commits in github.com/neovim/neovim; Neovim did not write it and does not use or endorse FoxPlug. Every line links to the change it describes.
Get a weekly update like this for your product, free
Week of November 2, 2026
What shipped
- Server-to-client API calls are now rejected, hardening the channel between frontends and the embedded Nvim instance. Pull request #42668
- A per-channel trust flag lets sockconnect() and nvim --remote channels control whether peers may call the local API. Pull request #42687
- Vim.rpcrequest can take a timeout, so a request no longer blocks forever when the peer never answers, and late responses no longer crash. Pull request #42690
- SystemObj:wait() accepts a cond predicate and returns early when streamed output matches, keeping the process running. Pull request #42695
- SystemObj gains close(), so closing an async task that awaits vim.system() stops the process. Pull request #42734
- The default statusline shows the SSH hostname when running on a remote system. Pull request #42723
- Vim.uri now structures authority and query, lowercases the scheme, and adds join(), new() and normalize(). Pull request #42705
- Getenv() is marked api-fast, so vim.env works in luv callbacks and LSP rpc contexts. Pull request #42703
- An invalid glob in one.editorconfig section no longer breaks parsing of the whole file. Pull request #42693
- Treesitter highlighting no longer builds nodes and tables for finished trees on every redraw. Pull request #42735
Why it matters
This week hardens the security boundary between a frontend and the Nvim it drives, and makes the async and RPC helpers safer to use for long-lived processes. Remote development over SSH gets more feedback and more reliable restarts, while several editorconfig, treesitter and LSP fixes remove errors users hit in ordinary editing.
Changelog entry
- Security: reject server-to-client API calls Pull request #42668
- Security: per-channel trust property for sockconnect() and nvim --remote Pull request #42687
- Rpc: vim.rpcrequest supports a timeout option Pull request #42690
- Lua: vim.system():wait() accepts a cond predicate Pull request #42695
- Lua: SystemObj:close() stops the process Pull request #42734
- Defaults: show SSH hostname in the default statusline Pull request #42723
- Uri: structured querystring, join(), new(), normalize() Pull request #42705
- Eval: mark getenv() as api-fast Pull request #42703
- Editorconfig:? glob no longer matches / Pull request #42671
- Editorconfig: invalid glob no longer breaks other sections Pull request #42693
- Editorconfig: [!seq] glob now excludes seq Pull request #42648
- Treesitter: avoid touching finished trees on every redraw Pull request #42735
This week: server-to-client API calls rejected, per-channel trust, rpcrequest timeouts, vim.system close() and cond waits, SSH hostname in the statusline, and editorconfig fixes.
This week in Neovim: server-to-client API calls are rejected and channels gained a trust flag, vim.rpcrequest can time out, vim.system gained close() and a wait predicate, and vim.uri got structured queries plus join/new/normalize. Remote SSH work shows the hostname in the default statusline. Editorconfig fixes stop one bad glob from breaking a file and correct negated classes, and treesitter redraws no longer touch finished trees.
Week of October 26, 2026
What shipped
- Vim.lsp.start no longer aborts remaining FileType and BufReadPost autocmds when cmd returns nil, and warns if it returns an invalid RPC client. Pull request #41479
- LSP stop paths now also stop clients still waiting for an initialize response, including on quit, on vim.lsp.enable name false, and on:lsp stop, restart and disable. Pull request #42640
- Inlay hints are no longer cleared and redrawn on every refresh, so hints stop flickering while typing. Pull request #42604
- Stale code lens and codeLens resolve requests are now canceled before a new request is sent. Pull request #42589
- Linked editing ranges on the same line no longer corrupt each other when a word's length changes. Pull request #42553
- A damaged shada file is now repaired instead of failing with E576 on every startup and exit, and shada writes are atomic. Pull request #42618
- Leftover.tmp.X shada files no longer block writes forever, which previously ended in E138 once fallback names ran out. Pull request #42616
- Changing only a float's zindex through
nvim_win_set_confignow restacks the drawn float. Pull request #42571 - Wait and vim.wait now check the condition once more before returning -1, so -1 no longer means the condition may already be true. Pull request #42600
- Runtime file updates add recognition for nlp filetype files. Pull request #42601
Why it matters
This week brings steady correctness work to language server handling, shada persistence, floats and waiting, plus many upstream Vim patches for rendering and regexp performance. For people who use Neovim daily, the fixes target problems that show up during normal editing: flickering hints, mangled non-ASCII yanks, damaged state files that break every startup, and crashes in conceal and decoration code.
Changelog entry
- Lsp: do not start a client when cmd() returns nil; warn on an invalid RPC client Pull request #41479
- Lsp: stop clients still waiting for an initialize response on quit, disable and:lsp stop, restart, disable Pull request #42640
- Lsp: keep inlay hints on refresh instead of clearing them first Pull request #42604
- Lsp: cancel in-flight code lens and codeLens resolve requests before sending new ones Pull request #42589
- Lsp: avoid corrupting same-line linked editing ranges when word length changes Pull request #42553
- Shada: repair a damaged shada file and write atomically Pull request #42618
- Shada: reuse and remove leftover.tmp.X files so writes are not blocked Pull request #42616
- Float: restack a drawn float when only its zindex changes Pull request #42571
- Event: wait() checks the condition once more before returning -1 Pull request #42600
- Clipboard: fix garbled non-ASCII yanks on macOS when $LANG has no codeset Pull request #42620
- Conceal: do not call the decoration provider on a deleted cursor line Pull request #42634
- Runtime: recognize nlp filetype files Pull request #42601
This week: LSP startup no longer aborts autocmds when cmd() is nil, initialization-pending clients are stopped, inlay hints stop flickering, code lens requests are canceled, damaged shada files are repaired, and wait returns correct results. Plus Vim patches for rendering and reg
Weekly Neovim update. LSP startup no longer aborts remaining autocmds when cmd() returns nil or an invalid client, and clients still waiting for an initialize response are now stopped on quit, enable false, and:lsp stop, restart or disable. Inlay hints no longer flicker on refresh, stale code lens requests are canceled, and same-line linked editing ranges no longer corrupt each other. A truncated shada file is now repaired instead of failing with E576 on every start, shada writes are atomic, and leftover temporary files no longer block writes. Also included: float zindex restacking, a wait condition recheck, fixes for macOS clipboard encoding and conceal edge cases, and a batch of upstream Vim patches improving rendering and regexp performance.
Week of October 19, 2026
What shipped
- Exit prompts no longer wait forever for a key when none can arrive, fixing a case where the server never exited after a deadly signal or UI disconnect. Pull request #42494
- Semantic token request and response races were fixed, including stale, cancelled and superseded responses. Pull request #42356
- Tree-sitter injections clipped to an empty region now parse the correct region instead of the whole buffer. Pull request #42512
- A use-after-free in buf_ensure_loaded() was avoided by checking the buffer is still valid after open_buffer() runs autocommands. Pull request #42446
- Vim.lsp.enable() no longer errors with Invalid buffer id when a buffer is wiped before the client starts. Pull request #42488
- Vim.opt getters now convert values without write validation, so reads no longer fail with E21 after:setlocal nomodifiable. Pull request #42469
- Native watch handles are shared across different rule sets, speeding up exit when many watchers exist. Pull request #42413
- Autoread now updates its watcher when buffers are renamed instead of watching the old file. Pull request #42428
- Glob character ranges now stop at the closing bracket, so patterns such as [0-9]-release are accepted. Pull request #42416
- Fixing foldminlines after a tree-sitter buffer is wiped in an autocmd no longer fails with Invalid buffer id. Pull request #42301
Why it matters
This week brought fixes across LSP, tree-sitter, editing commands, globbing and option handling, many addressing errors and hangs reported by users. Highlights include making exit reliable when no key can arrive, removing races in semantic token handling, and closing several use-after-free and invalid buffer id failures. A development build was also published.
Changelog entry
- Exit: prompts no longer wait forever for a key when none can arrive Pull request #42494
- Lsp: fix semantic token request and response races Pull request #42356
- Treesitter: injection clipped to an empty region no longer parses the whole buffer Pull request #42512
- Buffer: avoid use-after-free in buf_ensure_loaded() Pull request #42446
- Lsp: enable() skips starting a client when the buffer was wiped Pull request #42488
- Lua: convert vim.opt values without write validation Pull request #42469
- Watch: share native watch handles across rule sets Pull request #42413
- Autoread: update watchers when buffers are renamed Pull request #42428
- Glob: stop character ranges at the closing bracket Pull request #42416
- Treesitter: foldminlines no longer fails after a buffer is wiped in an autocmd Pull request #42301
- Lsp: plaintext info no longer inherits markdown rendering Pull request #42492
- Snippet: include the final character with exclusive selection Pull request #42407
This week: exit prompts no longer hang when no key can arrive, semantic token races fixed, tree-sitter injection clipping corrected, and vim.opt reads no longer blocked by nomodifiable. Plus use-after-free and invalid buffer id fixes across buffers and LSP.
This week's changes to Neovim cover several long-standing failures. Exit prompts no longer wait forever for a key that cannot arrive, so the server exits after a deadly signal or UI disconnect. Semantic token request and response races are fixed, and inline completions no longer log ServerCancelled as an error. Tree-sitter injections clipped to an empty region now parse correctly. A use-after-free in buf_ensure_loaded() is avoided, vim.lsp.enable() no longer errors when a buffer is wiped before a client starts, glob ranges stop at the closing bracket, autoread follows renamed buffers, and vim.opt getters no longer fail with E21 under nomodifiable. A development build was also published this week.
Week of October 12, 2026
What shipped
- Dropped TAB from the default 'termpastefilter', so pasting into a:terminal no longer strips tab characters by default. Pull request #42433
- Slow:edit and:read operations now emit a progress message with percent, and the buffer is locked while the message is emitted. Pull request #42463
- Aborted:write when a Progress handler changes the buffer, preventing files that mix old and new lines or contain E315 lines. Pull request #42464
- Kept 'modified' set when the buffer changes during:write, so:bdelete no longer silently loses unwritten changes. Pull request #42458
- Stopped every:write from emitting a noisy progress message and terminal progress event, and fixed the ordering of the running and failed events around buffer saving. Pull request #42456
- Fixed a crash caused by an out-of-range number in 'iskeyword', 'isfname' or 'isident', such as one set from a modeline. Pull request #42410
- Added
end_rowandend_colrange support to vim.inspect_pos, returning items overlapping the range with an exclusive end. Pull request #37847 - Made the vim.pack check in:checkhealth async so it no longer blocks for several seconds. Pull request #41674
- Hid the cursor for the whole duration of:write instead of only around the written message. Pull request #42452
- Patched a security fix for code injection via the cargo quickfix plugin, using chdir instead of executing a cd command. Pull request #42406
Why it matters
This week improves file reading and writing: slow reads now show progress, and writes no longer silently lose changes or produce mixed files when a progress handler edits the buffer. It also fixes a crash from malformed option values, cuts noisy write progress events, and lands completion, LSP, health and documentation fixes. Terminal paste and the inspector gained behaviour changes users will notice day to day.
Changelog entry
- Defaults: drop TAB from the default 'termpastefilter' Pull request #42433
- Progress: emit a progress message for slow:edit and:read Pull request #42463
- Bufwrite: abort:write if a Progress handler changes the buffer Pull request #42464
- Bufwrite: keep 'modified' when the buffer changes during:write Pull request #42458
- Editor: remove the noisy progress event on every:write Pull request #42456
- Bufwrite: hide the cursor for the whole:write Pull request #42452
- Options: fix a crash from an out-of-range number in 'iskeyword', 'isfname' or 'isident' Pull request #42410
- Inspector: support ranges in vim.inspect_pos Pull request #37847
- Health: make the vim.pack check async Pull request #41674
- Health: stop timed-out provider probe jobs Pull request #42390
- Security: patch code injection via the cargo quickfix plugin Pull request #42406
- Dir: drop the global '-' default mapping Pull request #42462
This week: slow:edit/:read now shows progress,:write no longer silently loses buffer changes, a crash from bad 'iskeyword' values is fixed, TAB is kept when pasting into:terminal, and vim.inspect_pos accepts ranges.
This week's changes to Neovim cover file I/O and everyday editing. Slow:edit and:read operations now show a progress message.:write aborts if a Progress handler changes the buffer, and 'modified' stays set when the buffer changes during a write, so changes are no longer silently lost. Every:write no longer emits a progress event. A crash from an out-of-range number in 'iskeyword', 'isfname' or 'isident' is fixed. TAB is dropped from the default 'termpastefilter'. vim.inspect_pos accepts ranges, the vim.pack health check is async, and several completion, LSP, health and help documentation fixes land.
Week of October 5, 2026
What shipped
- Nvim 0.12.6 was released, with a Windows zip and MSI available for x64 and ARM. Release
- A backport to release-0.12 fixes code injection via NetrwBookHistSave(), the fix for the netrw security issue. Pull request #42275
- Nvim_open_term() no longer crashes in a zero-size window; zero width or height now falls back to the 80x24 pty default. Pull request #42248
- Nvim_chan_set() was added so a channel other than stdio can own a server and trigger self-exit when it closes. Pull request #42288
- With --embed --listen, startup now waits for a UI when stdin is not a pipe instead of treating stdin as an RPC channel. Pull request #42291
- A DiffUpdated autocommand that wipes the current buffer can no longer cause a heap-use-after-free, since window layout changes are disallowed during it. Pull request #42238
- Vim.fs.find() with follow=true now checks type against a symlink's target, so linked files are found and type=link matches only broken links. Pull request #42246
- Parsing of $NAME environment variables no longer depends on 'isident', so changing 'isident' cannot break variable expansion. Pull request #42241
- Azerbaijani messages were added: a new az.po catalog with 2083 translated messages. Pull request #41816
- The default tabline implementation now uses TabLineFill as the base highlight group, matching the custom 'tabline' behavior. Pull request #42130
Why it matters
This week brought a 0.12.6 release plus a security backport for netrw on the 0.12 branch. Several fixes make interactive and embedded use sturdier: terminal opening in zero-size windows, embed plus listen startup, and ownership of a server channel. Lua and filesystem behavior also changed for vim._with, vim.fs.find and environment variable parsing, and Azerbaijani translations were added.
Changelog entry
- Release: Nvim 0.12.6 Release
- Release: Release v0.12.6 Pull request #42293
- Security: backport runtime(netrw) code injection fix via NetrwBookHistSave() to release-0.12 Pull request #42275
- Fix(terminal): avoid
nvim_open_termcrash in a zero-size window by using the 80x24 pty default Pull request #42248 - Feat(api): add nvim_chan_set() to let a channel own a server Pull request #42288
- Feat(startup): --embed --listen waits for a UI when stdin is not a pipe Pull request #42291
- Fix: disallow window layout changes during DiffUpdated to avoid heap-use-after-free Pull request #42238
- Fix(vim.fs): with follow=true, find() checks type against the symlink target Pull request #42246
- Feat(env)!: 'isident' no longer affects $NAME parsing Pull request #42241
- Feat(l10n): add Azerbaijani translations Pull request #41816
- Fix(tabline): use TabLineFill as base highlight for the default 'tabline' Pull request #42130
- Fix(lua): restore print() in headless mode when output is redirected Pull request #42217
Nvim 0.12.6 is out. Also this week: a netrw security fix backported to 0.12, no crash from nvim_open_term in zero-size windows, nvim_chan_set(), safer DiffUpdated autocommands, and Azerbaijani translations.
Nvim 0.12.6 is released, with Windows zip and MSI builds for x64 and ARM. Also this week, the netrw code injection fix was backported to the 0.12 release branch. nvim_open_term no longer crashes in a zero-size window, and a new nvim_chan_set() lets a channel other than stdio own a server. A DiffUpdated autocommand can no longer cause a use-after-free, vim.fs.find with follow=true now checks a symlink's target, and $NAME environment variable parsing no longer depends on 'isident'. Azerbaijani translations were added.
Week of September 28, 2026
What shipped
- Nvim v0.13.0-dev-1804+gfb1f321b0e development build released with RelWithDebInfo build type and LuaJIT 2.1.1788460057. Release
- Vim.lsp.completion.get() now accepts a
client_idoption to limit completion requests to specific clients. Pull request #42189 - Added Bold, Italic, and BoldItalic default highlight groups for syntax highlighting. Pull request #35009
- Statusline now supports highlight scopes for more complicated stacked highlighting changes. Pull request #41944
- Lua script mode with -l flag now uses raw output for print() function. Pull request #42064
- Fixed multibyte environment variable names that could end mid-character when expanded. Pull request #42200
- Fixed RPC assertion failure on self-attach by preventing unpacker advancement with closed channels. Pull request #42173
- Fixed vim_rename() to attempt os_rename() before removing destination to prevent data loss. Pull request #42152
- Fixed vim.pack to ignore inherited GIT_INDEX_FILE environment variable during plugin operations. Pull request #42114
- Removed
nvim_mcursorAPI in favor of the nvim.multicursor extmarks namespace for cursor management. Pull request #42156
Why it matters
This week includes critical stability fixes for RPC and file operations, new LSP completion control for plugins, statusline highlighting improvements, and cleanup of the multicursor API. These changes improve reliability for end users and give plugin authors better control over completion behavior.
Changelog entry
- Feat(lsp): support
client_idin vim.lsp.completion.get() Pull request #42189 - Feat: add Bold, Italic, BoldItalic default highlight groups Pull request #35009
- Feat(statusline): highlight scopes Pull request #41944
- Feat(lua): raw output for print() in script mode -l Pull request #42064
- Fix(env): multibyte $VAR name may end mid-char Pull request #42200
- Fix(rpc): don't advance closed unpacker on self-attach Pull request #42173
- Fix(fileio): do not remove destination file before rename Pull request #42152
- Fix(rpc): redraw parse failure silently closes channel Pull request #42220
- Fix(pack): ignore inherited GIT_INDEX_FILE Pull request #42114
- Refactor(multicursor): drop
nvim_mcursorPull request #42156 - Fix(input): end Visual mode when aborting redo Pull request #42151
- Fix(statusline): fix buffer overrun in option check Pull request #42186
Nvim dev build 0.13.0-dev-1804 is out. This week: LSP completion client filtering, statusline highlight scopes, fixes for RPC self-attach, file renames, and environment variables. Multicursor API simplified.
Nvim v0.13.0-dev-1804 released with several improvements: • LSP: completion.get() now accepts client_id to request specific clients • Statusline: support for highlight scopes enabling stacked highlighting changes • Lua: -l script mode uses raw output for print() • Fixed RPC self-attach assertion failures • Fixed vim_rename() to prevent data loss between operations • Improved multibyte environment variable handling • Multicursor API simplified by removing nvim_mcursor These changes enhance plugin compatibility, visual customization, and core reliability.
Week of September 21, 2026
What shipped
- Multicursor now has a 'follow' buffer-local option to check and control follow-mode state, addressing an issue where gQ did not restore follow-mode. Pull request #42095
- Fixed a bug where operators on targets creating Visual selections would clobber the user's previous mark and visualmode() state. Pull request #42119
- Fixed an out of bounds read in the 'complete' option F{func} callbacks that could cause heap-buffer-overflow. Pull request #42080
- Fixed vim.str_byteindex() returning a byte index larger than the string length for incomplete multi-byte sequences. Pull request #41766
- Changed.h files to default to C filetype instead of C++, with existing g:c_syntax_for_h and g:ch_syntax_for_h overrides still available. Pull request #42028
- Optimized vim-patch.sh list_missing_vimpatches() to complete within minutes instead of hours by using grep filtering instead of associative array lookups. Pull request #42121
- GQ now restores the primary-cursor position in multicursor sessions, stored at extmark-id 1. Pull request #42071
- Improved LSP completion performance by reading 'completeopt', 'ignorecase' and 'smartcase' once per response instead of per item, reducing 5000-item conversion time from 19.6ms to 5.2ms. Pull request #42106
- Optimized multi-byte character decoding to decode clusters only once in the hot loop instead of multiple times. Pull request #42067
- Fixed Visual selection not being highlighted at the cursor position in terminals by removing suppression of cursor character highlight. Pull request #42105
Why it matters
This week focused on multicursor reliability and performance, with several fixes ensuring cursors behave correctly during edits and mappings. Additional improvements span LSP completion speed, terminal key handling, and.h file detection, plus numerous bug fixes for edge cases in Visual selections and string indexing.
Changelog entry
- Feat(multicursor): 'follow' option to check and restore follow-mode state Pull request #42095
- Fix(editor): operator target/cgn no longer clobbers Visual marks Pull request #42119
- Fix(filetype):.h files now default to C instead of C++ Pull request #42028
- Perf(vim-patch.sh): fast list_missing_vimpatches() using grep filtering Pull request #42121
- Perf(lsp): read completion options once per response instead of per item Pull request #42106
- Feat(multicursor): gQ restores primary-cursor position Pull request #42071
- Fix(terminal): Visual selection now highlighted at cursor position Pull request #42105
- Fix(lua): out of bounds read in 'complete' F{func} callbacks Pull request #42080
- Perf(mbyte): single decoder loop for cluster byte length and cell width Pull request #42067
This week: multicursor follow-mode option, faster LSP completion (5.2ms vs 19.6ms for 5000 items), vim-patch.sh optimized to minutes, Visual selection highlight fixes, and.h file defaults to C.
Neovim development focused on multicursor stability and performance this week. New 'follow' buffer-local option enables checking/controlling follow-mode state. LSP completion improved 4x for large item sets. vim-patch.sh script optimized from hours to minutes. Terminal key handling fixed for S-Del and others. Visual selection highlighting corrected at cursor position. Multiple edge case fixes for operators, string indexing, and.h file detection. Development build v0.13.0-dev now available.
Week of September 14, 2026
What shipped
- Fixed multicursor replay of Lua mappings whose id ends in '0', which was incorrectly escaping the id and replaying the wrong mapping. Pull request #42011
- Fixed multicursor to properly capture Visual selections produced by Lua mappings instead of treating them as fed keys. Pull request #41999
- Added support for coloring extra cursors via Kitty protocol shapes 30/40 when terminal supports it, displaying MCursor colors distinctly from the primary cursor. Pull request #41935
- Fixed diff-mode 'do'/'dp' commands to capture atoms properly and support dot-repeat, resolving issues where the operator was cleared before capture. Pull request #41982
- Fixed multicursor visual 'gv' reselection and change-marks to have per-cursor behavior instead of using only primary cursor's region. Pull request #41988
- Fixed multicursor empty insert-session adding unnecessary no-op undo-state entries that required extra undo operations. Pull request #41979
- Fixed display width calculation for spacing marks like Thai SARA AM, which need their own cell instead of stacking on preceding characters. Pull request #41821
- Optimized highlight performance by computing only bounds for characterwise and linewise highlights instead of segments for every line. Pull request #41927
- Fixed ':helptags' to follow link files, resolving E151 errors when help tags include symlinks. Pull request #42008
- Fixed empty 'filetype' being set after ':restart', which prevented ':setfiletype' from working correctly. Pull request #41958
Why it matters
Multicursor functionality received substantial fixes for mapping replay, visual selection, and undo behavior that improve correctness. Display improvements handle spacing marks and terminal cursor colors better. Several vim-patch syncs bring upstream improvements to regex performance, folding efficiency, and syntax highlighting.
Changelog entry
- Fix(multicursor): replay of Lua mapping-id ending in "0" Pull request #42011
- Fix(multicursor): selection by API/Lua from mapping Pull request #41999
- Feat(multicursor): color extra cursors via Kitty protocol shapes 30/40 Pull request #41935
- Fix(cmdatom)!: diff-mode "do"/"dp" not captured properly Pull request #41982
- Fix(multicursor): visual gv, change-marks '[,'] Pull request #41988
- Fix(multicursor): empty insert-session adds a no-op undo-state Pull request #41979
- Fix(mbyte): spacing marks need their own display cell Pull request #41821
- Perf(highlight): compute only bounds for non-blockwise highlights Pull request #41927
- Fix: follow link files in:helptags Pull request #42008
- Fix(filetype): empty 'filetype' skips:setfiletype Pull request #41958
Week 40: multicursor fixes for mapping replay and visual selection, improved cursor colors via Kitty protocol, spacing mark display fixes, and upstream vim-patch syncs for regex and folding performance.
This week's updates focus on multicursor reliability and display quality. Fixed critical issues where Lua mappings in multicursor mode replayed incorrectly when IDs ended in '0', and where Visual selections weren't properly captured across cursors. Added Kitty protocol support for distinctive MCursor colors. Also fixed spacing mark display width (e.g., Thai characters) and optimized highlight computation for large selections. Multiple upstream vim-patches improve regex performance and folding efficiency.