-
Notifications
You must be signed in to change notification settings - Fork 17
What about packspec (pkg.json)?
Some Neovim users / plugin authors campaign against luarocks adoption, because they believe it will be made redudundant by packspec/pkg.json.
Tip
Don't worry, you can still find their plugins on luarocks, thanks to the NURR.
To address some of those concerns:
-
pkg.json
and luarocks adoption are not mutually exclusive.
I see packspec (or whatever "wild west half-baked dependencies declaration format") as merely a high-leverage, low-effort way to start formally connecting the existing web of vim/nvim dependencies. It doesn't preclude a luarocks approach at all, it simply formalizes what already exists--assuming it gets any traction.
- From the packspec.org spec page:
If Nvim plugins can successfully use luarocks then
pkg.json
is redundant.pkg.json
is only useful for ecosystems that don’t have centralized package management.
-
Luarocks will likely never be bundled with Neovim.
- Instead, we will soon be bundling it with rocks.nvim.
- You will only need to bootstrap a temporary installation, which currently works well on most UNIX-like systems.
-
Packspec's main strength is its decentralized, "infectious" approach:
LuaRocks is a "centralized" approach that requires active participation from many plugins. In contrast,
pkg.json
is a decentralized, "infectious" approach that is useful at the "leaf nodes": it only requires the consumer to provide apkg.json
, the upstream dependencies don't need to be "compliant" or participate in any way.
-
This ends at transitive dependencies. If
-
plugin X
depends onlibrary Y
andlibrary Y
has any dependencies -
library Y
does not contain apkg.json
a packspec-compliant plugin manager will pull
library A
without its dependencies. There's a reason decentralized package management hasn't ever been a thing (save for nix flakes, which are experimental and have their own problems). -
-
Concerns about an initial lack of luarocks adoption can be (and have been) addressed by the fact that package maintainers and plugin authors don't need to be the same people.
-
Luarocks has the ability to build and package plugins. This is out of scope for
pkg.json
and will require out-of-spec fields. With this, we can precompile binary rocks so you don't have to. -
Luarocks is a full-fledged package manager that supports the coexistence of different versions of the same dependency.
-
Luarocks is the status quo for Lua packages outside of the Neovim ecosystem.
-
Packspec is in Alpha and incomplete.
- Its development is slow (almost stale at the moment).
- Its "What about Luarocks?" section is outdated.