WindowsmacOSLinux

Where Does lazy.nvim Store Plugins?

lazy.nvim keeps plugins in a lazy folder under Neovim data plus a lockfile in config. The lockfile pins every plugin commit.

Last updated

lazy.nvim splits plugin state across two places with different jobs: the lazy folder under Neovim data holds the actual plugin checkouts, while a lockfile in the config records the exact commit of each. Config declares intent, the lockfile pins reality, and the data folder holds the bytes.

That split explains every common confusion. New machine with only config syncs latest versions, while config plus lockfile reproduces the exact set. Cache and state siblings beside lazy hold updated metadata. Commit the lockfile with dotfiles and ignore the data folder.

Where Neovim stores this, by platform

Windows
%LOCALAPPDATA%\nvim-data\lazy

Plugin checkouts here plus the lockfile in config. Sync the lockfile across machines, never the data folder. Restore returns to pinned commits.

macOS
~/.local/share/nvim/lazy

Same split as other platforms. The lockfile lives beside init files in config while checkouts stay in data.

Linux
~/.local/share/nvim/lazy

Identical layout under XDG data home. State and cache siblings hold update metadata worth ignoring in backups.

Frequently asked questions

How do I roll plugins back to the locked versions?

Open the plugin manager UI and run restore. The lockfile records exact commits, so restore returns every plugin to the pinned state. Update rewrites the lockfile to newest versions instead.

How do I fully remove a plugin?

Delete the plugin's folder under lazy and remove its spec line. Orphan folders from removed specs sit inert but waste disk. The clean command lists them for removal.

Notice an outdated path? Let us know.