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:
- Install and manage development tools system-wide
- Automatic PATH configuration and shell integration
- Cross-platform compatibility (macOS, Linux, Windows)
- Smart permission handling and installation paths
Project Management:
- Automatic project environment detection and activation
- Isolated dependency environments per project
- Version-specific tool installation
- Seamless switching between project contexts
At its core, pantry hosts its own package registry with 1700+ system packages, 50+ desktop apps, and pre-built binaries β all served from CDN. No external dependency managers required.
Learn more in the docs: Why pantry, Quick Start.
pantry transforms how you manage dependencies across your entire development workflow:
- π¦ Global Tool Installation β Install development tools and runtimes system-wide with automatic PATH management
- π§ Smart Installation Paths β Automatically chooses
/usr/localfor system-wide access or~/.localfor user-specific installs (pkgm compatible) - π Shell Integration β Seamless integration with your shell for immediate tool availability
- πͺ Cross-Platform Support β Consistent experience across macOS, Linux, and Windows
- β‘ 68 Pre-configured Services β PostgreSQL, Redis, Kafka, Prometheus, Grafana, Vault, and more
- π One-Command Service Control β Start, stop, restart services with automatic configuration
- π₯ Health Monitoring β Built-in health checks with automatic status detection
- π§ Auto-Configuration β Default configuration files generated for each service
- π Configurable Database Credentials β Customize database usernames, passwords, and authentication methods
- π₯οΈ Cross-Platform Service Management β Uses launchd on macOS, systemd on Linux
- π Automatic Environment Isolation β Project-specific environments that activate when you enter a project directory
- π― Dependency Detection β Automatically reads
deps.yaml,dependencies.yaml,package.json,pyproject.toml, and other project files - π Context Switching β Seamlessly switch between different project environments
- π Version Management β Install and manage specific versions of tools per project
- ποΈ Environment Management β List, inspect, clean, and remove project environments with readable identifiers
- π Publish from Any Commit β Publish packages directly from git commits without version bumps
- π¦ Monorepo Support β Automatically discovers and publishes all packages in a monorepo
- π Instant Install URLs β Get shareable install URLs for every published commit
- π€ CI/CD Ready β Drop-in replacement for
pkg-pr-newin GitHub Actions
- π₯οΈ 50+ Desktop Apps β Install VS Code, Discord, Obsidian, Spotify, and more via
pantry install - π¦ Same Pipeline β Apps go through the same registry as system packages (S3 + metadata)
- π Daily Updates β Desktop apps checked and rebuilt daily via GitHub Actions
- π Browse All β
curl https://registry.pantry.dev/desktop-apps | jq
- β‘ Fast Operations β Native Zig CLI with pre-built binaries from CDN
- ποΈ Clean Removal β Remove packages or completely uninstall with proper cleanup
- β¬οΈ Self-Update β
pantry upgradeto get the latest version,--canaryfor pre-releases - ποΈ Flexible Configuration β Customize behavior through config files or command-line options
Modern development requires managing dependencies at multiple levels - from system tools to project-specific requirements. Traditional approaches fall short:
Traditional Package Managers (Homebrew, apt, etc.):
- β Global conflicts β Different projects need different versions
- β Slow operations β Installing or updating can take minutes
- β Manual environment management β Switching between project contexts is manual
- β PATH pollution β All tools are globally available, causing conflicts
Manual Dependency Management:
- β Inconsistent setups β Different team members have different environments
- β Complex PATH management β Manual shell configuration is error-prone
- β Version drift β Hard to maintain consistent tool versions
- β Platform differences β Different setup procedures for each OS
pantry's Solution:
- β Unified Management β Single tool for both system and project dependencies
- β Automatic Isolation β Project environments activate automatically
- β Fast Operations β Efficient package management with intelligent caching
- β Consistent Experience β Same commands and behavior across all platforms
- β Smart Defaults β Sensible installation paths and configuration out of the box
Read more about why we created pantry
curl -fsSL https://pantry.dev | bashThat's it. This downloads the latest pre-built binary for your platform, installs it to ~/.local/bin, and configures your PATH.
To install a specific version:
export PANTRY_VERSION=0.8.7 && curl -fsSL https://pantry.dev | bashTo install to a custom location:
export PANTRY_INSTALL_DIR=/usr/local/bin && curl -fsSL https://pantry.dev | bashAfter installing, bootstrap your shell integration:
pantry bootstrapThis sets up:
- Shell integration for automatic project environment activation
- PATH configuration
- Global tool management
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 python@3.12 # 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 typescript@5.7Smart Installation Behavior:
- Default: Installs to
/usr/localif writable, otherwise~/.local - System-wide: Use
--systemfor explicit system installation (same as default) - Custom paths: Use
--path <directory>for any location - Automatic PATH: Tools are immediately available in new shells
pantry automatically manages project-specific dependencies:
# Create a project with dependencies echo "dependencies: - node@22 - typescript@5.7 - bun@1.2" > 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 deactivatedLearn 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)- And more...
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 --forceEnvironment 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 cd
Remove 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 --forceManage development services with ease:
# Start essential development services pantry start postgres redis # Start multiple services at once pantry start postgres redis nginx prometheus # Check service status pantry status postgres pantry services # Stop services when done pantry stop postgres redis # Enable auto-start for essential services pantry enable postgres redisAvailable Services (68):
- Databases: PostgreSQL, MySQL, MariaDB, MongoDB, Redis, Valkey, InfluxDB, CockroachDB, Neo4j, ClickHouse, CouchDB, Cassandra, SurrealDB, DragonflyDB, FerretDB, TiDB, ScyllaDB, KeyDB, PocketBase
- Search: Elasticsearch, OpenSearch, Meilisearch, Typesense, Solr
- Web Servers: Nginx, Caddy, Apache (httpd), HAProxy, Traefik, Varnish, Envoy
- Message Queues: Kafka, RabbitMQ, Apache Pulsar, NATS, Mosquitto, Redpanda
- Monitoring: Prometheus, Grafana, Jaeger, Loki, Alertmanager, VictoriaMetrics
- Infrastructure: Vault, Consul, etcd, MinIO, SonarQube, Temporal, Nomad, Zookeeper
- Development & CI/CD: Jenkins, LocalStack, Verdaccio, Gitea, Mailpit
- API & Backend: Hasura, Keycloak
- AI/ML: Ollama
- DNS: CoreDNS, Unbound, dnsmasq
- Networking: Cloudflared, Tor, Syncthing, Doppler
- PHP: PHP-FPM
- Caching: Memcached
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 start postgres mysql # Creates project-specific databases with your configured credentialsDefault Credentials (secure for development):
- Username:
root - Password:
password - Auth Method:
trust(PostgreSQL)
Configuration Options:
- Environment variables:
pantry_DB_USERNAME,pantry_DB_PASSWORD,pantry_DB_AUTH_METHOD - Config file:
pantry.config.tsβservices.database - Per-project databases automatically created with your credentials
Publish packages directly from git commits β a built-in replacement for pkg-pr-new:
# Publish all packages in a monorepo from the current commit pantry publish:commit './packages/*' # Publish a single package pantry publish:commit ./my-package # Dry run to see what would be published pantry publish:commit './packages/*' --dry-run # Use a custom registry pantry publish:commit './packages/*' --registry https://registry.example.comEach published package gets an install URL tied to the commit SHA:
# Install a specific commit's package npm install https://registry.pantry.dev/commits/abc1234/@scope/my-package/tarballGitHub Actions integration β replace pkg-pr-new in your CI:
# Before (pkg-pr-new) - run: bunx pkg-pr-new publish './packages/*' # After (pantry) - run: pantry publish:commit './packages/*'# Install desktop apps (same as system packages) pantry install discord pantry install obsidian pantry install code.visualstudio.com # Browse available apps curl https://registry.pantry.dev/desktop-apps | jq curl https://registry.pantry.dev/desktop-apps?category=Development | jq# Upgrade pantry to the latest stable release pantry upgrade # Upgrade to the latest canary (pre-release) build pantry upgrade --canary # Check what would be upgraded without making changes pantry upgrade --dry-run# Create executable shims pantry shim node@22 typescript@5.7 # 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 runtimeCustomize pantry's behavior for your system and projects:
import type { PantryConfig } from 'ts-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 configSee Configuration Guide for all options.
Integrate pantry into your CI/CD workflows:
- name: Setup Development Environment uses: home-lang/pantry-installer@v1 with: packages: node@22 typescript@5.7 bun@1.2.14See GitHub Action Documentation for details.
Explore advanced dependency management topics:
- Commit Publishing (pkg-pr-new alternative)
- Service Management
- Project Environment Configuration
- Custom Shims and Tool Management
- Cross-platform Compatibility
- Performance Optimization
- API Reference
- π― Project Awareness: Automatic project environment management vs manual setup
- β‘ Speed: Faster installations with intelligent caching
- π Isolation: Project-specific versions vs global conflicts
- π Cross-Platform: Consistent experience across all operating systems
- βοΈ Service Management: Built-in service management vs manual configuration
- π Unified Interface: Single tool for all languages vs multiple managers
- π€ Automatic Switching: Context-aware environment activation
- π¦ Broader Scope: Manages system tools beyond just language runtimes
- π οΈ Integrated Workflow: Seamless integration between system and project dependencies
- π Lightweight: Native performance without virtualization overhead
- π» System Integration: Tools available in your native shell and IDE
- π§ Flexible: Mix system-wide and project-specific tools as needed
- β‘ Instant: No container startup time or resource overhead
- ποΈ Service Management: Native service management without containers
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 π
- Max Howell - for creating pkgx and Homebrew
- pkgm & dev - thanks for the inspiration
- Chris Breuer
- All Contributors
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 π
