a neovim plugin manager that does not need neovim.
every existing plugin manager (lazy.nvim, mini.nvim, paq, vim-plug, rocks.nvim) runs inside neovim, in lua. fine if you live in your editor, but a hard dependency when you bootstrap a fresh machine, ci runner, dockerfile, ansible playbook, or dotfile. pluvgo decouples install from the editor: rust binary owns clone, lockfile, parallelism. neovim only loads a 15-line lua shim that prepends each plugin to runtimepath.
$ cargo install pluvgo $ pluvgo init wrote ~/.config/nvim/pluvgo.toml $ pluvgo install [================] 12/12 installed 12 plugins in 4.20s (0 errors) wrote ~/.config/nvim/lua/pluvgo_runtime.lua # in init.lua: require('pluvgo_runtime')
one toml, every plugin.
# pluvgo.toml [[plugin]] repo = "nvim-treesitter/nvim-treesitter" build = "make" [[plugin]] repo = "nvim-telescope/telescope.nvim" rev = "0.1.x" [[plugin]] repo = "folke/tokyonight.nvim" [[plugin]] repo = "neovim/nvim-lspconfig" enabled = false # cloned, but not added to runtimepath
the differences that actually matter.
install before nvim is on PATH
ci runners and dockerfile bootstraps build neovim configs from scratch. with every other manager you install neovim, then start it, then it bootstraps itself, then you run the install. with pluvgo you call pluvgo install in any shell with git available, then start nvim once and everything is on runtimepath.
deterministic lockfile
pluvgo.lock is a TOML file you commit. each plugin gets repo + rev + sha. pluvgo install in a fresh checkout reproduces the exact tree that built last time. no hidden global cache.
parallel git, single binary
rayon spreads clones across cores, shallow filtered fetch, no python or node runtime. the binary is roughly 1.2 MB.
tiny lua shim, no scheduler
generated runtime is fifteen lines. vim.opt.runtimepath:prepend(...) for each plugin, plus after-dir handling. no event hooks, no opaque lazy loader, neovim startup stays fast and predictable.
commands you would expect
install, update, list, lock, shim, doctor, init. the names mean what they say. no DSL to learn.
plays nice with the rest
does not own lazy-loading. if you want it, layer that yourself in lua, or call into lazy.nvim alongside. pluvgo only generates a prepend(runtimepath) for each plugin.
one line, no neovim needed.
$ cargo install pluvgo
precompiled binaries ship via github releases at the next tag. requires git on PATH at install time, neovim only at runtime.