home-lang/pantry
A performant, universal package manager that just works.
A modern dependency manager for your system and your projects. Effortlessly manage development tools, runtime environments, and project dependencies with automatic environment isolation. Think Homebrew meets project-aware dependency management.
pantry is a comprehensive dependency management solution that bridges the gap between system-wide package management and project-specific environments. Whether you're setting up a new development machine, managing system tools, or working on projects with specific dependency requirements, pantry provides a unified interface for all your dependency needs.
System Management:
Project Management:
At its core, pantry leverages pkgx's powerful package ecosystem, the Pantry, while adding intelligent management, environment isolation, and developer-friendly workflows.
Learn more in the docs: Why pantry, Quick Start.
pantry transforms how you manage dependencies across your entire development workflow:
/usr/local for system-wide access or ~/.local for user-specific installs (pkgm compatible)deps.yaml, dependencies.yaml, package.json, pyproject.toml, and other project filesModern development requires managing dependencies at multiple levels - from system tools to project-specific requirements. Traditional approaches fall short:
Traditional Package Managers (Homebrew, apt, etc.):
Manual Dependency Management:
pantry's Solution:
Read more about why we created pantry
pantry includes several utility scripts for development and maintenance:
# Get latest PHP versions from ts-pkgx registry
bun scripts/get-php-versions.ts
# Check if there are new PHP versions available
bun scripts/check-php-updates.ts
# These scripts:
# - Fetch latest PHP versions dynamically
# - Generates configuration descriptions
# - Check if rebuilds are needed
# - Output JSON for GitHub Actions
# - Create markdown tables for documentation
Get started with pantry through your preferred package manager:
# Install with Bun (recommended)
bun add -g @stacksjs/pantry
# Or with npm
npm install -g @stacksjs/pantry
# Or with yarn
yarn global add @stacksjs/pantry
# Or with pnpm
pnpm add -g @stacksjs/pantry
See Installation Guide for more options.
pantry is designed to handle both system setup and project management seamlessly! 🎯
Bootstrap your development environment with everything you need:
# Complete system setup - installs to /usr/local by default
./pantry bootstrap
# Or for a custom installation path
./pantry bootstrap --path ~/.local --verbose
# Skip specific components if needed
./pantry bootstrap --skip-bun --skip-shell-integration
The bootstrap command sets up your entire development foundation:
Install and manage development tools across your entire system:
# Install essential development tools system-wide
pantry install node python go rust
# Install specific versions
pantry install node@22 [email protected]
# Install to /usr/local (default system-wide location)
pantry install typescript --system
# Or specify any custom path
pantry install docker --path /opt/tools
# Use shorthand for quick installs
pantry i node@22 [email protected]
Smart Installation Behavior:
/usr/local if writable, otherwise ~/.local--system for explicit system installation (same as default)--path <directory> for any locationpantry automatically manages project-specific dependencies:
# Create a project with dependencies
echo "dependencies:
- node@22
- [email protected]
- [email protected]" > dependencies.yaml
# Environment activates automatically when you enter the directory
cd my-project
# → ✅ Environment activated for /path/to/my-project
# Tools are available in project context
node --version # Uses project-specific Node.js
tsc --version # Uses project-specific TypeScript
# Leave project - environment deactivates automatically
cd ..
# → 🔄 Environment deactivated
Learn more: Environment Management, Package Management, Configuration, FAQ.
Supported Project Files:
deps.yaml / deps.ymldependencies.yaml / dependencies.ymlpantry.yaml / pantry.ymlpkgx.yaml / pkgx.ymlpackage.json (Node.js projects)pyproject.toml (Python projects)Cargo.toml (Rust projects)Manage your project environments with human-readable identifiers:
# List all development environments
pantry env:list
# Inspect a specific environment
pantry env:inspect my-project_1a2b3c4d-d89abc12
# Clean up old or failed environments
pantry env:clean --dry-run
# Remove a specific environment
pantry env:remove old-project_5e6f7g8h --force
Environment Hash Format: {project-name}_{8-char-hex}-d{8-char-dep-hash}
final-project_7db6cf06-d89abc12 - Project path hash plus dependency fingerprintworking-test_208a31ec-d1029a7b - Human-readable with version-aware suffixmy-app_1a2b3c4d-deadbeef - Collision-resistant, version-switching on cdRemove packages and manage your installation:
# Remove specific system tools
pantry remove node python
# Remove project-specific versions (using uninstall command)
pantry uninstall node@22
# See what would be removed
pantry uninstall python --dry-run
# Complete system cleanup
pantry clean --force
Manage development services with ease:
# Start essential development services
pantry service start postgres redis
# Start multiple services at once
pantry service start postgres redis nginx prometheus
# Check service status
pantry service status postgres
pantry service list
# Stop services when done
pantry service stop postgres redis
# Enable auto-start for essential services
pantry service enable postgres redis
Available Services (31+):
Add services to your dependency file to auto-start when the project environment activates:
# deps.yaml
dependencies:
- node@22
- postgresql@15
services:
enabled: true
autoStart:
- postgres
- redis
Customize database credentials for all database services:
# Configure database credentials globally
export pantry_DB_USERNAME="myuser"
export pantry_DB_PASSWORD="mypassword"
export pantry_DB_AUTH_METHOD="md5" # PostgreSQL: trust|md5|scram-sha-256
# Start databases with custom credentials
pantry service start postgres mysql
# Creates project-specific databases with your configured credentials
Default Credentials (secure for development):
rootpasswordtrust (PostgreSQL)Configuration Options:
pantry_DB_USERNAME, pantry_DB_PASSWORD, pantry_DB_AUTH_METHODpantry.config.ts → services.database# Create executable shims
pantry shim node@22 [email protected]
# List all installed packages
pantry list
# Update packages
pantry update node python --latest
# Cache management
pantry cache:stats # Show cache statistics
pantry cache:clean # Clean old cached packages
pantry cache:clear # Clear all cache
# Install additional tools
pantry bootstrap # Bootstrap essential tools
pantry bun # Install Bun runtime
Customize pantry's behavior for your system and projects:
import type { pantryConfig } from '@stacksjs/pantry'
const config: pantryConfig = {
// System-wide installation preferences
installationPath: '/usr/local', // Default system location
sudoPassword: '', // Password for sudo operations, can be loaded from `SUDO_PASSWORD` environment variable
// Development environment settings
devAware: true, // Enable dev-aware installations
symlinkVersions: true, // Create version-specific symlinks
forceReinstall: false, // Force reinstall if already installed
// Operation settings
verbose: true, // Detailed logging
maxRetries: 3, // Retry failed operations
timeout: 60000, // Operation timeout in milliseconds
// PATH and shell integration
shimPath: '~/.local/bin', // Custom shim location
autoAddToPath: true, // Automatic PATH management
// Shell message configuration
showShellMessages: true,
shellActivationMessage: '✅ Environment activated for {path}',
shellDeactivationMessage: 'Environment deactivated',
// Service management configuration
services: {
enabled: true, // Enable service management
dataDir: '~/.local/share/pantry/services', // Services data directory
logDir: '~/.local/share/pantry/logs', // Services log directory
autoRestart: true, // Auto-restart failed services
startupTimeout: 30, // Service startup timeout
shutdownTimeout: 10, // Service shutdown timeout
},
// Registry and installation method
useRegistry: true, // Use package registry
installMethod: 'curl', // Installation method
installPath: '/usr/local', // Installation path (same as installationPath)
}
export default config
See Configuration Guide for all options.
Integrate pantry into your CI/CD workflows:
- name: Setup Development Environment
uses: stacksjs/pantry-installer@v1
with:
packages: node@22 [email protected] [email protected]
See GitHub Action Documentation for details.
Explore advanced dependency management topics:
Please see our releases page for information on changes.
Please see CONTRIBUTING for details.
For help or discussion:
"Software that is free, but hopes for a postcard." We love receiving postcards from around the world showing where Stacks is being used! We showcase them on our website too.
Our address: Stacks.js, 12665 Village Ln #2306, Playa Vista, CA 90094, United States 🌎
We would like to extend our thanks to the following sponsors for funding Stacks development. If you are interested in becoming a sponsor, please reach out to us.
The MIT License (MIT). Please see LICENSE for more information.
Made with 💙