{"id":37231670,"url":"https://github.com/plyght/wax","last_synced_at":"2026-06-27T07:00:28.844Z","repository":{"id":332417976,"uuid":"1130636134","full_name":"plyght/wax","owner":"plyght","description":"wax is a fast Homebrew-compatible package manager, built in Rust.","archived":false,"fork":false,"pushed_at":"2026-06-23T14:12:40.000Z","size":11651,"stargazers_count":18,"open_issues_count":0,"forks_count":2,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-06-23T16:13:25.782Z","etag":null,"topics":["brew","homebrew","linux","mac","macos","package-manager","rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/plyght.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-08T19:38:36.000Z","updated_at":"2026-06-23T14:14:55.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/plyght/wax","commit_stats":null,"previous_names":["plyght/wax"],"tags_count":22,"template":false,"template_full_name":null,"purl":"pkg:github/plyght/wax","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plyght%2Fwax","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plyght%2Fwax/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plyght%2Fwax/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plyght%2Fwax/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/plyght","download_url":"https://codeload.github.com/plyght/wax/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plyght%2Fwax/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34844346,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-27T02:00:06.362Z","response_time":126,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["brew","homebrew","linux","mac","macos","package-manager","rust"],"created_at":"2026-01-15T03:45:19.161Z","updated_at":"2026-06-27T07:00:28.752Z","avatar_url":"https://github.com/plyght.png","language":"Rust","funding_links":[],"categories":["Rust"],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"/assets/images/Halftone Dots2x.png\" alt=\"Wax Logo\" width=\"200\" /\u003e\n\u003c/div\u003e\n\n# Wax\n\nA 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.\n\n## Overview\n\nWax 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.\n\n## Features\n\n- **Lightning-Fast Queries**: Search and info commands execute in \u003c100ms (16-20x faster than Homebrew)\n- **Intelligent Auto-Detection**: Automatically detects formulae vs casks - no need to specify `--cask` flags\n- **Parallel Operations**: Concurrent downloads with individual progress tracking for each package\n- **Full Cask Support**: Install, uninstall, upgrade, and manage GUI applications seamlessly\n- **Source Building**: Automatic fallback to source compilation when bottles unavailable, with support for Autotools, CMake, Meson, and Make\n- **Custom Tap Support**: Add, manage, and update third-party Homebrew taps for extended package availability\n- **Lockfile Support**: Reproducible environments via `wax.lock` with pinned versions\n- **Native Homebrew Compatibility**: Uses official formulae, bottles, and casks from Homebrew's JSON API\n- **Homebrew Interoperability**: Works standalone or alongside Homebrew without conflicts - installation order independent\n- **Modern Terminal UI**: Real-time progress bars, clean output, and responsive feedback\n- **Minimal Resource Usage**: Single compiled binary with async I/O, no Ruby runtime overhead\n- **Smart Caching**: Local formula index for offline search and instant lookups\n- **Flexible Installation**: User-local (`~/.local/wax`) or system-wide deployment options\n- **Built-in Self-Updater**: Update wax itself from crates.io (stable) or GitHub (nightly)\n\n## Installation\n\n```bash\n# Using Cargo (recommended)\ncargo install waxpkg\n\n# From source\ngit clone https://github.com/plyght/wax.git\ncd wax\ncargo build --release\nsudo cp target/release/wax /usr/local/bin/\n```\n\n## Usage\n\n```bash\n# Update formula index\nwax update\n\n# Update wax itself\nwax update -s            # stable (from crates.io)\nwax update --self        # same as above\nwax update -sn           # nightly (from GitHub)\nwax update -sf           # force reinstall\n\n# Search packages\nwax search nginx\nwax s nginx          # shorthand\n\n# Show package details (auto-detects formulae or casks)\nwax info nginx\nwax info iterm2\nwax show nginx       # alias\n\n# List installed packages\nwax list\nwax ls               # shorthand\n\n# Install packages (auto-detects formulae or casks)\nwax install tree\nwax install iterm2\nwax i tree           # shorthand\nwax install tree --user    # to ~/.local/wax\nwax install tree --global  # to system directory\nwax install tree --build-from-source  # force source build\n\n# Install casks with shorthand\nwax cask iterm2\nwax c firefox\n\n# Manage custom taps\nwax tap add user/repo\nwax tap list\nwax tap update user/repo\nwax tap remove user/repo\n\n# Uninstall packages (auto-detects formulae or casks)\nwax uninstall tree\nwax uninstall iterm2\nwax rm tree          # shorthand\n\n# Check for outdated packages\nwax outdated\n\n# Upgrade packages (auto-detects formulae or casks)\nwax upgrade              # upgrade all outdated packages\nwax upgrade nginx        # upgrade specific package\nwax upgrade nginx tree   # upgrade multiple packages\nwax up nginx             # shorthand\n\n# Generate lockfile\nwax lock\n\n# Install from lockfile\nwax sync\n```\n\n## Configuration\n\nWax stores configuration and cache in `~/.wax/` (or platform-specific cache directory):\n\n```\n~/.wax/\n  cache/\n    formulae.json      # Cached formula index (~8,100 packages)\n    casks.json         # Cached cask index (~7,500 apps)\n  locks/\n    wax.lock          # Lockfile for reproducible installs\n  logs/\n    wax.log           # Operation logs with structured tracing\n```\n\n### Lockfile Format\n\n`wax.lock` uses TOML for human-readable version pinning:\n\n```toml\n[packages]\nnginx = { version = \"1.25.3\", bottle = \"arm64_ventura\" }\nopenssl = { version = \"3.1.4\", bottle = \"arm64_ventura\" }\ntree = { version = \"2.1.1\", bottle = \"arm64_ventura\" }\n```\n\n## Architecture\n\n- `api.rs`: Homebrew JSON API client with async HTTP requests\n- `cache.rs`: Local formula/cask index management and invalidation\n- `bottle.rs`: Bottle download, extraction, and verification (SHA256 checksums)\n- `builder.rs`: Source compilation with multi-build-system support (Autotools, CMake, Meson, Make)\n- `cask.rs`: Cask handling for GUI applications (DMG mounting, app bundle copying)\n- `deps.rs`: Dependency resolution with topological sorting\n- `formula_parser.rs`: Ruby formula parsing and build metadata extraction\n- `install.rs`: Installation orchestration (download → extract → symlink → hooks)\n- `lockfile.rs`: Lockfile generation and synchronization\n- `tap.rs`: Custom tap management (add, remove, update, formula loading)\n- `commands/`: CLI command implementations (search, install, upgrade, tap, etc.)\n- `ui.rs`: Terminal UI components using indicatif for progress tracking\n- `error.rs`: Typed error handling with anyhow context\n- `main.rs`: CLI parsing with clap and logging initialization\n\n### Key Design Decisions\n\n**JSON 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.\n\n**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.\n\n**Custom Tap Support**: Clones third-party taps as Git repositories, parses Ruby formula files, and integrates them with core formulae for unified package management.\n\n**Async-First**: Uses tokio runtime for all I/O operations. Parallel downloads with configurable concurrency limits (default 8 simultaneous).\n\n**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.\n\n## Development\n\n```bash\n# Build debug binary\ncargo build\n\n# Build optimized release\ncargo build --release\n\n# Run tests\ncargo test\n\n# Run with verbose logging\ncargo run -- --verbose install tree\n\n# Check for issues\ncargo clippy\n```\n\nRequires Rust 1.70+. Key dependencies:\n\n- **CLI**: clap (parsing), console (colors), inquire (prompts)\n- **Async**: tokio (runtime), reqwest (HTTP), futures (combinators)\n- **Serialization**: serde, serde_json, toml\n- **UI**: indicatif (progress bars)\n- **Compression**: tar, flate2 (gzip), sha2 (checksums)\n- **Error Handling**: anyhow, thiserror\n- **Logging**: tracing, tracing-subscriber\n- **Build Support**: num_cpus (parallel builds), tempfile (build directories)\n\n## Performance\n\nBenchmarked against Homebrew on macOS (Apple Silicon):\n\n| Operation | Homebrew | Wax | Speedup |\n|-----------|----------|-----|---------|\n| Search    | 1.41s    | 0.09s | 16x |\n| Info      | 1.49s    | 0.08s | 20x |\n| Install   | 2.39s    | 0.55s | 4.3x |\n| Update (warm) | 0.85s | 0.15s | 5.7x |\n| Update (cold) | 13.2s | 1.0s | 13.2x |\n\n**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.\n\nSee `docs/comparison.md` for detailed methodology and analysis.\n\n## Limitations\n\n- **Linux Bottles**: Linux bottles require `patchelf` for ELF binary relocation. Install it first: `wax install patchelf`\n- **Build System Detection**: Source builds use heuristic detection of build systems. Complex or non-standard build configurations may fail.\n- **Formula DSL Subset**: Parses essential Ruby formula syntax. Advanced features (conditional deps, patches, custom install blocks) may not be fully supported.\n- **macOS Primary**: Developed for macOS. Linux support is functional but less tested.\n- **No Post-Install Scripts**: Skips formula post-install hooks for security and performance. Some packages may require manual configuration.\n\n## License\n\nMIT License\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplyght%2Fwax","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fplyght%2Fwax","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplyght%2Fwax/lists"}