Neovim with native plugin manager

I have recently been stripping down my Neovim configuration. My goal is to rely more on the built-in features in Neovim. This seems to be a good strategy, as the number of improvements and features organically replaces the plugins I was already using: Neovim 0.10 introduced commenting functionality, native LSP support was added in version 0.11, and Neovim 0.12 provides a built-in plugin manager (vim.pack).

As of this writing, Neovim 0.12 has not been released. However, you can still install the last nightly version, which is what I have done to test vim.pack.

For the last year, I have managed my plugins without a plugin manager by cloning the git repositories for each plugin into the ~/.local/share/nvim/site/pack/plugins/start directory. It worked, but was not ideal. I used Ansible to install and update the plugins (via git pull), but this meant I had to re-run the Ansible playbook every now and then to update the plugins.

With vim.pack I can manage the plugins with a configuration file and API calls. This is what my configuration look likes:

$cat ~/.config/nvim/lua/plugins.lua

vim.pack.add({
  "https://github.com/ibhagwan/fzf-lua.git",
  "https://github.com/lewis6991/gitsigns.nvim.git",
  "https://github.com/pearofducks/ansible-vim.git",
  {
    src = "https://github.com/catppuccin/nvim.git",
    name = "catppuccin",
  },
})

require("catppuccin").setup({
  transparent_background = true,
})
vim.cmd.colorscheme("catppuccin")

You can create a custom command (PackUpdate, in my case) that updates the plugins:

$cat ~/.config/nvim/lua/commands.lua

vim.api.nvim_create_user_command("PackUpdate", function()
  require("vim.pack").update()
end, { desc = "Update all plugins using vim.pack" })

You can checkout the Neovim roadmap here. Version 0.12 is scheduled for release in February 14, 2026.


Posted

in

by

Tags:

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *