Releases: zuqini/zpack.nvim
v2.0.0
⚠ BREAKING CHANGES
2.0.0 removes every previously deprecated setup() option, the zpack.add()
function, and the legacy :Z* commands. Update your config before upgrading:
| Removed in 2.0 | Replacement |
|---|---|
setup({ confirm = … }) |
setup({ defaults = { confirm = … } }) |
setup({ disable_vim_loader = true }) |
setup({ performance = { vim_loader = false } }) |
setup({ plugins_dir = 'dir' }) |
a { import = 'dir' } entry in your spec list |
setup({ cmd_prefix = 'Z' }) |
setup({ cmd_name = 'Z' }) |
legacy :ZUpdate / :ZClean / :ZDelete / :ZRestore / :ZLoad / :ZBuild |
:ZPack update / clean / delete / restore / load / build (or :Z … with cmd_name = 'Z') |
setup({ auto_import = … }) |
removed — was already a no-op in 1.x |
require('zpack').add(…) |
removed — was already a no-op in 1.x |
See Upgrading from 1.x to 2.0 for the full migration guide.
Features
- adopt Neovim plugin best practices (#23) (2f45de6)
- close lazy.nvim parity gaps across lazy triggers (#27) (9ed473a)
- lazy-parity: add defaults.lazy and defaults.version (#29) (d52f0dd)
- lazy.nvim spec parity (pin/optional/dev/specs/build/reload/sync) (#28) (b6f82cd)
- remove deprecated features for 2.0.0 (#25) (4681a74)
- support bang on :ZPack update/restore; document 0.13 native commands (4f9b312)
- sync state with vim.pack via PackChanged on plugin removal (0b65048)
Bug Fixes
- address PR #21/#22 review follow-ups (c9c6c61)
- command-specific legacy command deprecation notice (8970a43)
- correct bang placement in usage hints; always warn on legacy commands (2f4bf35)
- guard non-number priority and non-string import field (af3f109)
- guard non-string src/url/dir in normalize_source (b127f63)
- harden lazy-load path against operator-pending loss + throw-leaks (#26) (c6079d5)
- preserve typeahead order on multi-key sequences (6b99fcb)
Code Refactoring
- :ZPack with subcommands (d197fc6)
v1.2.1
What's Changed
- docs: add migration notes for install feedback and passive libraries on by @zuqini in #14
- docs: split general tips from lazy.nvim migration notes by @zuqini in #15
- docs: rename tips subsection to gotchas by @zuqini in #16
- feat: forward expr/silent/noremap/replace_keycodes on KeySpec by @zuqini in #19
Full Changelog: v1.2.0...v1.2.1
v1.2.0 — public introspection API + opts merging refactor
What's Changed
- feat: add public introspection API for third-party tooling by @zuqini in #12
- refactor: collapse opts merging to single authoritative path by @zuqini in #13
Full Changelog: v1.1.2...v1.1.3
v1.1.2 — lazy-loading event re-firing bug fixes + polish
What's Changed
Full Changelog: v1.1.1...v1.1.2
v1.1.1 - bug-fix/stability
What's Changed
Full Changelog: v1.1.0...v1.1.1
v1.1.0 — ZRestore
New
:ZRestore [plugin]— restore plugins to the state recorded in the native lockfile. Wrapsvim.pack.update()withtarget='lockfile'. Useful for syncing plugins across machines or reverting after an update.
Commits
- feat: add ZRestore command to restore plugins from lockfile by @zuqini in #4
- docs: split README into separate docs for examples, tips, and migration by @zuqini in #5
Full Changelog: v1.0.0...v1.1.0
v1.0.0 — Stable Release for Neovim 0.12
🎉 zpack.nvim v1.0.0
The first stable release of zpack.nvim, timed with the official release of Neovim 0.12 and vim.pack.
zpack is a thin layer on top of Neovim's native vim.pack, adding lazy-loading capabilities and support for the widely adopted lazy.nvim-like declarative spec — so you can keep using the plugin specs you already know, powered entirely by what's built in.
Highlights
- 100% native — installs and manages plugins (including zpack itself) through
vim.pack - Near drop-in from lazy.nvim — use the same declarative specs plugin authors already provide
- Lazy-loading triggers —
event,cmd,keys,ft,priority, andcond/enabledcontrols - Build hooks — run shell commands or Lua functions on install/update
- Plugin lifecycle commands —
:ZUpdate,:ZClean,:ZBuild,:ZLoad,:ZDeletewith tab completion - Spec imports — organize plugins across files under
lua/plugins/just like lazy.nvim - Dependency resolution — dependencies load automatically before their parent
- Version pinning — branches, tags, commits, and semver ranges via
vim.version.range() - lazy.nvim compatibility fields —
sem_version,branch,tag,commit,dir,urlall map to native equivalents - Configurable command prefix — rename
:Z*commands to whatever you prefer - Tested — CI test suite via GitHub Actions
What's New Since the Initial Announcement
Since the original Reddit post (~4 months ago), zpack has matured significantly:
- FileType lazy-loading (
ft) — with automatic re-triggering ofBufReadPre,BufReadPost, andFileTypeevents for proper LSP/Treesitter attachment - Event patterns — inline patterns (
"BufReadPre *.rs") and structuredEventSpecwith multiple patterns - Plugin lifecycle commands —
:ZBuild,:ZLoad,:ZDelete(with!for batch operations) joined the original:ZUpdateand:ZClean - Global defaults —
defaults.confirmanddefaults.condfor all plugins vim_loaderintegration —performance.vim_loaderfor faster startup (enabled by default)- Configurable command prefix — via
cmd_prefixoption inithook — runs before plugin load for plugins that need early setupmodulefield — disable module-based lazy loading per-pluginenabledvsconddistinction —enabledskipsvim.pack.addentirely;condskips loading after installmainfield — explicit main module override when auto-detection failsoptsas function —opts = function(plugin, opts) return {} end- Plugin data in hooks — all lifecycle hooks receive a
zpack.Pluginobject withpathandspec - Snacks.nvim compatibility guide — documented workaround for dashboard startup section
- Community extension — zshow.nvim by @sairyy provides a floating window UI for viewing installed plugins
- Comprehensive test suite — automated testing via GitHub Actions
Getting Started
-- Bootstrap with vim.pack
vim.pack.add({ 'https://github.com/zuqini/zpack.nvim' })
vim.g.mapleader = " "
require('zpack').setup()Create plugin specs in lua/plugins/ — see the README for examples and the migration guide for lazy.nvim users.
Requirements
- Neovim 0.12.0+
Thank You
Thanks to everyone who tried zpack and gave feedback since the initial announcement. Special thanks to the early adopters and to @sairyy for building the first community extension.
Full Changelog: https://github.com/zuqini/zpack.nvim/commits/v1.0.0
New Contributors
Full Changelog: https://github.com/zuqini/zpack.nvim/commits/v1.0.0