| Crates.io | waxpkg |
| lib.rs | waxpkg |
| version | 0.4.0 |
| created_at | 2026-01-09 00:23:40.942319+00 |
| updated_at | 2026-01-25 18:46:36.810711+00 |
| description | Fast Homebrew-compatible package manager |
| homepage | https://github.com/plyght/wax |
| repository | https://github.com/plyght/wax |
| max_upload_size | |
| id | 2031335 |
| size | 1,856,194 |
A fast, modern package manager that leverages Homebrew's ecosystem without the overhead. Built in Rust for speed and reliability, wax provides 16-20x faster search operations and parallel installation workflows while maintaining full compatibility with Homebrew formulae and bottles.
Wax reimagines package management by replacing Homebrew's git-based tap system with direct JSON API access and parallel async operations. It reads from the same bottle CDN and formula definitions but executes operations through a compiled binary with modern concurrency primitives. The result is a package manager that feels instant for read operations and maximizes throughput for installations.
--cask flagswax.lock with pinned versions~/.local/wax) or system-wide deployment options# Using Cargo (recommended)
cargo install waxpkg
# From source
git clone https://github.com/plyght/wax.git
cd wax
cargo build --release
sudo cp target/release/wax /usr/local/bin/
# Update formula index
wax update
# Search packages
wax search nginx
wax s nginx # shorthand
# Show package details (auto-detects formulae or casks)
wax info nginx
wax info iterm2
wax show nginx # alias
# List installed packages
wax list
wax ls # shorthand
# Install packages (auto-detects formulae or casks)
wax install tree
wax install iterm2
wax i tree # shorthand
wax install tree --user # to ~/.local/wax
wax install tree --global # to system directory
wax install tree --build-from-source # force source build
# Install casks with shorthand
wax cask iterm2
wax c firefox
# Manage custom taps
wax tap add user/repo
wax tap list
wax tap update user/repo
wax tap remove user/repo
# Uninstall packages (auto-detects formulae or casks)
wax uninstall tree
wax uninstall iterm2
wax rm tree # shorthand
# Upgrade packages (auto-detects formulae or casks)
wax upgrade nginx
wax upgrade iterm2
wax up nginx # shorthand
# Generate lockfile
wax lock
# Install from lockfile
wax sync
Wax stores configuration and cache in ~/.wax/ (or platform-specific cache directory):
~/.wax/
cache/
formulae.json # Cached formula index (~8,100 packages)
casks.json # Cached cask index (~7,500 apps)
locks/
wax.lock # Lockfile for reproducible installs
logs/
wax.log # Operation logs with structured tracing
wax.lock uses TOML for human-readable version pinning:
[packages]
nginx = { version = "1.25.3", bottle = "arm64_ventura" }
openssl = { version = "3.1.4", bottle = "arm64_ventura" }
tree = { version = "2.1.1", bottle = "arm64_ventura" }
api.rs: Homebrew JSON API client with async HTTP requestscache.rs: Local formula/cask index management and invalidationbottle.rs: Bottle download, extraction, and verification (SHA256 checksums)builder.rs: Source compilation with multi-build-system support (Autotools, CMake, Meson, Make)cask.rs: Cask handling for GUI applications (DMG mounting, app bundle copying)deps.rs: Dependency resolution with topological sortingformula_parser.rs: Ruby formula parsing and build metadata extractioninstall.rs: Installation orchestration (download → extract → symlink → hooks)lockfile.rs: Lockfile generation and synchronizationtap.rs: Custom tap management (add, remove, update, formula loading)commands/: CLI command implementations (search, install, upgrade, tap, etc.)ui.rs: Terminal UI components using indicatif for progress trackingerror.rs: Typed error handling with anyhow contextmain.rs: CLI parsing with clap and logging initializationJSON API over Git: Fetches all ~15,600 formulae/casks via single HTTP request rather than cloning entire tap repository. Enables instant search without filesystem traversal.
Bottles First, Source When Needed: Prioritizes precompiled bottles for speed but automatically falls back to source compilation when bottles are unavailable. Supports multiple build systems for broad compatibility.
Custom Tap Support: Clones third-party taps as Git repositories, parses Ruby formula files, and integrates them with core formulae for unified package management.
Async-First: Uses tokio runtime for all I/O operations. Parallel downloads with configurable concurrency limits (default 8 simultaneous).
Homebrew Interoperability: Designed to coexist peacefully with Homebrew. Installs to the same Cellar structure using architecture-appropriate standard paths (/opt/homebrew on Apple Silicon, /usr/local on Intel). Detects and respects existing Homebrew installations, allowing both package managers to operate independently or simultaneously without conflicts. Installation order does not matter - wax functions identically whether installed before or after Homebrew.
# Build debug binary
cargo build
# Build optimized release
cargo build --release
# Run tests
cargo test
# Run with verbose logging
cargo run -- --verbose install tree
# Check for issues
cargo clippy
Requires Rust 1.70+. Key dependencies:
Benchmarked against Homebrew on macOS (Apple Silicon):
| Operation | Homebrew | Wax | Speedup |
|---|---|---|---|
| Search | 1.41s | 0.09s | 16x |
| Info | 1.49s | 0.08s | 20x |
| Install | 2.39s | 0.55s | 4.3x |
| Update (warm) | 0.85s | 0.15s | 5.7x |
| Update (cold) | 13.2s | 1.0s | 13.2x |
Note: Warm cache updates use HTTP conditional requests (ETag/If-Modified-Since) for instant responses. Cold cache updates use gzip/brotli compression for efficient downloads.
See docs/comparison.md for detailed methodology and analysis.
MIT License