A modern, intuitive package manager UI for Neovim that provides a unified interface for managing dependencies across different ecosystems.
Supports npm (Node.js), Cargo (Rust), RubyGems (Ruby), Mix (Elixir), Composer (PHP), Go modules, and Python package managers (pip, Poetry, Pipenv) through an elegant multi-panel interface with real-time search and version management.
Manage all your project dependencies directly within Neovim. Browse installed packages, discover new ones, and handle version management without switching contexts.
- π Multi-ecosystem support: Supports npm (Node.js), Cargo (Rust), RubyGems (Ruby), Mix (Elixir), Composer (PHP), Go modules, and Python package managers (pip, Poetry, Pipenv)
- π Real-time search: Search packages across registries with instant results
- π¦ Package management: Install, uninstall, and update packages with ease
- π Detailed information: View comprehensive package details, versions, and dependencies
- β¨οΈ Keyboard-driven: Full keyboard navigation with intuitive shortcuts
- π¨ Beautiful UI: Clean, modern floating window interface
- π Update notifications: See which installed packages have available updates
- π Version management: Browse and install specific package versions





The UI consists of five main components:
- Search: Find packages across registries
- Installed: View currently installed packages with update indicators
- Available: Browse search results and available packages
- Versions: Explore different versions of selected packages
- Details: Comprehensive package information including dependencies
- Neovim >= 0.7.0
curl
(for API requests)- For NPM projects:
npm
command available in PATH - For Cargo projects:
cargo
command available in PATH - For PHP projects:
composer
command available in PATH - For Go projects:
go
command available in PATH - For Python projects:
pip
,poetry
, orpipenv
commands available in PATH
Using lazy.nvim
{
"MonsieurTib/package-ui.nvim",
config = function()
require("package-ui").setup()
end,
}
Using packer.nvim
use {
"MonsieurTib/package-ui.nvim",
config = function()
require("package-ui").setup()
end,
}
Using vim-plug
Plug 'MonsieurTib/package-ui.nvim'
Then add to your init.lua
:
require("package-ui").setup()
:PackageUI
Or create a keybinding:
vim.keymap.set("n", "<leader>pu", "<cmd>PackageUI<cr>", { desc = "Open Package UI" })
Key | Action |
---|---|
Tab / Shift+Tab |
Navigate between components |
j / k |
Move up/down in lists |
Enter |
Select item / Navigate to versions |
i |
Install package |
u |
Uninstall package |
- Search for packages: Type in the search box to find packages
- Install packages: Press
Enter
to browse versions, then pressi
to install the selected version - View details: Select any package to see detailed information
- Browse versions: Press
Enter
on a package to see available versions - Uninstall packages: Navigate to an installed package (in the "Installed" section) and press
u
to remove it from your project - Update packages: Install newer versions of packages that show update indicators
require("package-ui").setup({
-- Configuration options will be added here as the plugin evolves
})
- Automatically detects
package.json
files - Manages dependencies and devDependencies
- Supports version ranges and specific versions
- Shows update notifications for outdated packages
- Automatically detects
Cargo.toml
files - Manages dependencies and dev-dependencies
- Integrates with crates.io registry
- Supports semantic versioning
- Automatically detects
Gemfile
files - Manages gem dependencies from Gemfile and Gemfile.lock
- Integrates with rubygems.org registry
- Supports semantic versioning and version constraints
- Automatically detects
mix.exs
files - Manages dependencies from mix.exs configuration
- Integrates with hex.pm registry
- Supports semantic versioning and version constraints
- Handles both runtime and development dependencies
- Automatically detects
composer.json
files - Manages dependencies and dev-dependencies
- Integrates with packagist.org registry
- Supports semantic versioning and version constraints
- Handles both require and require-dev dependencies
- Automatically detects
go.mod
files - Manages Go module dependencies
- Integrates with pkg.go.dev and module proxy
- Supports semantic versioning and version constraints
- Handles direct and indirect dependencies
- Automatically detects
requirements.txt
files - Manages Python packages from PyPI
- Supports version specifications and constraints
- Handles both runtime and development dependencies
- Automatically detects
pyproject.toml
files with Poetry configuration - Manages dependencies through Poetry's dependency resolver
- Integrates with PyPI registry
- Supports dependency groups and development dependencies
- Automatically detects
Pipfile
files - Manages dependencies through Pipenv's virtual environment system
- Integrates with PyPI registry
- Supports both packages and dev-packages sections
Contributions are welcome! Here are some ways you can help:
- Report bugs: Create issues for any problems you encounter
- Request features: Suggest new package managers or UI improvements
- Submit PRs: Fix bugs or implement new features
- Documentation: Help improve documentation and examples
To add support for a new package manager:
- Create a new service file in
lua/package-ui/services/
- Implement the required service interface methods
- Add detection logic for the package manager's manifest files
- Test thoroughly with real projects
This project is licensed under the MIT License
- Inspired by the need for better package management UX in Neovim
- Built with the Neovim Lua API
- Uses public package registry APIs (npmjs.com, crates.io)
Made with β€οΈ for the Neovim community