Working across multiple projects with different package managers?
You can use xpm instead of npm/yarn/pnpm/bun/deno (and even pip/poetry/uv).
Think of xpm as your universal translator for package managers. When you run xpm, it figures out which package manager your project uses, ensures your dependencies are up-to-date, and runs the appropriate command. It's like having muscle memory that works everywhere.
For example, when you run xpm dev in a project:
xpmdetects the package manager- it auto-installs dependencies if necessary (compares lockfile hash)
- runs
npm run dev/yarn dev/pnpm dev/bun dev/deno task dev
npm install -g @assistant-ui/xpm- 🔍 Auto-detects your package manager from lockfiles or package.json
- ⚡ Dependency sync - auto-installs dependencies when lockfile changes
- 🎯 Unified commands - identical commands across all package managers
- 📦 Workspace aware - correctly handles monorepo operations
- 🏃 Runs from anywhere - works in project subdirectories
- 🌍 Multi-language - supports JavaScript and Python ecosystems
xpm # Install dependencies
xpm add react # Add a package
xpm dev # Run a script
xpm add -g turbo # Installs global dependency
xpx prettier # Download and run from the registryxpm defaults to npm for global installs. Configure this with a config file at ~/.config/xpm/config.json or ~/.xpmrc.
Set the default package manager for new projects (when no lockfile or package.json packageManager field is found):
xpm set-config default-package-manager <npm|yarn|pnpm|bun|deno>Environment variable (takes precedence):
export XPM_DEFAULT_PM=<npm|yarn|pnpm|bun|deno>Set which package manager to use for global installs (-g flag):
xpm set-config global-package-manager <npm|yarn|pnpm|bun|deno>Environment variable (takes precedence):
export XPM_GLOBAL_PM=<npm|yarn|pnpm|bun|deno>Default: npm
- Environment variables (
XPM_DEFAULT_PM,XPM_GLOBAL_PM) - Config file (
~/.config/xpm/config.jsonor~/.xpmrc) - Default fallback (
npm)
While xpm is primarily designed for JavaScript projects, it also supports Python package managers for a unified development experience across languages.
- pip - Detects
requirements.txt - pipenv - Detects
PipfileandPipfile.lock - poetry - Detects
pyproject.tomlandpoetry.lock - uv - Detects
uv.lock - conda - Detects
environment.yml
# In a Python project
xpm install # Runs pip/pipenv/poetry install
xpm install flask # Adds flask package
xpm remove flask # Removes flask package
# Poetry project
xpm install --dev pytest # Adds pytest as dev dependency
# UV project
xpm sync # Syncs dependencies
xpm update # Updates lockfile- Lockfiles - Most specific (e.g.,
poetry.lock→ Poetry) - Package files - Project configuration (e.g.,
Pipfile→ Pipenv) - Fallback - Uses pip if
requirements.txtexists
Note: Python global installs (-g) are not supported.
- pnpm patch support - Support for pnpm patch files and patch packages
- Auto-install package managers - Prompt user to install missing package managers (for all supported package managers)
MIT