Skip to content

Releases: zuqini/zpack.nvim

v1.2.0 — public introspection API + opts merging refactor

13 Apr 20:28
d3cc74d

Choose a tag to compare

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

09 Apr 06:54
7ea1529

Choose a tag to compare

What's Changed

  • fix: forward ev.data, validate buffer, chain dependencies, and dedupl… by @zuqini in #10

Full Changelog: v1.1.1...v1.1.2

v1.1.1 - bug-fix/stability

09 Apr 00:07
a782b9d

Choose a tag to compare

What's Changed

  • fix: lazy-loaded plugins not fully activating by @zuqini in #8

Full Changelog: v1.1.0...v1.1.1

v1.1.0 — ZRestore

08 Apr 09:33

Choose a tag to compare

New

  • :ZRestore [plugin] — restore plugins to the state recorded in the native lockfile. Wraps vim.pack.update() with target='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

06 Apr 03:43

Choose a tag to compare

🎉 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.

zpack.nvim

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 triggersevent, cmd, keys, ft, priority, and cond/enabled controls
  • Build hooks — run shell commands or Lua functions on install/update
  • Plugin lifecycle commands:ZUpdate, :ZClean, :ZBuild, :ZLoad, :ZDelete with 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 fieldssem_version, branch, tag, commit, dir, url all 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 of BufReadPre, BufReadPost, and FileType events for proper LSP/Treesitter attachment
  • Event patterns — inline patterns ("BufReadPre *.rs") and structured EventSpec with multiple patterns
  • Plugin lifecycle commands:ZBuild, :ZLoad, :ZDelete (with ! for batch operations) joined the original :ZUpdate and :ZClean
  • Global defaultsdefaults.confirm and defaults.cond for all plugins
  • vim_loader integrationperformance.vim_loader for faster startup (enabled by default)
  • Configurable command prefix — via cmd_prefix option
  • init hook — runs before plugin load for plugins that need early setup
  • module field — disable module-based lazy loading per-plugin
  • enabled vs cond distinctionenabled skips vim.pack.add entirely; cond skips loading after install
  • main field — explicit main module override when auto-detection fails
  • opts as functionopts = function(plugin, opts) return {} end
  • Plugin data in hooks — all lifecycle hooks receive a zpack.Plugin object with path and spec
  • Snacks.nvim compatibility guide — documented workaround for dashboard startup section
  • Community extensionzshow.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

  • @Yuhf7 made their first contribution in #1

Full Changelog: https://github.com/zuqini/zpack.nvim/commits/v1.0.0