Skip to content

Bleeding edge (main)

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 31 May 17:56
c3fa404

Rolling build of the main branch — not a stable release.

Built from c3fa404 on 2026-06-23.

[unreleased]

Features

  • Unicode-aware buffer navigation and display (2326005)
  • Smooth (animated) scrolling for /// (af963f5)
  • Hybrid line-number column, on by default (53d7f1b)
  • Treesitter syntax highlighting (e7a80aa)
  • Run the real catppuccin colorscheme, server-resolved truecolor theming (d2350b4)
  • Multiple open buffers (c0b53bb)
  • Bottom message panel for :messages and :ls (880fe86)
  • / and ? search (cursor search, all five phases) (f810ea1)
  • (lsp) Phase 1 — LSP client crate, lifecycle + document sync (fab5966)
  • (scroll) Animate large cursor motions like gg, G, and count jumps (546bd06)
  • (lsp) Replace didSave heuristic with a real save hook (af87d2f)
  • (lsp) Add :LspInfo command and an append-only LSP log (60af93e)
  • (lsp) Phase 2 — diagnostics (squiggles, message line, location list) (d0938e6)
  • (textobj) Implement i/a text objects (word, bracket, quote, sentence, paragraph) (af47558)
  • (motion) Add f/t/F/T find-char motions with ;/, repeat (0a1db6e)
  • (lsp) Phase 3 — go-to definition & references (c012afb)
  • (panel) Add :panelopen to reopen the last panel (03da410)
  • (lsp) Phase 4 — hover & signature help (aca5692)
  • (panel) Word-wrap long lines instead of clipping (26020a8)
  • (lsp) Phase 5 — completion (the popup menu) (86f93e4)
  • (tui) Mode-aware cursor shape — bar in insert, underline in replace (0cb97fe)
  • (lsp) Phase 6 — edits: formatting, rename, code actions (ab9da9e)
  • (lsp) Resolve lazy code actions via codeAction/resolve (29f04d9)
  • (cmdline) Editable command line with history recall (9c96a94)
  • (autocmd) Complete registration & dispatch bridge (Phase 1) (437b4a8)
  • (autocmd) Emit buffer lifecycle events (Phase 2) (be50760)
  • (autocmd) Emit InsertEnter on mode transition (Phase 3) (b1b9e5b)
  • (lsp) Phase 7a — vim.lsp.config/enable framework + attach lifecycle (8b80cce)
  • (keymap) Phase 1 — matcher + normal-mode vim.keymap.set (global) (182af65)
  • (keymap) Phase 2 — remap feeding, , and visual-mode maps (fef920a)
  • (keymap) Phase 2 example config; expand in string RHS (8158309)
  • (keymap) Phase 3 — insert/command maps, buffer-local maps, del (42311c4)
  • (keymap) Phase 4 — timeoutlen idle flush (closes D4) (c16e811)
  • (keymap) Phase 4 — // map options (05f6620)
  • (keymap) Phase 4 — maps with a textlock sandbox (21c81e6)
  • (keymap) Instant built-in commands under colliding user maps (b23735f)
  • (lsp) Route gd/gD/gr through the keymap system, drop the recognizer (7416d65)
  • (lsp) Start the server for the open buffer on interactive enable (9412102)
  • (lsp) Vim.lsp.buf.* Lua entry points (Phase 7b Slice 1) (45a801e)
  • (lsp) Vim.diagnostic.* Lua surface (Phase 7b Slice 2) (34d21d0)
  • (lsp) LspAttach/on_attach/server_capabilities (Phase 7b Slice 3) (450dea9)
  • (lsp) Vim.system/json + tbl_get so nvim-lspconfig works out of the box (000b92c)
  • (lsp) Broaden vim.* surface so all nvim-lspconfig configs work (a55b5b9)
  • (lsp) Phase 0 — hollow stubs fail loud via vim._notimpl (95f54ed)
  • (lsp) Phase 1 — surface config-load & start failures, add _report (755268f)
  • (lsp) Phase 2 — forward settings/init_options/capabilities to the server (7e278db)
  • (lsp) Phase 3 — config lifecycle hooks before_init / on_init / on_exit (a412279)
  • (lua) Async runtime / event loop — schedule, timers, async vim.system (06090b2)
  • (lsp) Phase 5 — real client:request / client:notify + handlers (8ed8099)
  • (lsp) Phase 6 — buffer / window Lua API (d21ba85)
  • (lsp) Phase 7 — vim.lsp.util.* real implementations (313d927)
  • (lsp) Phase 8 — vim.ui.* + server command dispatch (a183b5a)
  • (lsp) Rename prompts for the new name via vim.ui.input (cf9754b)
  • (lua) Real vim.fn.substitute (vim-regex engine), not identity (73521f7)
  • (lsp) Carry completion documentation + data; advertise the capability (7ca1a4a)
  • (lsp) CompletionItem/resolve for the selected menu item (a4c8212)
  • (lsp) Documentation preview box beside the completion popup (b1e5174)
  • (tui) Mouse-wheel scroll the completion doc preview (fb0d043)
  • (keys) PageDown/PageUp default to half-page scroll (/) (7a43ca0)
  • (lsp) Mouse scroll and select the completion popup (9e9e79f)
  • (panel) Mouse scroll and select the bottom panel (5f28cb4)
  • (lua) Synchronous vim.fn.input / vim.fn.confirm prompts (aa9bdcc)
  • (windows) Multiple windows — splits, layout tree, and the nvim_win_* API (7de9ee3)
  • (options) Buffer-local indentation + window-local number gutter (59377e9)
  • (options) Wire vim.o to the editor with set-semantics (f01f523)
  • (floats) Floating windows — model, positioning, and bordered painting (8f63070)
  • (scroll) Horizontal scrolling for nowrap text windows (52da931)
  • (floats) Dynamic config + edge semantics (phases 3–4) (1466e36)
  • (treesitter) In-process treesitter groundwork (design + phases 1–2) (01dcb16)
  • (tabs) Tab-page model + read-only introspection (phase 1) (10159a6)
  • (treesitter) In-process highlighting + load-failure echo (phase 3) (47bb5e1)
  • (tabs) Tab pages — creation, switching & tabline (phase 2) (1a196b8)
  • (treesitter) Treesitter indentation — o/O, Enter, and the = family (phases 4–5) (4363fc7)
  • (tabs) Lifecycle autocmds, Lua nvim_tabpage_* & showtabline (phase 3) (7235da1)
  • (ex) :substitute command with ex-range parsing (0d46aaa)
  • (ex) :substitute repeat — bare :s / :& / :&& & ~ recall (phase 2) (cdfcf96)
  • (tabs) :tabmove reorder & :tabclose [N] positional close (phase 4) (ea52946)
  • (treesitter) Vim.treesitter Lua platform — primitives & lifetime model (phase 1) (c40b991)
  • (tabs) :tab {cmd} modifier & :drop / :tab drop (phase 4) (1c2f063)
  • (treesitter) Vim.treesitter Lua platform — buffers, queries & predicates (phases 2–4) (93eb30e)
  • (ex) :substitute confirm flag (phase 3) + one-line / scroll (dcf0dec)
  • (statusline) String-valued options foundation (phase 1) (db503db)
  • (ex) :global / :vglobal (phase 4), with :delete and :print (26dbd01)
  • (registers) Named/numbered/special registers + :registers (b26ddd5)
  • (statusline) Custom 'statusline' with the %-format engine (9de3603)
  • (registers) Setreg/getreg/getregtype Lua surface + :put (phase 4) (ad21d60)
  • (statusline) Vim.fn editor-state surface for live %{} configs (phase 5) (0b788fc)
  • (registers) System clipboard "+ / "* via injected provider (phase 5) (40d8133)
  • (extmarks) Buffer-anchored extmark / decoration layer (ba2b0e2)
  • (marks) Buffer-local a–z marks — m set, ` / ' jump (phase 1) (6cd8dca)
  • (statusline) 'laststatus' modes 0/1/2/3 — per-window + global status (phase 6) (a92d0b0)
  • (marks) Track edits so a–z marks stay correct (phase 2) (6e7e46a)
  • (marks) Global file marks A–Z, cross-buffer (phase 3) (9b12e63)
  • (marks) :marks display, automatic special marks, and '{mark} ex-ranges (phase 4) (6cc1bfd)
  • (tabline) User-customizable 'tabline' via the %-format engine (5f3eac5)
  • (lua) Vim.uv filesystem surface — fs_open/read/write/scandir, sync + async (14a343d)
  • (lua) Vim.uv process surface — uv.spawn/new_pipe/new_check for plenary.job (1957f3d)
  • (undo) Branching undo tree, :undo {N}, and vim.fn.undotree() (18f8c91)
  • (lua) Which-key support — keystroke/keymap surface, display APIs, faithful floats (7294346)
  • (lua) Telescope.nvim support — plugin-compat surface + on_lines (90b7bf4)
  • (lua) Default to LuaJIT backend; load ffi for neovim parity (bb962f5)
  • (treesitter) Vim.treesitter.start/stop bridge to the native engine (2b69718)
  • (treesitter) Query-resolution bridge — Lua resolves, the engine executes (3f8ff16)
  • (editor) Dot-repeat (.) — record/replay, count override, visual + ". register (b81f73b)
  • (treesitter) Language injections — Lua resolves the query, the engine executes the layers (35326e7)
  • (multicursor) Helix-style multi-cursor editing (8509de5)
  • (mouse) Server-owned mouse support — click, drag-select, multi-click, shift-extend (339e1f0)
  • (lsp) Diagnostic display surfaces + semantic tokens (treesitter branch) (fe9d02d)
  • (mouse) Wheel-scroll windows and drag dividers to resize (phases 4–5) (26326d7)
  • (explorer) Open a directory as an in-window file listing (netrw) (6f44af6)
  • (mouse) Tabline click, right-click model, middle-click paste, insert click (phases 6–7) (9f4547b)
  • (gui) Native winit + wgpu GUI client at TUI parity (ebfdf0e)
  • (gui) Open a directory via the native file picker, not netrw (eeb4e44)
  • (mouse) Forward right- and middle-click from both clients (08099ec)
  • (lsp) Inlay hints — inline type/parameter annotations, end to end (9bcbdd1)
  • (autocmd) :autocmd/:augroup/:doautocmd ex-commands + :echo expr eval (b270b5f)
  • (gui) Package the Linux GUI as an AppImage and brand all three clients (eec3d16)
  • (treesitter) Incremental buffer parsing via nvim_buf_attach on_bytes (4d94d50)
  • (gui) Inlay hints, syntax-highlight fallback, and scroll-band fixes (aa13136)
  • (treesitter) :TSInstall — fetch + compile grammars on demand (fdf2eba)
  • (excmd) Expand %/# (and :h/:t/:r/:e modifiers) in file arguments (72ac51e)
  • (buffer) Refuse to clobber a file changed on disk since read (2693d27)
  • (mouse) Drag selection auto-scrolls the buffer at the viewport edge (be85903)
  • (tsinstall) Fetch and use Zig on Windows for grammar compilation (0e9d418)
  • (web) Client-side WebAssembly editor in the browser (aa9799a)
  • (web) RemoteClient wire layer for remote-server mode (phase 1) (ac3ff59)
  • (remote) Connect the GUI to a remote server over SSH (ce75b6c)
  • (web) Socket.IO bridge for remote-server web mode (phase 2) (aa7f2e1)
  • (remote) Route SSH auth prompts to native dialogs via SSH_ASKPASS (e4180b7)
  • (web) Remote-mode dual boot + rich server-styled renderer (phase 3) (cfa117f)
  • (filetype) Settable :set filetype / :setfiletype driving the treesitter override (6579425)
  • (web) Smooth scrolling — animate the core's scroll band sub-pixel (b1f95d2)
  • (lua) Add vim.uv.now, str_utfindex/byteindex, fn.exists, get_current_line (3a42b18)
  • (lua) Add vim.fn.hlexists — fixes LuaSnip setup (fda5dfe)
  • (lua) Add vim.w / vim.b scoped variables — fixes trouble.nvim (35720f1)
  • (lua) Sign definition registry + vim.fn.trim — fixes nvim-dap cluster (5f1ca54)
  • (core) HostFs seam — route Buffer I/O through an injectable trait (Phase 1a) (2809415)
  • (lua) Vim.co_pcall family — opt-in yieldable protected calls (Phase 2) (3d365ab)
  • (server) Consume the HostFs seam — inject + route the initial open (Phase 3a) (35c8f6f)
  • (server) HostProc seam — route async process spawning through an injectable trait (Phase 3b) (72a44e5)
  • (server) Daemon wire protocol — RemoteHostProc forwards spawns over RPC (Phase 3c) (6d86a49)
  • (server) Daemon fs wire — fetch the initial buffer off-tick over RPC (Phase 3d) (90627d0)
  • (lua) Make lualine.nvim work — highlight read-after-write, native fs_event, luv timer forms (f7bae73)
  • (lua) Nvim_exec output capture — finishes lualine.nvim end-to-end (1514ef4)
  • (server) Decoration-provider redraw hook + ephemeral extmarks — nvim-cmp loads (0b17b77)
  • (server) Off-tick save over the daemon wire (Phase 3e) (c01b392)
  • (lua) Vim.lsp.util as a requirable module + convert_input_to_markdown_lines (87a0f63)
  • (server) :edit over the daemon wire (Phase 3f) (badc63b)
  • (regex) Embed vim's real regexp engines as crates/nxvim-regex (5c5418a)
  • (server) Remote explorer over the daemon wire (Phase 3g) (c0c9c43)
  • (regex) Integrate the native vim regex engine into search/replace (f4df5da)
  • (core) Unify the buffer-open kernel; :tabnew + go-to over the wire (Phase 3h) (f3fae2d)
  • (server) Source package plugin/ + after/plugin/ scripts at startup (fc2b14b)
  • (core) The watch leg, local behavior — :checktime / 'autoread' (Phase 3i) (291c25c)
  • (wasm) Validate core+Lua run together in wasm (emscripten) — Phase 4 first slice (46138f2)
  • (server) The watch leg's local auto-trigger — reuse the fs_event watcher (Phase 3j) (0e215f5)
  • (lua) Rich vim.opt Option object + plugin-manager load surface (lazy.nvim) (f57fa4b)
  • (watch) FileChangedShell + v:fcs_choice and the remote HostWatch wire (Phase 3k/3l) (b5ac5fd)
  • (lua) Nvim-cmp + cmp-buffer work end-to-end live (03aeb3d)
  • (lsp) Multi-buffer name/disk registry for params, locations & workspace edits (6bb18da)
  • (daemon) Multi-buffer :wall/:wqa/:xa over the wire (Phase 3m) (7fa3c9b)
  • (lua) Per-buffer user-command registry + bufdelete cleanup (3bf6d58)
  • (daemon) Blocking vim.system over the wire (Phase 3n) (1924c30)
  • (lsp) Language servers over the daemon wire (Phase 3o) (ee486ce)
  • (lua) Lazy.nvim's real git-clone install path works on nxvim (efadb1f)
  • (lua) Project-facing filesystem over the daemon wire (Phase 3p) (fc9ebea)
  • (daemon) The nxvim --daemon binary + six-leg multiplexer (Phase 3q) (0494e0c)
  • (daemon) The edit-host multiplexer — connect_daemon over one stream (Phase 3q) (0939aa5)
  • (nxvim) --connect-daemon — run the edit-host split for real over stdio (34c4e4d)
  • (daemon) The WebTransport/QUIC listener transport (Phase 3r) (3417164)
  • (editor) Jumplist (C-o/C-i), changelist (g;/g,), and g'/g` (5672aa8)
  • (server) The HostEffects seam — outbound wire + evloop effects (Phase 4a) (019260a)
  • (shada) Persistence layer Phase 1 — registers survive a restart (185dbce)
  • (lua) Vim.fn.getjumplist — read a window's jumplist from Lua (89299fe)
  • (server) The HostEffects seam — off-tick fs effects (Phase 4b) (0984763)
  • (server) The HostEffects seam — LSP effects (Phase 4c) (e00ba2b)
  • (shada) Persistence Phase 2 — global marks A–Z survive a restart (631a02c)
  • (shada) Persistence Phase 3 — per-file marks + search/ex history (2aec4ef)
  • (shada) Persistence Phase 4 — jumplist, changelist, numbered marks (8d17b5b)
  • (server) The inbound seam — run loop as a thin translator (Phase 4d) (e0509e9)
  • (lua) Vim.fn.system / systemlist — the lazy.nvim bootstrap shell-out (f66b48d)
  • (lua) Vim.fn.getcompletion(type='color') — colorscheme discovery (0960010)
  • (server) Hoist the sync tick onto the standalone EditHost (Phase 4e) (5a75eee)
  • (ex) Recognize :helptags as a loud no-op (bfd8b4b)
  • (shada) Persistence Phase 5 — the debounced live checkpoint (cbf41fd)
  • (server) The :silent[!] modifier and :source (034022a)
  • (lua) Vim.diagnostic.set / reset (+ get merges namespaces) (bc55b14)
  • (lua) Vim.fn.getcmdtype + the :command user-command definition (0154d1e)
  • (shada) Persistence Phase 7a — :wshada/:rshada + concurrent merge (6a89fa7)
  • (wasm) The wasm edit-host — feature seam + real EditHost tick (Phase 5a+5b) (759ceef)
  • (lua) Nx.* namespace foundation (canonical; vim.* aliases onto it) (94e0810)
  • (core) Two-noun treesitter model — filetype vs ts_highlight (d03ff38)
  • (lua) Nx.bo / nx.treesitter front doors for the two-noun TS model (c5a1062)
  • (edit-host) Wasm edit-host in a Web Worker + window.__nxvim (slice 5c) (494a52a)
  • (edit-host) SAB input + Worker-side timer wheel (slice 5d) (617b3ec)
  • (edit-host) Production COOP/COEP serving docs + delete the demo (slice 5e) (ad55965)
  • (gui) Wire the edit-host client into nxvim-gui (--connect-daemon) (43c1541)
  • (edit-host) Serverless OPFS filesystem in the browser (Phase 6a) (a8eae2d)
  • (edit-host) OPFS file explorer in the browser (:e ) (f18ffdb)
  • (edit-host) Real DOM renderer + mouse in the browser (159d05f)
  • (edit-host) Deploy the wasm edit-host to Netlify (f764c60)
  • (colorscheme) Built-in One Dark scheme (:colorscheme nxvim) (ec30346)
  • (edit-host) Source a single-file init.lua from OPFS at startup (cd83cb9)
  • (edit-host) Real local filesystem via the File System Access API (8fe236b)
  • (options) Configurable smooth-scroll animation (scrollanim / scrollanimduration) (75198b9)
  • (scroll) Slide the visual selection with smooth scrolling (26cccbf)
  • (edit-host) Serverless shada persistence over OPFS (f93b21c)
  • (scroll) Animate jumps, change list, and search-next (4c2b5f8)
  • (scroll) Z-family viewport repositioning (zz/zt/zb, z./z/z-) (b2d3898)
  • (search) Keep the visual selection live through /,? (c6423c4)
  • (edit-host) Browser fs over WebTransport to a daemon (Phase 6b) (a764418)
  • (edit-host) Daemon watch leg over WebTransport (Phase 6c) (e49ca63)
  • (gui) Bring back :connect — daemon edit-host over SSH or WebTransport (50136a6)
  • (edit-host) Runtime :TSInstall — fetch tree-sitter grammars on demand (cf4e1ce)
  • (edit-host) Runtime :connect nxvim:// in the browser (no ?daemon= param) (c1ab27f)
  • (insert/cmdline) {register} and to insert a register / cword (fb89c84)
  • (edit-host) Wire the "+/"* clipboard to navigator.clipboard (1b73d5b)
  • (edit-host) :TSInstall bash, css, html, java, c#, jsx (72620f8)
  • (edit-host) Proc leg over WebTransport (Phase 6d) (524d003)
  • (terminal) Core mode, buffer type, input routing (Phase 1) (ce69ab1)
  • (windows) Permanent docks — VSCode-style global edge panels (243567d)
  • (terminal) Shared vt100 emulator engine (Phase 2) (87de2ec)
  • (edit-host) Tree-sitter indentation in the browser (c5310a0)
  • (ui) Nx.ui.select on the unified float-list widget (Phase 1) (d648335)
  • (ui) Render nx.ui.select in the GUI and web clients (bf1eb21)
  • (tabs) Per-region tab pages — tab ops act on the focused layer (phase 2) (7bc1d96)
  • (ui) Per-region dock tablines — render in TUI, GUI & web (phase 3) (6623700)
  • (dock) Per-dock options — showtabline, size, title (the dock scope) (b1c26b2)
  • (ui) Per-region tabline mouse clicks — per-region tabs phase 5 (93ef240)
  • (terminal) Native PTY transport + :terminal command (Phase 3) (99d3ce3)
  • (terminal) Discoverable exit — triple-Esc + mode-line hint (218b08f)
  • (terminal) Live terminal buffer is read-only (227d55f)
  • (terminal) Show the child's window title as the buffer name (80d87ef)
  • (terminal) <C->{reg} pastes a register; keep for the shell (59bb3e8)
  • (terminal) Project the vt100 grid's colors into highlight spans (Phase 4) (d5041b3)
  • (lua) Nx.promise — browser-shaped Promises/A+ + nx.async/await (ff06c52)
  • (terminal) Nx.terminal.open — programmatic terminal control (Phase 5) (69ff8b2)
  • (ui) Click any region's window to focus it (1a9fe1d)
  • (ui) Wheel, resize & status-line click reach non-focused docks (12109d1)
  • (ui) Heavy glyphs for dock edges, distinct from window splits (3b2eb11)
  • (ui) Nx.picker — the fuzzy finder on the unified float-list widget (Phase 2) (84cb5bb)
  • (ui) Nx.picker — input caret, prompt/list separator, configurable prompt position (515e565)
  • (encoding) Fileencoding/fileencodings/bomb options (Phase 1) (14f098d)
  • (ui) Drag dock separators with the mouse, with resize cursors (f11a70d)
  • (terminal) Scrollback — history rows with color (Phase 6) (17bacf4)
  • (terminal) Repaint progressively while a flood loads (515c399)
  • (terminal) Restore scrollback color (materialized lazily while browsing) (d9f3ad9)
  • (terminal) Make terminal scrollback configurable via 'scrollback' (b980ed8)
  • (ui) Nx.picker — the preview pane (unified widget Phase 3) (79cd25b)
  • (ui) Nx.picker — scroll the preview pane with C-d/C-u/C-f/C-b (ff5f645)
  • (terminal) Daemon term_* leg — streaming PTY over the wire (Phase 7a) (6f9efc2)
  • (terminal) Wasm terminal seam — route :terminal to the daemon PTY (Phase 7b) (7effb1b)
  • (terminal) Worker.mjs terminal leg — forward PTY ops, land output (Phase 7c) (ecce0c9)
  • (ui) Dock toggle & auto-hide, with a collapsed-dock chip indicator (15dcbf0)
  • (examples) Lua micro-benchmark suite for backend comparison (31fd1e9)
  • (lua) Migrate the embedded Lua backend from PUC 5.1 to 5.4 (e62fc65)
  • (encoding) Multi-encoding read/write seam (latin1/utf-16/invalid-UTF-8) (d08c0e1)
  • (encoding) Decode wasm reads through the seam + show fileencoding on the statusline (1ee8ece)
  • (dock) Mode-independent chord with mode-preserving round trip (c97736e)
  • (ui) Nx.complete buffer-source completion engine (unified widget Phase 4-A) (4bea4e2)
  • (ui) Nx.complete manual trigger + anchor the popup at the word start (5b1dfd7)
  • (ui) Completion popup sits flush + anchored on the word (no top border) (87199af)
  • (dock) Scope the buffer list per layer (:ls, close-fallback, nx.buf.list) (4713e18)
  • (dock) H/J/K/L swaps split buffers; H/J/K/L moves a buffer across layers (55b50e2)
  • (encoding) Phase 5 — %{&option} statusline expressions + vim-style display of unprintable bytes (939bcb8)
  • (encoding) Multibyte/CJK encodings — vim codepage aliases + reject replacement (110ace5)
  • (complete) Nx.complete async sources + nx.complete.source{} (Phase 4-B) (d90b128)
  • (complete) Fold LSP into the engine as the lsp source, retire bespoke pmenu (Phase 4-C) (a2f96c5)
  • (encoding) Show ^X/ in :messages + colour them on wasm (7be0504)
  • (terminal) Edithost terminal colors, responsiveness, and flood cancel (ef5756a)
  • (complete) Completion docs sidebar — preview="markdown" kind (Phase 4-D) (ff0484f)
  • (quickfix) Errorformat engine + quickfix window (Phases 1–2) (e2fed64)
  • (complete) Trigger-char sources + plugin docs (inline + resolve) — Phase 4-E (d283852)
  • (ui) Nx.ui.float content float + LSP hover/signature surface (db01bee)
  • (snippet) Native snippet engine (nx.snippet) + LSP/completion expansion (9314a60)
  • (quickfix) :make/:grep async producers + :vimgrep (Phase 3) (a05f62e)
  • (ui) Nx.ui.input + nx.ui.confirm — complete the nx.ui.* primitive set (1bddbc7)
  • (cwd) :cd / :tcd / :lcd working-directory commands + :pwd (806e76d)
  • (quickfix) Location lists + list stack + nx.qf API (Phase 4) (2e521f7)
  • (quickfix) Expand %/# in :vimgrep and :cfile file arguments (e09a746)
  • (edithost/web) Add toml as an installable language (1109fef)
  • (treesitter) Bare :TSInstall installs the current buffer's language (f8afa88)
  • (quickfix) :cnfile/:cpfile step-by-file + loclist-owner cleanup (096d93c)
  • (ui.float) Persistent, handle-driven content float (Phase 1) (ed02f5e)
  • (edithost/web) Friendly clipboard paste (gesture + Firefox + loud empty) (cbf86a4)
  • (decor) Nx.decor Phase 1 — the viewport-changed signal (core) (8d29473)
  • (nx.utils) Add nx.utils.debounce in a new nx.utils helper namespace (5408207)
  • (decor) Nx.decor Phase 2 — nx.decor.provider + off-tick dispatch (278c9e7)
  • (nx) Statusline segment registry + promise-only async process API (cbfe435)
  • (nx) Promise-only nx.ui.* (input/select/confirm); hoist promise+timer primitives (ab23ff8)
  • (input) Nx.on_key_pending — the KeyPending event (which-key oracle, source A) (98ac765)
  • (picker) Configurable picker keys via the keymap engine (widget-keys Phase 1) (aeb033f)
  • (ui.select) Configurable select keys via the keymap engine (widget-keys Phase 2) (d2c1578)
  • (decor) Nx.decor Phase 3 — publish path renders, gen-gated (0c802ad)
  • (nx) Per-window nx.statusline — per-window custom-segment caching + setlocal layouts (aac0940)
  • (images) Nx.o.imagepreview Phase 1 — preview buffers + ImageView protocol (0e66f4b)
  • (images) Nx.o.imagepreview Phase 2 — TUI rendering via ratatui-image (25b8aaa)
  • (images) Phase 3 — refresh on disk change + downscale-on-decode (7d10069)
  • (panel/explorer) Configurable panel & explorer keys via the keymap engine (widget-keys Phase 3) (f5f8205)
  • (cmdline) Configurable command-line keys via the keymap engine (widget-keys Phase 4) (76a592e)
  • (keymap) Friendly descriptions on the built-in native default maps (which-key) (b2f0789)
  • (decor) Nx.decor Phase 4 — async, debounce, robustness, buftype + undo-flash fix (b246630)
  • (keymap) Which-key source C — the pending oracle reports the active widget's keys (fe853a7)
  • (statusline) Clickable status/tabline regions (%@…%X, nx.statusline on_click, laststatus=3, %nT) (1414eba)
  • (images) GUI image previews — wgpu textured-quad pipeline (35a07ab)
  • (images) Web image previews — off-tick open + out-of-band fetch (91e85c0)
  • (options) Warn (don't silently swallow) an unknown nx.o/vim.o option (5647a49)
  • (images) Refresh web/off-tick previews on reopen + watch reload (86386e9)
  • (decor) Virtual text rendering — virt_text positions (Phases 1–4) (644d42c)
  • (images) Server seam for native-over-daemon image fetch (Phase 1) (050fbcd)
  • (images) GUI fetches remote previews over the daemon (Phase 2) (dbb2595)
  • (images) TUI fetches remote previews over the daemon (Phase 3) (ca8005a)
  • (keymap) Native which-key — pending-oracle float, bottom-right, source B (1dc137e)
  • (ui) Nx.ui.open / vim.ui.open — hand a path or URL to the OS opener (27c3292)
  • (decor) Virt_lines rendering — screen-row expansion (Phase 5) (c0da117)
  • (decor) Virt_text_hide + priority ordering (Phase 6, TUI-verifiable) (6956995)
  • (ts) Progressive highlighting for large files — resume the parse across frames (9337a94)
  • (keymap) Which-key Phase 2+3 — enumerate the built-in command grammar (b77d310)
  • (cmdline) Command-line completion — the Tab wildmenu (e3ab6d0)
  • (nx.fs) Promise-always filesystem API + 10ms-coalesced dir watch (0b2711a)
  • (web) :luafile picker — run a real local .lua through the live effects path (6a24444)
  • (nx.view) Dockable plugin-owned content surface + nx.open/nx.layer (a7a446e)
  • (lsp) Nx.lsp control surface — Phase A (config registry, dispatch, verbs) (4a7ff90)
  • (nx.fs) Off-tick filesystem ops — native, daemon, OPFS, and watch (ea1503e)
  • (virt-text) Phase 6 — GUI + web paint parity, hl_mode, scroll band, wasm parity (4f91a10)
  • (ui) Inline float highlighting — per-segment styled chunk runs (which-key Phase 4) (1e0f9bb)
  • (lsp) Synchronous wasm LSP client — Phase 6e foundation (27ae327)
  • (lsp) Wire the wasm LSP consumer in nxvim-server — Phase 6e Stage B (2efb06e)
  • (scroll) Rebuild the smooth-scroll band on screen rows (virt_lines slide) (a8f922b)
  • (wrap) Soft word-wrap on the row model, incl. gj/gk display motions (599bed9)
  • (lsp) Browser LSP leg end-to-end over WebTransport — Phase 6e Stages C–F (fbbae25)
  • (options) Neovim-compatible numberwidth + signcolumn window options (07af776)
  • (panel) Focus-locked bottom panel over ordinary buffers + loclists (83e07fe)
  • (lsp) Full working order — semantic/inlay surface, picker locations, symbols (f912bc4)
  • (nxtree) Full file explorer as a pure-Lua nx.* plugin (a2ea656)
  • (wrap) Close v1 gaps + segment-aware overlays + per-dock laststatus (2db1d64)
  • (cmdline) Wildmenu docs sidebar, selection preview, and plugin/server commands (bc9e8e7)
  • (nxtree) :NxTreeFindFile reveal + nx.view cursor setter (cf3304c)
  • (diagnostics) Render client-set diagnostics (vim.diagnostic.set) (975f3c3)
  • (nxview) Float-mount + nx.view.component (Vue-shaped) model (f67e015)
  • (treesitter) Wire the query-resolution bridge (after/queries, ; inherits:) (2507803)
  • (nxview) Add ctx.computed with fine-grained dependency tracking (b00d0d2)
  • (comment) Gc/gcc comment operator + 'commentstring' (aee5d7b)
  • (nxview) Stackable modals, fail-loud content float, ctx.bo (ac7adaf)
  • (nxview) Window-local options in the view component (ctx.wo) (865052e)
  • (options) Window-local 'cursorline' across server and all clients (56674fd)
  • (options) Window-local 'fillchars' with eob (hide the ~ markers) (0f9e357)
  • (gui,web) Unify popup borders onto box-drawing glyphs (0cd9b78)
  • (geometry) Unified viewport-relative size, alignment, and margin (36aeae6)
  • (mouse) Core-owned mouse for the completion popup (Phase 1) (7c93548)
  • (mouse) Core-owned mouse for pickers and select menus (Phase 2) (e17f607)
  • (mouse) Core-owned mouse for the command-line wildmenu (Phase 3) (d9990a1)
  • (mouse) Example, docs, and web verify for overlay mouse (Phase 4) (06c229e)
  • (lua) Native nx.str.width + nx.align line helpers (f92fb1c)
  • (plugins) Native nx.plugins package manager + spawn terminal hygiene (b45a2d5)
  • (plugins) First-run recommended-set prompt + VimEnter (ca0c70d)
  • (lsp) K hover as a real float window — mouse + scroll for free (Phase 1) (4bdfa3a)
  • (lsp) Signature help as a doc-float window too (Phase 2) (443e498)
  • (complete) Wheel-scrollable completion docs sidebar (Phase 3) (6253f10)
  • (lsp) Type the hover/signature doc-float buffers as markdown by default (3615ba9)
  • (lsp) Type the signature-help popup as the invoking buffer's filetype (7a81e75)
  • (plugins) Lazy-style plugin UI + cross-tick Lua helpers (7486107)
  • (theme) Color float borders from FloatBorder/NormalFloat/FloatTitle (77427a4)
  • (editor) :normal command + opt-in restorecursor (1595f02)
  • (options) Window-local 'padding' — a blank margin around the text body (4ecd6c6)
  • (plugins) Lazy-style plugin manager UI + first-run welcome (c1ef58d)
  • (test) Nx.test framework + nxvim --test-plugin runner (a2f6b3b)
  • (messages) Paint error lines red in the :messages panel (ee82c72)
  • (plugins) Rename setup→setup_manager and expand ~ in dir (724382d)
  • (cmdline) Enable command-line completion by default (a1c56c3)
  • (cli) Parse arguments with clap (validate, --help, --version) (c04cf9b)
  • (messages) Paint error messages red in the cmdline (8a43d64)
  • (autocmd) Fire the core write/insert/buffer/cursor lifecycle events (0207a8f)
  • (quickfix) Add nx.qf location-list nav/window wrappers (f9c233c)
  • (options) Document all options + complete them after :set (5dd300a)
  • (picker) Bind the three built-in sources to f{f,g,b} by default (b56feba)
  • (picker) Scope the buffers picker to the focused layer like :ls (988080e)
  • (options) Add 'timeout'/'timeoutlen', honored on all clients (0bafd71)
  • (vimfn) Resolve expand(''/'<script>') + ${VAR}, fail loud on unknown tokens (3f82c5d)
  • (dock) Winhighlight — per-window highlight remap (b2b695e)
  • (help) Integrate the nxvim-help plugin (a4fcf88)
  • (messages) Soft-wrap the :messages panel by default (61d7edb)
  • (picker/quickfix) Send search results to quickfix/loclist dock tabs (0a3daf9)
  • (api) Add nx.cursor.set (the cursor write) (9c26c0c)
  • (windows) Emit WinScrolled + add explicit-window scroll setters (214c0cb)
  • (workspace) Per-workspace shada namespace + session save/restore (959cca2)
  • (persist) Native relative_splits/relative_docks options + nx.json codec (7ebd7a1)
  • (lua) Add nx.buf.search — native buffer text search (e3bbc12)
  • (view) Mount a view in its own tab (nx.view:mount{ tab = true }) (595121e)
  • (options) Make 'scrollanim' a per-window option (60fc092)
  • (extmark) Render gutter signs from sign_text (+ sign_hl_group) (2c470dd)
  • (extmark) Nx-native line_fill — fill a row with a repeated glyph (bfc08c0)
  • (extmark) Round-trip line_fill through the extmark mirror (7a88b1e)
  • (lua) Add nx.regex — real regex for Lua strings; zero-copy nx.buf.search (aeced41)
  • (lua) Nx.buf.set_lines — the editor's one buffer-text mutation (894a0ed)
  • (diagnostic) Built-in ]d/[d, ]e/[e, d nav defaults (41d72c9)
  • (autocmd) ModeChanged — the general mode-transition event (c7c3ce2)
  • (jumps) Honor 'switchbuf' (useopen/usetab) on every jump, default usetab (93e80f1)
  • (picker) File/buffer opens honor 'switchbuf' (usetab by default) (eb32388)
  • (picker) opens the selection in a new tab (fb3d970)
  • (picker) / open the selection in a split (17df695)
  • (view) Name nx.view buffers + fire on_close on user quit (eb36ae2)
  • (windows) Leaf-count equalize + 'equalalways' auto-balance (4617b03)
  • (options) Add 'fileformat' (unix/dos/mac) buffer option (c0d28a8)
  • (statusline) Nx.statusline.setup separator opt (gap-free powerline bars) (99affce)
  • (plugins) Default recommended set is the first-party nxvim plugins (2cbbf84)
  • (mode) MultiCursor reports its own mode() code "m" (c1ec21b)
  • (gui) IME text input — composed/non-ASCII chars, caret-anchored (edbf558)
  • (gui) Wezterm-style font fallback list (676ba88)
  • (gui) Wide-char + emoji rendering (CJK snapping, emoji mask/scale) (d1a3ce1)

Bug Fixes

  • (rpc) Harden reader against malformed/nested/oversized frames (6f1bc74)
  • (server) Cap run_pending fixpoint to stop self-recursive commands (3941550)
  • (tui) Disable mouse capture on panic via an RAII guard (9b9b878)
  • (ts,lua) Harden trust boundaries (grammar name, edit offsets, mkdir perms) (82e6f37)
  • (server) Name buffer + echo on unreadable startup file (4b704b6)
  • (server) Harden TS worker supervision (breaker, spawn failures, reaping) (86c43c3)
  • (rpc) Drain pending and couple tasks on connection teardown (e725a7d)
  • (server) Bound syntax event channel, coalesce redraws, clamp span lines (aad4981)
  • (ts) Keep the last good parse tree when reparse yields None (48336d4)
  • (nxvim) Report a server-thread panic as a non-zero exit (aeff4ae)
  • (nxvim) Only treat --__ts-worker as worker mode when it is argv[1] (3f677c5)
  • (tui) Don't arm a zero-duration scroll animation (divide-by-zero progress) (5a122c1)
  • (search) Step n between non-overlapping matches, not into them (cd43f55)
  • (undo) Clear the modified flag when undo/redo returns to the saved state (25fd51e)
  • (panel) Keep LSP location lists navigable after :panelopen (21d4676)
  • (lsp) Give document sync its own edit journal so didChange isn't starved (990e2fe)
  • (core) R enters Replace mode (f1a02b6)
  • (tui) Enable bracketed paste so a paste arrives in one shot (db57dea)
  • (lua) Timer is_active/is_closing fail loud; tag remaining API gaps (493b7b7)
  • (floats) Correct bordered-float scrolling and float-aware window close/quit (3925219)
  • (extmarks) Preserve extmarks across undo/redo (c71b6fe)
  • (keymap) Read literal-argument keys raw, bypassing the matcher (f10185d)
  • (lua) Unblock which-key — vim.split empty-sep loop, str2list/nr2char, fail-loud vim.fn, popup-render builtins (abfce9f)
  • (server) Reject invalid buffer handle in nvim_open_win float (c56ca7f)
  • (lsp) Clamp out-of-bounds server Position.line in edit replies (6234310)
  • (core) Make :w atomic to prevent data loss on interrupted save (c779121)
  • (multicursor) Per-window cursors + window-correct undo cursor restore (1fb300c)
  • (treesitter) :TSInstall handles version-tag revisions (e.g. python) (3ce9788)
  • (treesitter) Re-highlight open buffers immediately after :TSInstall (81865e2)
  • (gui) Use :wo (not :wn) for the save-as dialog (4903c22)
  • (web) Install and select the Rust toolchain explicitly on Netlify (d434f09)
  • (web) Bump Netlify RUST_VERSION to 1.96.0 (edition2024 dep) (86dc426)
  • (insert) at end of line joins the next line (b6bf0ce)
  • (web) Accumulate wheel deltas into line notches so scrolling isn't too fast (c23915f)
  • (lua) Vim.split honors the legacy boolean plain arg — fixes nvim-treesitter (775ce3a)
  • (lsp) Make make_position_params window-aware and open_floating_preview return real float handles (c291737)
  • Per-namespace highlights no longer fold into global (nvim_set_hl ns≠0) (37fdf7f)
  • (lua) Pump init.lua so a startup vim.wait parks instead of erroring (733135f)
  • (build) Nxvim & nxvim-gui declare the native server feature explicitly (1bb99bc)
  • (watch) Don't arm a file watch on a not-yet-written buffer (f0f6693)
  • (gui) Suppress native file dialogs in a remote (daemon) session (011e263)
  • (edit-host) Dev server serves /web/ and redirects bare root (cf27ce4)
  • (scroll) Keep search highlights lit while the view slides (b02b068)
  • (terminal) Cursor-after-char, input-position re-entry, macOS Ctrl-\ (7865fa7)
  • (terminal) I/a enter at the cursor, not the saved input point (b1076c3)
  • (terminal) Snap cursor to input point on i/a re-entry (21e71b2)
  • (terminal) Triple-Esc requires quick succession (chord window) (d751286)
  • (terminal) Answer cursor-position / device-attributes queries (23e0e9c)
  • (terminal) Start the child in the editor's cwd, not $HOME (c018a81)
  • (gui) Horizontal scroll over-shifts text past the gutter & next split (71991b5)
  • (web) Coalesce same-cell mouse drags so a click no longer enters Visual (a91c28f)
  • (terminal) Never freeze under a flood of output (07b2fa8)
  • (terminal) Keep floods O(screen) — materialize scrollback only when browsing (c8ec3de)
  • (terminal) Always-full buffer — stable cursor/line numbers + fast (11347e4)
  • (terminal) Keep scrollback current after it saturates (c06bbe2)
  • (web) Plain click no longer raises a Paste chip or latches the drag (0c2ac65)
  • (ui) Completion popup is noselect — stays a newline until you pick a row (bd092a5)
  • (buffers) :bd rebinds every window showing the buffer, not just the focused one (5ebcd70)
  • (terminal) Don't lose a fast-exiting child's final output (b0582e7)
  • (terminal) Keep highlighting after the child exits (fc3d8cc)
  • (edithost/web) :TSInstall repairs missing indents on available grammars (87d1943)
  • (statusline) Truncate the path, not the encoding, on a narrow line (5065754)
  • (quickfix) Layer-aware window lookup so an open dock can't panic input (11d728a)
  • (multicursor) {count}c{motion} count is the motion distance (c9f75f6)
  • (nx) Reconcile async surfaces after merging origin's decor/utils/ui.float (aa88eb3)
  • (images) Preview the CLI file arg + center the picture (ab316ca)
  • (regex) Provide ssize_t on MSVC via force-included compat header (4eaa626)
  • (edithost) Publish web/rpc.mjs in the static site (e7a4161)
  • (regex) Monotonic clock on MSVC (no POSIX clock_gettime) (07cc26c)
  • (edithost) Vendor @msgpack/msgpack on Netlify (worker hard-deps it) (5eea636)
  • (images) Make web image previews actually trigger ('set' + config + :e) (f9fb14c)
  • (options) :set fails loud on an option that doesn't actually apply (aca1efb)
  • (edithost) Package ts-indent.js in the static site (0b5f786)
  • (ts) Drop parsers before grammar libraries — no segfault on :q of a large file (fa63da7)
  • (input) Encode Shift+Tab as in the TUI and GUI clients (dca780e)
  • (readonly) One modifiable() chokepoint for every non-ordinary buffer (432c8fb)
  • (shada) Defer sibling compaction to clean exit, not load (99752ba)
  • (terminal) Correct cursor column for multibyte glyphs + clear on startup/resize (92c049b)
  • (lsp) Wire documentSymbol/workspaceSymbol into the wasm sync client (54d34ad)
  • (edithost) Correct cmdline wildmenu layout on the web client (bae91d4)
  • (edithost) Render nx.decor/extmark highlights + keep panel-occluded buffers highlighted on the web (c788f04)
  • (highlight) Keep buffers behind a grabbing float highlighted (c51d35b)
  • (lsp) Find_root must return a promise, not the nx.async factory (19f6b8c)
  • (mouse) Dismiss hover/signature/completion popups on a disrupting click or scroll (d3c7017)
  • (options) Don't warn when writing seeded read-mostly options (83f5c34)
  • (render) Float/padding backgrounds + wire window-local 'wrap' (4f70223)
  • (picker) Don't crash opening a picker in a too-small region (e9fbd63)
  • Cross-crate bug/security/perf review fixes (3c39453)
  • Close remaining wire-geometry overflow/OOM paths (c31757f)
  • (registers) List readable special registers in the "-pending popup (fcd256b)
  • (view) Destroy a view when its backing buffer is deleted (5e31812)
  • (mouse) Hit-test the right row on soft-wrapped lines (b9c0f97)
  • (tabs) :tablast targets the focused layer's last tab (4c194fc)
  • (treesitter) Tolerate neovim capture-valued #set! directives (1bdceeb)
  • (buffers/dock) Close tab on :bd of last buffer; :q in dock never quits editor (e2dde86)
  • (tui) Map legacy C0 control bytes to canonical control notation (8688bdd)
  • (plugins) Show the full source in the welcome trust checklist (9465cd9)
  • (lua) Expand("%:p") and current-buffer name track the live buffer (20d3eb3)
  • (lsp) Undo of a rename restores the pre-rename cursor, not top-of-file (8a1708a)
  • (lsp) Cwd-aware buffer reuse + non-reloading picker jump (15f170b)
  • (lsp) Keep the cursor sensible through rename / format and their undo/redo (021d493)
  • (lsp) Keep incremental didChange correct under UTF-16/32 via a sync shadow (f43ba25)
  • (input) Read multi-key built-in continuations raw, not via the keymap matcher (6bb6d29)
  • (test) Nx._ui statusline mirror carries the rendered segment text (700f24d)
  • (buffers) :buffer honors 'switchbuf' (the :ls-then-:b navigation) (c7526b0)
  • (picker) Buffers source // bypass the switchbuf-aware :buffer (d8025c3)
  • (autocmds) :edit into a reused buffer fires BufReadPost (818bc7e)
  • (tui) Themed statusline segments no longer inverted by reverse base (950662e)
  • (notify) Nx.notify at ERROR level paints the message line red (d616e88)
  • (plugins) Welcome description wraps instead of clipping at float edge (83d0f4f)
  • (plugins) Give the welcome float 3 spare rows for wrapped descriptions (96f70c6)
  • (plugins) Land the welcome cursor on the first item (0838be6)
  • (statusline) Fold render-defined highlights before projecting (no flicker) (813ef5a)
  • (gui) Render statusline glyphs unclipped like the body text (99e9758)
  • (gui) Synthetic italic so CJK/symbols in italic comments don't break (0746d74)

Performance

  • (core) Make line_len/grapheme walks allocation-free (21f5dce)
  • (search) Cache the compiled hlsearch regex across redraws (f0e3c62)
  • (tui) Borrow the viewport in render_window instead of cloning it (5055220)
  • (rpc) Move frame payloads out of dispatch instead of cloning (d9e83ea)
  • (view) Single-pass byte→virtcol mapping for the projection hot path (ab46fdb)
  • (rpc) Preallocate encode buffers and coalesce writer flushes (31b4190)
  • Index lsp diagnostics + linearize ts spans; harden core geometry overflow (eb05788)

Refactor

  • (core) Extract duplicated editor.rs logic (F1) (3e6ec84)
  • (server) Extract redraw projection boilerplate (F2) (30eb8f9)
  • (tui) Split lib.rs into focused submodules (F3) (1317a3e)
  • (rpc,ts,server) Define the syntax wire format once (F4) (d26d17f)
  • (core) Minor core polish — no FS I/O in core, bounded messages, ASCII fast path (F5) (9ee264a)
  • (lsp) Split manager.rs into focused modules (1167f47)
  • (lua) Split nxvim-lua lib.rs and prelude.lua into modules (83a33a8)
  • (server) Split lib.rs and lsp.rs into focused modules (bf4d565)
  • (core) Extract decoupled command & windows modules from editor (139f5b0)
  • (core) Split editor/mod.rs into per-concern modules (phase 2) (9f3349a)
  • (lua) Serde-derive the Rust→Lua state mirrors (1fa41d8)
  • Dedupe float-enum parsing, take_* drains, and bool arg extraction (2af1523)
  • Extract shared client model into nxvim-view crate (3201da3)
  • (shada) Put the store behind a seam + add carry-forward compaction (1d3e736)
  • (remote) Remove the classic remote topology entirely (7fcafdf)
  • Rip out neovim-plugin-compat runtime, keep the nx.* load-bearing surface (300cdb0)
  • Delete the vendored vim.treesitter surface; nx.treesitter.set_query (654de95)
  • (lua) Rename prelude/api.lua to nvim_api.lua (bdebfe8)
  • (lua) Make nx.* the canonical namespace, vim.* the alias (f85582c)
  • (lua) Canonical nx.* namespace, remove vim.uv, scrub plugin justifications (e9bb90c)
  • (lua) Remove the vestigial buffer-mutation bridge + dead BufOp variants (be157cb)
  • (core) Per-layer tab stacks (per-region tablines phase 1) (29cbd1f)
  • (input) Remove nx.on_key in favor of a coming KeyPending event (bd3fd5f)
  • (buffers) Converge explorer/view/quickfix on the vim ftplugin model (cce0d70)
  • (buffers) Fold the four buffer markers into one BufferKind enum (1199cdf)
  • (view) Fold window rows into one RenderRow projection primitive (6006658)
  • (keymap) Move built-in LSP + completion keymaps into Lua, drop dead which-key rows (a7d7be7)
  • (fs) No blocking IO — remove the BlockingSystem + per-op luafs bridges (474813f)
  • (clients) Drop the dead bottom-panel rendering from every client (dc4cdeb)
  • (fs) Remove the last blocking-IO vim.fn (mkdir); add mode to nx.fs.mkdir (9856a2d)
  • (nxview) Generalize the component model with pluggable backends (7613381)
  • (rpc) Rename pure-protocol methods nvim_→nx_ (2357e51)
  • (menu) Extract menu box geometry into core (menu_geom) (532f6ad)
  • (mouse) Drop the dead client-side completion-mouse path (Phase 4a) (4c451f7)
  • (hl) Nx.hl.exists returns a native boolean (fd40095)

Documentation

  • Smooth (animated) scrolling design (5c4e6f9)
  • Smooth-scrolling implementation plan (3d72d11)
  • GitHub release pipeline design (344b881)
  • Revise release pipeline — PR-gated changelog, no pushes to main (6413470)
  • Release pipeline implementation plan (c62fd0d)
  • How to verify download checksums and provenance (3e778a5)
  • Update release matrix to macos-15-intel (7236f6a)
  • MacOS code signing & notarization design (8bfbaed)
  • MacOS code signing implementation plan (daa36c8)
  • Design for user-experience fidelity tests (3a97905)
  • Implementation plan for user-experience fidelity tests (6d41c5e)
  • Remove text-objects implementation plan (f6e4c22)
  • (lsp) Refine Phase 5 plan — ordered, live-refreshing completion (b299b74)
  • (lsp) Sanity-check & refine Phase 6 plan against the as-built code (75ad48a)
  • Require test-driven bug fixes (1734790)
  • (lsp) Split Phase 7 into 7a/7b, drive it from the real nvim-lspconfig (2ef9388)
  • Require test-driven bug fixes (ad621ee)
  • Refine autocmd-lifecycle spec; split out BufWritePre write seam (ab29cc5)
  • Mark autocmd-lifecycle spec implemented (Phases 1-3) (4216b81)
  • (lsp) Phase 7a vendored-config test verified end-to-end (d6e3dc4)
  • (keymap) Add phased keymap (vim.keymap/:map) design (544a1ac)
  • Keymap (vim.keymap/:map) design — main-first, backport to LSP branch (460cee0)
  • (keymap) Mark :map-family ex-commands indefinitely postponed (8e24d97)
  • (lsp) Flesh out Phase 7b plan into a slice-by-slice hand-off spec (67d3e92)
  • (architecture) Mark the vim.lsp/vim.diagnostic surface complete (32d8a40)
  • (lsp) Completion plan + "no silent stubs" rule (c748eb3)
  • (architecture) Correct the LSP overclaim (starts != works) (bca1f27)
  • Note vim.fn.input / vim.fn.confirm as a roadmap gap (ca94695)
  • Canonical known-approximations registry; tag every in-code gap (808eee1)
  • Completion-documentation plan; tag the gap; clarify omnifunc (ac0fcec)
  • (lsp) Mark LSP-completion plan done; de-hedge architecture LSP section (6f866c0)
  • (search) Reflect that / and ? search is shipped, not pending (70de713)
  • (treesitter) Design spec for the vim.treesitter Lua platform (c04d4e2)
  • Sweep stale claims — undo tree, in-process treesitter, registers/marks, sync prompts, single-window (35efedf)
  • (adr) Record the engine-vs-API-contract decision (ADR 0001) (5ecb142)
  • (treesitter) Query-resolution bridge (deferred behind start) (82e7795)
  • Rewrite README and refresh project docs (f1f9d74)
  • Refresh stale code comments and docstrings across the workspace (04e45de)
  • (readme) Document the nxvim --server headless role and remote SSH editing (b8d3070)
  • Plan the remaining nvim-cmp + lualine compatibility work (a15bb55)
  • (plans) Local edit-host + remote daemon + Lua-in-browser plan (697a7d1)
  • (plans) Mark Phase 1 (HostFs) done; fold HostProc into Phase 3 (807dbda)
  • (plans) Phase 6 daemon transport → WebTransport/QUIC + stream-multiplexing rationale (3a99b82)
  • (plans) Edit-host architecture sanity check — refinements from review (9983e70)
  • Prune stale roadmap/approximation entries (now landed) (769a260)
  • (plans) Phase 3q — the nxvim --daemon binary + six-leg multiplexer (f43c253)
  • (plans) Mark Phase 3q daemon side done; resolve the scoping question (1f15653)
  • (plans) Resolve Open Decision #2 — QUIC listener native transport, drop ssh (9b52467)
  • (plans) Shada persistence — multi-writer redb, with jumplist/changelist/numbered marks (83b7d11)
  • (plans) Slice Phase 5 — the wasm edit-host (5a–5e) (9d36ff8)
  • (specs) Native plugin API (nx.*) proposal — pivot off nvim emulation (02cb024)
  • Nxvim is its own editor — the nx.* API, the colorscheme glue, and the alias whitelist (e3c6a60)
  • (specs) Nx.decor — off-frame viewport decoration provider (b8e6a2f)
  • Treesitter highlighting as buffer state, not start/stop verbs (15d6964)
  • Scrub neovim-plugin-compat framing from feature docs (cbbc5f9)
  • (edit-host) Drop co_pcall / which-key compat from the plan (5e6aeac)
  • (plans) Scope the vendored vim.treesitter Lua deletion (99cf535)
  • Dogfood the nx plugin API as a prime directive (9b7a2f0)
  • (plans) Nx.* foundation + two-noun treesitter — phased plan (2df39d9)
  • Reconcile architecture/spec/plans with the nx.* treesitter reality (e6f4308)
  • (examples) Reconcile examples with the nx.* refactor (94aaef4)
  • (edit-host) Mark slice 5d done; note the wasm buffer-API gap (2c43b3a)
  • (edit-host) Correct the nvim_buf_set_lines note — intentionally absent, not a wasm gap (9fd6669)
  • (lsp) Nx.lsp control-surface design (a8f650e)
  • (ui) Unified float-list widget design (5dd8101)
  • (ui) Per-region tab-pages & tablines — phased plan (76aaa9a)
  • (dock) Example showcases per-dock options (title/showtabline/size) (a0237bd)
  • (terminal) Record Phase 7 web-terminal leg as implemented (4ca166b)
  • (shada) Mark persistence DONE on every surface (native redb + web OPFS) (d1a044a)
  • (architecture) :TSInstall has landed, not a roadmap gap (3fa4ca6)
  • (decor) Note nx.utils.debounce for Phase 4 scroll debounce (1967878)
  • (images) Native-over-daemon preview fetch — docs + example (Phase 4) (90d0f7f)
  • Update pass — nx.* surfaces landed, crate list, stale roadmap (542b297)
  • Code-comment accuracy pass across all crates (f72ccb5)
  • (plans) Plan to unify the special-buffer-kind grab-bag (332d7fe)
  • (plans) Mark the blocking-IO surfaces superseded in the fs/edit-host plans (b0bd553)
  • Drop neovim-compatibility framing, incl. colorschemes (88beff6)
  • (nxview) Fix ctx.bo/ctx.wo examples to real nxvim options (daf6e79)
  • Plugin authoring guide + README section (7815368)
  • Note dock-scoped options (nx.dock.opt) in plugin authoring guide (29bff45)
  • MdBook documentation site generated from source (6afd9c5)
  • (lua) Document nx.match., nx.qf., nx.buffers.actions.open (f511d1e)
  • Document picker preview, location-list wrappers, write/edit autocmd events (7981cae)
  • Add "Beyond vim" feature index + multi-cursor guide (e561fc8)
  • (book) Link cross-doc references to in-book pages, not GitHub (f1163de)
  • Add permanent docks feature guide (16dbc3c)
  • Add fuzzy picker guide, drop in-buffer terminal from index (00c30c5)
  • (readme) Expand title to "the Not eXactly Vim editor" (0f95f41)
  • (book) Add platform & plugin-dev guides; native nx.* framing (c18d4c7)
  • (plans) Plan terminal output extractors (TermOutput autocmd) (04af280)
  • (architecture) Reconcile with the real system (0510744)
  • (examples) Add gutter-signs — a runnable sign_text / line_fill demo (d648236)
  • (picker) Document open-in-tab + 'switchbuf', extend ui-picker example (b59c387)

Testing

  • Three-tier user-experience fidelity test suite (23549b4)
  • (lsp) Vendored-config end-to-end test + mark Phase 7a done (a2650bf)
  • Fix failing tests and de-flake the redraw helpers (3dd86be)
  • (lsp) Gated e2e suite driving 10 real servers via vendored nvim-lspconfig (44cf749)
  • Extract shared nxvim-test-harness crate; split editing/lsp suites (219a67b)
  • (lsp) Make treesitter-highlight tests hermetic (ff6322b)
  • (e2e) Hermetic config + #[ignore] the PTY tier (f653c1b)
  • Clone pinned upstream plugins instead of reading the local install (73275cc)
  • (blockers) De-which-key the comments and fixture (8368ae1)
  • (terminal) Lock in that the child inherits the parent environment (a528f6c)
  • (terminal) Web :terminal verify harness over a real daemon (Phase 7d) (ba8b7ad)
  • (highlights) Drop the removed vim.fn.isdirectory from the colorscheme-compile fixture (bb876b5)
  • (diagnostics) LSP and client-set diagnostics coexist on one buffer (b7c2e47)
  • (web) Fix stale and flaky checks in verify-ui.mjs (49d39db)
  • Drop integration tests that load examples/ configs (7bb32e2)
  • (keymap) Tolerate shipped default leader maps in get_keymap assertions (3876433)
  • (server) Fix two macOS-only test failures (716ef7b)

Miscellaneous

  • Strip symbols from release binaries (2df1a01)
  • Add git-cliff changelog config (5536b34)
  • Add reusable cross-platform build workflow (7f07f4a)
  • Add rolling edge prerelease on main (5ec03bd)
  • Add release-prep workflow to open the release PR (84647dc)
  • Add release workflow that tags and publishes on merge (8b9a371)
  • Bump GitHub Actions to latest major versions (fb99108)
  • Sign and notarize macOS binaries (63eefb0)
  • Temporarily disable macOS builds (ba46460)
  • Make the Lua backend a Cargo feature (lua51 default / luajit) (5fc2268)
  • (web) Netlify config to auto-publish the web UI (a25e468)
  • Add stylua + selene to the pre-commit (first-party Lua) (41779d5)
  • Ditch LuaJIT — vendored PUC Lua 5.1 is the only backend (87350e1)
  • Remove deprecated nxvim-web, migrate tree-sitter tooling to edithost (28c3208)
  • (edithost) Publish the wasm editor as an extract-and-serve tarball (f7a7b0e)
  • (edit-host) Sync Cargo.lock with vt100 dep from main (da560a3)
  • (plugins) Bump nxvim-help (help window :q/:bd lifecycle fix) (21db02b)
  • (plugins) Bump nxvim-help (help picker topic preview) (ee4f26e)

Other

  • Initial (823ef7a)
  • Project scaffold (46ff224)
  • Pin versions (31e4a72)
  • Ropey 2 and ratatui (a9d5fe5)
  • More stuff (345dc7d)
  • Format and lint (0377707)
  • Initial commit (8203daf)
  • Highlight visual mode (fc4b46c)
  • Add more docs (ef76308)
  • Edge only manually (c30e46f)
  • Enable build (c3b88a2)
  • Fix windows build (b0fed17)
  • Merge branch 'main' into feature/lsp-integration (9c2a31d)
  • Merge remote-tracking branch 'origin/main' into feature/lsp-integration (04f69c2)
  • Merge branch 'main' into feature/lsp-integration (a8088f9)
  • Add autocmd spec (6f122c1)
  • Merge branch 'main' into feature/lsp-integration

Conflicts:

crates/nxvim-server/src/lib.rs (4199c1b)

  • Vendor nvim-lspconfig for tests (58b9971)
  • Merge branch 'main' into feature/lsp-integration

Integrate the keymap engine (vim.keymap/:map, Phases 1–4) from main and
backport the LSP keys onto it.

  • K + insert completion triggers (//) become
    overridable native default maps via a new MappingRhs::Native(BuiltinAction)
    variant + set_native_defaults install path.
  • gd/gD/gr stay on an in-batch lsp_g_prefix recognizer (lsp_pending_g kept):
    the matcher can't own the g-prefix without breaking core's gg/ge/dgg motions
    (they live in nxvim-core, not the trie, and there's no mid-batch timer). The
    recognizer routes a non-d/D/r g back through the matcher, so user g-maps
    (e.g. gh) still fire and core motions stay intact. Consequence: gd/gD/gr are
    not user-overridable — a documented gap (see keymap design doc, Backport B4).
  • lsp_pending_ctrl_x retired ( is now a two-key matcher sequence);
    insert popup routing stays bespoke and runs ahead of the matcher.
  • TUI: combine mode-aware cursor shape (this branch) with bracketed paste +
    timeoutlen idle flush (main).

All tests green (lsp 40, editing 197, keymaps 25, + rest); fmt + clippy clean.

Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com (957b9dd)

  • Merge origin/main into feature/lsp-integration

Brings in the built-in-disambiguation refactor (b23735f): nxvim-core's unified
parse_step/ResolvedCommand grammar + the command_status oracle the keymap
matcher consults so multi-key built-ins (gg, dd, fx, …) fire instantly under a
colliding user prefix.

Conflict resolution (editor.rs): main converted handle_normal's char-match to
the typed NormalCmd dispatch, which dropped the R→Replace-mode entry this
branch had added. Ported it back into the new grammar as NormalCmd::EnterReplace
(enum + parse_command 'R' arm + execute_normal arm), and repointed the
branch's pending_replace() view getter at main's Stage::ReplacePending.

Conflict resolution (architecture.md): both sides advanced the Lua-surface
status — main marked vim.keymap.set done, this branch the native LSP client.
Merged to reflect both, leaving vim.lsp/vim.diagnostic (Lua exposure) as the
remaining LSP gap.

Verified: cargo build, cargo test --workspace (all green), clippy -D warnings.

Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com (e01889e)

Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com (9c77e9c)

  • Fix non-styled symbols in comments (c3fa404)

Verify a download's provenance:

gh attestation verify <file> --repo davidrios/nxvim