8000 zpack.nvim/CHANGELOG.md at main · zuqini/zpack.nvim · GitHub
[go: up one dir, main page]

Skip to content
8000

Latest commit

 

History

History
181 lines (136 loc) · 21.4 KB

CHANGELOG.md

File metadata and controls

181 lines (136 loc) · 21.4 KB

Changelog

3.0.0 (2026-11-06)

⚠ BREAKING CHANGES

  • merge: a plugin's specs merge in import order, as in lazy.nvim, so a later spec under dependencies overrides a top-level one and its function opts sees the top-level opts
  • module_loader: a require loads a lazy plugin only when the plugin holds the module's file, as in lazy.nvim; one with only the top-level name stays lazy
  • commands: :ZPack clean and :ZPack sync list what they would delete and ask, defaulting to No; ! skips the prompt
  • import: a nil in a spec list no longer ends the list, so what follows it installs
  • lazy: a plugin whose function-form trigger throws stays lazy instead of loading at startup
  • module_loader: remove the unreachable profiler; setup({ profiling = ... }) is ignored, and print_profile and get_profile are gone
  • module_loader: require no longer loads a plugin whose name resembles a module it doesn't provide; a plugin registering a module from plugin/ needs a trigger of its own
  • keys: two strings in keys are two keys unless the second can only be an rhs, so { '<leader>d', 'dd' } needs a field or nesting to stay one key
  • keys: a later spec's key replaces an earlier one
  • import: a bare name nothing defines is skipped rather than installed
  • merge: a disabled dependency no longer disables the plugin listing it
  • merge: the last spec to set enabled or cond wins, instead of any false
  • lazy: an event with no real event in it, such as LazyFile, leaves the plugin eager with a warning
  • utils: a version string git can't take as a ref, such as *, is a semver range
  • import: spec modules import in module name order
  • version: version fields follow lazy.nvim's priority: commit, tag, version, sem_version, branch, default

Features

  • close lazy.nvim parity gaps in spec lists, keys, triggers and bare names (85ba638)
  • import: import specs from a plugin's own modules (85ba638)
  • merge: support opts_extend (#46) (b23ed1f), closes #45

Bug Fixes

  • cmd: keep a numeric first argument on a lazy command's first use (936649e)
  • commands: :ZPack clean and :ZPack sync list what they would delete and ask, defaulting to No; ! skips the prompt (936649e)
  • commands: :ZPack clean leaves a plugin active this session for next time rather than raising (936649e)
  • ft: a lazy ft plugin's ftdetect/ is sourced once, as in lazy.nvim, so one that runs set filetype= fires FileType once per file (bfd84e3)
  • hooks: a module brought in by an in-session update is found without a restart (936649e)
  • hooks: removing a plugin drops its command and key proxies, so its command gives E492 and a command it shared with another lazy plugin works for that plugin; an init removing a plugin no longer re-fires its event or crashes setup() when the plugin has its own init (bfd84e3)
  • import: a nil in a spec list no longer ends the list, so what follows it installs (936649e)
  • import: a bare name nothing defines is skipped rather than installed (85ba638)
  • import: a bare string in a spec list installs as a plugin, rather than being reported as invalid and skipped (936649e)
  • import: an import with no plugin of its own finds its module in a listed plugin named after it, installing it if missing, on the first start (936649e)
  • import: spec modules import in module name order (85ba638)
  • import: take a plugin's lua/ off package.path after startup (936649e)
  • import: warn when an import finds no specs (85ba638)
  • keys: a key keeps its proxy while a plugin listing it is pending, as in lazy.nvim, so another plugin's keys on the same lhs don't stop it loading (bfd84e3)
  • keys: a later spec's key replaces an earlier one (85ba638)
  • keys: a plugin drops its key proxies as it loads, as in lazy.nvim, so a plugin that maps a key only when it's free (flash.nvim's ; and ,) gets it (bfd84e3)
  • keys: two strings in keys are two keys unless the second can only be an rhs, so { '<leader>d', 'dd' } needs a field or nesting to stay one key (85ba638)
  • lazy: a plugin whose function-form trigger throws stays lazy instead of loading at startup (936649e)
  • lazy: an event with no real event in it, such as LazyFile, leaves the plugin eager with a warning (85ba638)
  • lazy: no proxy over what a function-form trigger already loaded (936649e)
  • lazy: set up triggers in a session that installs a plugin (85ba638)
  • loader: a function-form opts that throws is reported once and the plugin still loads without its config, as in lazy.nvim, instead of staying pending (bfd84e3)
  • loader: a plugin already on 'runtimepath' that loads after a config turned detection on gets its ftdetect/ once, not twice (bfd84e3)
  • loader: a require or build after startup sources plugin/, and a failing dependency doesn't stop its parent (85ba638)
  • loader: report a plugin/ script's error without failing the load (936649e)
  • loader: source a plugin's dependencies before its plugin/, in the order they're listed (85ba638)
  • merge: a disabled dependency no longer disables the plugin listing it (85ba638)
  • merge: a plugin's specs merge in import order, as in lazy.nvim, so a later spec under dependencies overrides a top-level one and its function opts sees the top-level opts (bfd84e3)
  • merge: a table listed at the top level and under a lazy parent's dependencies loads eagerly (#49) (85ba638)
  • merge: clear opts keys set to vim.NIL (#47) (3bd8cdf)
  • merge: drop a removed plugin's specs before deriving what stays (#49) (871104e)
  • merge: plugins under an optional or disabled parent's specs are dropped (#49) (85ba638)
  • merge: removals resting on other removals no longer depend on import order (936649e)
  • merge: the last spec to set enabled or cond wins, instead of any false (85ba638)
  • module_loader: require no longer loads a plugin whose name resembles a module it doesn't provide; a plugin registering a module from plugin/ needs a trigger of its own (936649e)
  • module_loader: a require loads a lazy plugin only when the plugin holds the module's file, as in lazy.nvim; one with only the top-level name stays lazy (241c9ba)
  • module_loader: a later require of a module whose load threw raises that error instead of returning true (241c9ba)
  • module_loader: a slash-form require('lspconfig/util') loads the pending plugin holding the module (241c9ba)
  • module_loader: load the plugin holding a module in a shared namespace, including a compiled one (936649e)
  • module_loader: when several pending plugins hold a module, the one named like it loads, as in lazy.nvim (241c9ba)
  • pack: a soft version installs from the default branch after another plugin's clone failed (936649e)
  • pack: read a tag as vim.pack does when deciding if one fits (936649e)
  • pack: restore a locked plugin at its revision when no tag fits its soft version (936649e)
  • pack: say when a plugin needs a restart to reach a tag or to update (936649e)
  • runtime: zpack escapes the path of each file it sources itself, so a # or % in the data path no longer fails with E194/E484 and loses the file (bfd84e3)
  • setup: setup() with no spec and no lua/plugins, or one holding only dotfiles, is quiet, as in 2.x (936649e)
  • setup: setup()'s options no longer count as spec fields, so specs written beside them all install (936649e)
  • setup: a plugin vim.pack can't add no longer aborts setup() (85ba638)
  • setup: a single spec with no array part, such as { import = ..., defaults = ... }, is read as a spec rather than ignored for the default import (936649e)
  • setup: a string is the module to import, in setup('custom.plugins') and in spec, rather than reported and replaced by the default import (936649e)
  • setup: any other setup() argument that isn't a table is reported, and the default import goes on (936649e)
  • setup: source plugin/ when setup() runs after startup (85ba638)
  • startup: :colorscheme loads the pending plugin holding the scheme first, as in lazy.nvim, so a Vim colors file can call its plugin's autoload/ from an init or for a lazy plugin, and an eager scheme plugin set from an earlier plugin's config (themery.nvim's restore) gets its own config first (bfd84e3)
  • startup: a require from an init loads the eager plugin holding the module, as in lazy.nvim, instead of failing with "module not found" (bfd84e3)
  • startup: a lazy plugin's cmd, event, ft and keys are set up before the inits, as in lazy.nvim, so an init running one loads the plugin (bfd84e3)
  • startup: an eager plugin's ftdetect/ runs when filetype detection is on before setup(), as in lazy.nvim, so LazyVim's vimtex opens a .cls as tex (bfd84e3)
  • startup: run an eager plugin's config once when a lazy dependent loads it (936649e)
  • utils: a version or tag of the wrong type is dropped with a warning instead of failing every plugin (936649e)
  • utils: a version string git can't take as a ref, such as *, is a semver range (85ba638)
  • validate: warn about a sem_version that isn't a semver range, and fall through to branch and defaults.version (936649e)
  • version: a semver string no tag fits follows the default branch (85ba638)
  • version: version fields follow lazy.nvim's priority: commit, tag, version, sem_version, branch, default (85ba638)

Performance Improvements

  • speed up startup with many plugins (#50) (2966b92)
  • stop tracing zpack's startup code (936649e)

Code Refactoring

  • module_loader: remove the unreachable profiler; setup({ profiling = ... }) is ignored, and print_profile and get_profile are gone (936649e)

2.0.4 (2026-09-25)

Bug Fixes

  • utils: allow non-GitHub URLs while still expanding the short form GitHub owner/repo paths (#42) (a6fdbf5)
  • utils: only pass git URLs through [1]; flag local paths in validate (#44) (451a0bb), closes #42

2.0.3 (2026-09-22)

Bug Fixes

  • merge: fold specs deriving the same plugin name, matching lazy.nvim (#40) (892385a), closes #39

2.0.2 (2026-08-20)

Bug Fixes

  • import: explicit src/url/dir overrides [1] shorthand, matching lazy.nvim (#36) (7b40442)

2.0.1 (2026-08-02)

Bug Fixes

  • import: added support of importing spec-files directly, as it was in lazy.nvim (#30) (0b61779)

2.0.0 (2026-06-03)

⚠ 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)
0