Working across multiple projects with different package managers?
You can use xpm
instead of npm
/yarn
/pnpm
/bun
(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:
xpm
detects the package manager- it auto-installs dependencies if necessary (compares lockfile hash)
- runs
npm run dev
/yarn dev
/pnpm dev
/bun 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 registry
xpm 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>
Environment variable (takes precedence):
export XPM_DEFAULT_PM=<npm|yarn|pnpm|bun>
Set which package manager to use for global installs (-g
flag):
xpm set-config global-package-manager <npm|yarn|pnpm|bun>
Environment variable (takes precedence):
export XPM_GLOBAL_PM=<npm|yarn|pnpm|bun>
Default: npm
- Environment variables (
XPM_DEFAULT_PM
,XPM_GLOBAL_PM
) - Config file (
~/.config/xpm/config.json
or~/.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
Pipfile
andPipfile.lock
- poetry - Detects
pyproject.toml
andpoetry.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.txt
exists
Note: Python global installs (-g
) are not supported.
MIT