back

State of vim.pack

2025-11-09

About

As of November 2025, version 0.12.0 is still a prerelease development build

I'll share some of my thoughts and examples on vim.pack and whether it would be worth doing the switch already. This is primarily just an introductory of basic usage of plugins and of my experience with vim.pack. If you notice any inconsistencies or problems in this article, feel free to contact me with recommendations.

My full neovim config can be found at github.com/proxcb/nvim, It contains a barebone (at the time of this post) configuration for development which is easy to expand on, I'm still primarily using Helix so I will be adding to it over time.

Examples

Documentation can be found with :help vim.pack

Installing plugins is very straightforward:

vim.pack.add({
  -- Install plugin
  "https://github.com/coolplugin-org/coolplugin",

  -- Or with a table
  { src = "https://github.com/windwp/nvim-autopairs" },
  { src = "https://github.com/L3MON4D3/LuaSnip" },
  { src = "https://github.com/Saghen/blink.cmp" }
})

You can do more with this, such as defining a version or a name but that is irrelevant for me.

Lazy loading can be done as well:

-- load immediately
-- require("nvim-autopairs").setup({})

vim.api.nvim_create_autocmd("InsertEnter", {
  callback = function()
    vim.cmd("packadd nvim-autopairs") 
    require("nvim-autopairs").setup({})
  end,
})

Configuring an LSP

File structure:

nvim/
├─ lua/
│  └─ plugins/
│     └─ lsp.lua
└─ init.lua

lsp.lua using mason:

vim.pack.add{
  { src = 'https://github.com/neovim/nvim-lspconfig' },
  { src = 'https://github.com/mason-org/mason.nvim' },
  { src = 'https://github.com/mason-org/mason-lspconfig.nvim' },
  { src = 'https://github.com/WhoIsSethDaniel/mason-tool-installer.nvim' },
}

require('mason').setup()
require('mason-lspconfig').setup()
require('mason-tool-installer').setup({
    -- Define languages
    ensure_installed = {
        "lua_ls",
        "clangd",
        "pyright"
    }
})

And requiring lsp.lua within init.lua

require('plugins.lsp')

Ease of use

Primarily why I wanted to give vim.pack a try is because I wanted something native and fairly straightforward to use. vim.pack has definitely succeeded with that for me even if it is a prerelease build. The roadmap for neovim does show that the 0.12 release will be when vim.pack goes on the main development branch. At the moment we are in 0.11 so it shouldn't be too long of a wait.

I'd suggest anybody to give vim.pack a try if they are not fully content with their current plugin manager.

As I said before there's fairly good documentation already on vim.pack if you run :help vim.pack on the prerelease build of neovim.