Skip to content

feature: Include source URL in lazy-lock.json, just like in nvim-pack-lock.json #2138

@yutkat

Description

@yutkat

Did you check the docs?

  • I have read all the lazy.nvim docs

Is your feature request related to a problem? Please describe.

Currently, lazy-lock.json only stores branch and commit for each plugin. This means the lockfile alone is not self-contained - you cannot determine where a plugin comes from without also referencing your plugin spec configuration.

This becomes a problem when:

  • Reviewing the lockfile in a PR diff (you can't tell at a glance where a plugin comes from)
  • Sharing or auditing lockfiles across machines without the accompanying spec
  • Tools or scripts that want to process the lockfile independently

nvim-pack-lock.json is specified that way.
https://neovim.io/doc/user/pack/#vim.pack-lockfile

Describe the solution you'd like

Add a src field to each plugin entry in lazy-lock.json, storing the plugin's repository URL.

For example, the current format:

{
  "lazy.nvim": { "branch": "main", "commit": "abc1234" },
  "telescope.nvim": { "branch": "main", "commit": "def5678" }
}

Would become:

{
  "lazy.nvim": { "branch": "main", "commit": "abc1234", "src": "https://github.com/folke/lazy.nvim.git" },
  "telescope.nvim": { "branch": "main", "commit": "def5678", "src": "https://github.com/nvim-telescope/telescope.nvim.git" }
}

The src can be taken from the plugin's url field, or via Git.get_origin() as a fallback.

For reference, Neovim's built-in vim.pack lockfile (:h vim.pack-lockfile) already includes a src field for the same purpose, making the lockfile self-describing.

Describe alternatives you've considered

  • Store only owner name: e.g. "owner": "folke". More compact but less useful — doesn't help with non-GitHub sources or when the owner alone is ambiguous.
  • Store owner/repo shorthand: e.g. "source": "folke/lazy.nvim". Compact and matches the spec format users are already familiar with, but assumes GitHub.

Additional context

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions