# packer.nvim — Plugin Manager for Neovim with Lazy Loading > packer.nvim is a use-package inspired plugin manager for Neovim written in Lua, supporting lazy loading, conditional plugins, Luarocks dependencies, and compiled startup optimization. ## Install Save in your project root: # packer.nvim — Plugin Manager for Neovim with Lazy Loading ## Quick Use ```bash git clone --depth 1 https://github.com/wbthomason/packer.nvim ~/.local/share/nvim/site/pack/packer/start/packer.nvim # In init.lua: require('packer').startup(function(use) use 'wbthomason/packer.nvim' end) # Run :PackerSync in Neovim ``` ## Introduction packer.nvim brought modern package management to Neovim with first-class Lua support. Inspired by Emacs's use-package, it lets you declare plugins with fine-grained loading conditions and compiles your configuration for fast startup times. ## What packer.nvim Does - Installs, updates, and removes Neovim plugins from Git repositories - Supports lazy loading by command, filetype, event, or key mapping - Compiles plugin specifications into a loader file for faster startup - Manages Luarocks dependencies alongside Vim plugins - Provides a built-in status UI showing install and update progress ## Architecture Overview packer.nvim uses Neovim's native package system (pack/*/start and pack/*/opt) as its storage backend. Plugins declared with `use` are cloned into the appropriate directory. The `compile` step generates a Lua file that pre-computes the load order and lazy-load triggers, eliminating runtime parsing overhead. ## Self-Hosting & Configuration - Clone packer.nvim into the Neovim packages directory - Define plugins in a Lua file using `require('packer').startup()` - Run `:PackerCompile` after changing your plugin specification - Set `compile_path` to control where the compiled loader is written - Use `snapshot` and `rollback` commands to pin and restore plugin versions ## Key Features - Native Lua configuration aligned with modern Neovim practices - Compiled loader for sub-millisecond startup overhead - Conditional and lazy loading with multiple trigger types - Luarocks integration for native Lua library dependencies - Plugin snapshot and rollback for reproducible setups ## Comparison with Similar Tools - **lazy.nvim** — Successor with automatic lazy loading and a richer UI; packer requires explicit lazy declarations - **vim-plug** — Vimscript-based with parallel installs; packer.nvim is Lua-native for Neovim - **Pathogen** — Filesystem-only with no lazy loading; packer adds dependency resolution and compilation - **dein.vim** — Supports both Vim and Neovim; packer.nvim targets Neovim exclusively ## FAQ **Q: Is packer.nvim still actively maintained?** A: The project is feature-complete and in maintenance mode. Many users have migrated to lazy.nvim for continued development. **Q: What does PackerCompile do?** A: It generates a compiled Lua file that pre-resolves load order and lazy-load triggers, reducing startup time. **Q: Can I use packer.nvim with init.vim instead of init.lua?** A: Yes. Wrap your Lua configuration in a `lua << EOF` block inside init.vim. **Q: How do I migrate from packer.nvim to lazy.nvim?** A: lazy.nvim provides a migration guide. The plugin spec syntax is similar but uses a table-based format instead of function calls. ## Sources - https://github.com/wbthomason/packer.nvim - https://github.com/wbthomason/packer.nvim#quickstart --- Source: https://tokrepo.com/en/workflows/asset-dd3bdd5a Author: AI Open Source