zerobrew
English ·
中文
[](https://github.com/zerobrewhq/zerobrew/actions/workflows/ci.yml)
[](https://github.com/zerobrewhq/zerobrew/actions/workflows/test.yml)
[](https://github.com/zerobrewhq/zerobrew/releases)
[](https://discord.gg/ZaPYwm9zaw)
[](./LICENSE-MIT.md)
[](./LICENSE-APACHE.md)
zerobrew 为 macOS 和 Linux 上的 Homebrew 软件包带来了类似 uv 的架构。
## 安装 (Install)
```bash
curl -fsSL https://zerobrew.rs/install | bash
```
安装程序会更新你的 shell 配置。完成后,重启终端,或运行它打印的 `source` 命令。
或通过 Homebrew 安装:
```bash
brew install zerobrewhq/zerobrew/zerobrew
```
## 更新 zerobrew (Update zerobrew)
如果使用独立安装脚本,重新运行:
```bash
curl -fsSL https://zerobrew.rs/install | bash
zb --version
```
如果通过 Homebrew 安装:
```bash
brew update && brew upgrade zerobrew
```
如果你是从旧的 `lucasgelfond/zerobrew` tap 安装的,它已不再更新。请切换到新的 tap:
```bash
brew uninstall zerobrew
brew untap lucasgelfond/zerobrew
brew install zerobrewhq/zerobrew/zerobrew
```
`zb update` 只刷新软件包元数据。`zb upgrade` 升级通过 zerobrew 安装的软件包。它们都不会更新 `zb` 二进制文件本身。
## 快速开始 (Quick start)
```bash
zb install jq # 安装单个软件包
zb install wget git # 安装多个软件包
zb bundle # 从 Brewfile 安装
zb bundle install -f myfile # 从自定义文件安装
zb bundle dump # 将已安装的软件包导出到 Brewfile
zb bundle dump -f out --force # 导出到自定义文件(覆盖)
zb uninstall jq # 卸载单个软件包
zb outdated # 列出有新版本可用的软件包
zb upgrade # 升级所有已过期的软件包
zb upgrade jq wget # 升级指定的软件包
zb reset # 卸载所有内容
zb gc # 垃圾回收未使用的存储条目
zbx jq --version # 在不链接的情况下运行
```
## 性能快照 (Performance snapshot)
| 软件包 | Homebrew (冷启动) | ZB (冷启动) | 冷启动加速 | Homebrew (热启动) | ZB (热启动) | 热启动加速 |
|---------|-----------------|-----------|--------------|-----------------|-----------|--------------|
| **总体 (98 个软件包)** | 896s | 303s | **3.0x** | 778s | 175s | **4.5x** |
| libsodium | 2.87s | 1.14s | 2.5x | 1.88s | 334ms | 5.6x |
| tesseract | 41.99s | 10.56s | 4.0x | 39.73s | 8.26s | 4.8x |
| openjdk | 35.03s | 10.47s | 3.3x | 32.72s | 7.30s | 4.5x |
| llvm | 17.90s | 16.65s | 1.1x | 11.66s | 7.41s | 1.6x |
测试于 2026-09-30,使用 zerobrew 0.3.3 和 Homebrew 7.0.7,环境为 macOS 26.6.2、MacBook Pro(M3 Pro,18 GB 内存),下载带宽约 410 Mbit/s。测试开始时 Homebrew 中未安装任何软件包。
- **冷启动**:该软件包及其所有依赖均已卸载,下载缓存为空。
- **热启动**:该软件包及其所有依赖均已卸载,保留冷启动时的下载缓存。
- 按中位数计算,单个软件包冷启动快 2.7 倍,热启动快 5.7 倍。
完整结果
| 软件包 | Homebrew (冷启动) | ZB (冷启动) | 冷启动加速 | Homebrew (热启动) | ZB (热启动) | 热启动加速 |
|---------|-----------------|-----------|--------------|-----------------|-----------|--------------|
| ca-certificates | 9.13s | 1.29s | 7.07x | 8.20s | 290ms | 28.27x |
| openssl@3 | 12.33s | 2.72s | 4.53x | 11.29s | 960ms | 11.76x |
| xz | 2.88s | 1.11s | 2.60x | 1.87s | 313ms | 5.99x |
| icu4c@78 | 3.55s | 2.16s | 1.64x | 2.17s | 882ms | 2.46x |
| python@3.14 | 19.22s | 4.68s | 4.10x | 17.70s | 2.62s | 6.76x |
| awscli | 33.36s | 9.57s | 3.48x | 31.47s | 6.29s | 5.00x |
| node | 33.95s | 15.60s | 2.18x | 32.48s | 13.09s | 2.48x |
| harfbuzz | 25.89s | 7.35s | 3.52x | 24.40s | 5.24s | 4.66x |
| ncurses | 3.69s | 1.73s | 2.14x | 2.44s | 749ms | 3.26x |
| gh | 2.67s | 1.68s | 1.59x | 1.61s | 666ms | 2.42x |
| pcre2 | 3.02s | 1.19s | 2.54x | 1.91s | 465ms | 4.11x |
| libpng | 2.83s | 1.03s | 2.74x | 1.87s | 305ms | 6.12x |
| zstd | 4.63s | 1.57s | 2.95x | 3.55s | 537ms | 6.61x |
| glib | 7.56s | 3.69s | 2.05x | 6.37s | 2.04s | 3.12x |
| lz4 | 2.91s | 1.18s | 2.47x | 1.84s | 304ms | 6.07x |
| gettext | 5.32s | 2.41s | 2.21x | 3.97s | 1.57s | 2.52x |
| libngtcp2 | 12.49s | 2.61s | 4.78x | 11.30s | 1.12s | 10.10x |
| libnghttp3 | 2.84s | 1.12s | 2.53x | 1.85s | 299ms | 6.18x |
| pkgconf | 2.92s | 1.18s | 2.48x | 1.85s | 314ms | 5.90x |
| libunistring | 2.87s | 1.07s | 2.68x | 1.85s | 321ms | 5.75x |
| mpdecimal | 2.86s | 1.13s | 2.54x | 1.85s | 305ms | 6.08x |
| brotli | 2.81s | 1.09s | 2.59x | 1.86s | 312ms | 5.96x |
| jpeg-turbo | 2.96s | 1.17s | 2.54x | 1.90s | 313ms | 6.08x |
| xorgproto | 2.64s | 1.16s | 2.28x | 1.53s | 274ms | 5.58x |
| ffmpeg | 22.99s | 5.40s | 4.26x | 21.72s | 3.59s | 6.05x |
| cmake | 3.27s | 2.42s | 1.35x | 2.00s | 1.00s | 2.00x |
| libnghttp2 | 2.79s | 1.02s | 2.73x | 1.84s | 293ms | 6.29x |
| go | 5.40s | 6.38s | 0.85x | 3.66s | 3.28s | 1.11x |
| uv | 2.87s | 1.78s | 1.61x | 1.59s | 688ms | 2.32x |
| gmp | 2.93s | 1.14s | 2.58x | 1.86s | 316ms | 5.89x |
| libtiff | 8.91s | 2.53s | 3.52x | 7.79s | 1.44s | 5.40x |
| fontconfig | 10.72s | 3.22s | 3.33x | 9.49s | 1.77s | 5.35x |
| python@3.13 | 17.24s | 4.42s | 3.90x | 16.10s | 2.45s | 6.56x |
| git | 7.22s | 3.43s | 2.10x | 6.01s | 2.20s | 2.74x |
| little-cms2 | 9.68s | 2.69s | 3.60x | 8.84s | 1.57s | 5.62x |
| dav1d | 2.89s | 1.03s | 2.79x | 1.89s | 319ms | 5.92x |
| openexr | 12.59s | 3.08s | 4.09x | 11.32s | 1.91s | 5.91x |
| c-ares | 3.02s | 1.05s | 2.87x | 1.92s | 329ms | 5.83x |
| tesseract | 41.99s | 10.56s | 3.98x | 39.73s | 8.26s | 4.81x |
| p11-kit | 11.08s | 1.38s | 8.01x | 10.11s | 489ms | 20.66x |
| imagemagick | 17.70s | 5.68s | 3.12x | 16.59s | 4.38s | 3.79x |
| zlib | 2.88s | 1.13s | 2.55x | 1.83s | 342ms | 5.35x |
| libx11 | 6.63s | 2.65s | 2.50x | 5.82s | 1.62s | 3.60x |
| freetype | 3.69s | 1.24s | 2.98x | 2.69s | 432ms | 6.22x |
| protobuf | 4.57s | 4.80s | 0.95x | 3.50s | 3.24s | 1.08x |
| gnupg | 27.40s | 5.24s | 5.23x | 25.83s | 3.67s | 7.04x |
| openjph | 9.82s | 2.40s | 4.09x | 8.69s | 1.49s | 5.82x |
| libtasn1 | 2.75s | 1.06s | 2.58x | 1.88s | 389ms | 4.84x |
| ruby | 18.12s | 8.52s | 2.13x | 17.26s | 5.25s | 3.29x |
| gnutls | 18.73s | 3.87s | 4.84x | 17.39s | 2.52s | 6.89x |
| expat | 2.86s | 1.04s | 2.76x | 1.84s | 305ms | 6.03x |
| libsodium | 2.87s | 1.14s | 2.51x | 1.88s | 334ms | 5.61x |
| simdjson | 2.92s | 1.11s | 2.64x | 1.87s | 303ms | 6.16x |
| gemini-cli | 35.65s | 16.24s | 2.20x | 33.95s | 13.65s | 2.49x |
| libarchive | 6.22s | 1.65s | 3.78x | 5.16s | 802ms | 6.44x |
| pyenv | 15.62s | 3.34s | 4.67x | 14.18s | 1.70s | 8.33x |
| pixman | 2.88s | 1.07s | 2.70x | 1.87s | 303ms | 6.17x |
| curl | 20.14s | 3.57s | 5.64x | 18.91s | 2.29s | 8.24x |
| opus | 2.98s | 1.11s | 2.70x | 1.90s | 307ms | 6.18x |
| unbound | 14.78s | 2.82s | 5.25x | 13.73s | 1.36s | 10.11x |
| cairo | 22.55s | 6.24s | 3.62x | 21.26s | 4.57s | 4.65x |
| pango | 29.43s | 8.03s | 3.67x | 28.14s | 6.06s | 4.64x |
| leptonica | 11.62s | 3.19s | 3.64x | 10.58s | 2.09s | 5.06x |
| libxcb | 5.77s | 2.27s | 2.54x | 4.71s | 1.43s | 3.29x |
| jpeg-xl | 16.20s | 4.30s | 3.76x | 15.10s | 3.04s | 4.97x |
| coreutils | 3.82s | 1.80s | 2.12x | 2.77s | 864ms | 3.20x |
| certifi | 9.62s | 1.06s | 9.05x | 8.86s | 278ms | 31.87x |
| krb5 | 12.61s | 2.96s | 4.25x | 11.49s | 1.66s | 6.93x |
| docker | 2.64s | 1.34s | 1.97x | 1.53s | 492ms | 3.12x |
| libheif | 13.27s | 3.53s | 3.76x | 12.23s | 2.25s | 5.43x |
| webp | 5.36s | 1.49s | 3.60x | 4.40s | 804ms | 5.47x |
| libxext | 7.61s | 3.06s | 2.49x | 6.66s | 1.74s | 3.83x |
| libxau | 3.25s | 1.17s | 2.78x | 2.35s | 376ms | 6.26x |
| gcc | 13.09s | 6.62s | 1.98x | 10.37s | 3.33s | 3.11x |
| bzip2 | 2.56s | 1.19s | 2.15x | 1.48s | 362ms | 4.08x |
| libxdmcp | 3.20s | 1.17s | 2.73x | 2.34s | 371ms | 6.32x |
| abseil | 3.43s | 2.15s | 1.60x | 2.29s | 1.12s | 2.04x |
| xcbeautify | 2.45s | 1.17s | 2.10x | 1.49s | 294ms | 5.06x |
| libuv | 2.80s | 1.04s | 2.68x | 1.85s | 304ms | 6.10x |
| giflib | 2.83s | 1.03s | 2.73x | 1.85s | 299ms | 6.19x |
| utf8proc | 2.81s | 1.12s | 2.52x | 1.84s | 300ms | 6.12x |
| libxrender | 7.55s | 2.91s | 2.59x | 6.66s | 1.66s | 4.01x |
| m4 | 2.46s | 1.30s | 1.88x | 1.44s | 343ms | 4.19x |
| graphite2 | 2.85s | 1.08s | 2.63x | 1.84s | 307ms | 6.00x |
| openjdk | 35.03s | 10.47s | 3.34x | 32.72s | 7.30s | 4.48x |
| uvwasi | 3.66s | 1.24s | 2.95x | 2.71s | 401ms | 6.76x |
| libffi | 2.90s | 1.26s | 2.31x | 1.81s | 288ms | 6.28x |
| libdeflate | 2.92s | 1.07s | 2.71x | 1.84s | 303ms | 6.09x |
| llvm | 17.90s | 16.65s | 1.08x | 11.66s | 7.41s | 1.57x |
| aom | 4.01s | 1.48s | 2.71x | 2.76s | 621ms | 4.44x |
| lzo | 2.95s | 1.06s | 2.78x | 1.83s | 296ms | 6.20x |
| libevent | 12.33s | 2.90s | 4.25x | 11.28s | 1.06s | 10.59x |
| libgpg-error | 5.79s | 2.76s | 2.10x | 4.86s | 1.61s | 3.02x |
| libidn2 | 5.82s | 2.64s | 2.20x | 4.86s | 1.68s | 2.90x |
| berkeley-db@5 | 4.49s | 2.77s | 1.62x | 3.01s | 1.20s | 2.50x |
| deno | 12.93s | 4.67s | 2.77x | 11.62s | 3.21s | 3.62x |
| libedit | 2.93s | 1.09s | 2.69x | 1.83s | 300ms | 6.11x |
| oniguruma | 2.76s | 1.10s | 2.51x | 1.84s | 302ms | 6.10x |
如需复现,请在 Homebrew 中未安装任何软件包的机器上运行 `just bench --full results/`。该命令会重置 zerobrew,卸载其在 Homebrew 中安装的所有软件包,并将可直接用于 README 的表格写入 `results/benchmark.md`。
## 与 Homebrew 的关系 (Relationship with Homebrew)
zerobrew 更像是一个针对 Homebrew 生态系统进行性能优化的客户端。我们依赖于:
- Homebrew 的 formula 定义 (homebrew-core)
- Homebrew 提供的预构建 bottle(如果可用)
- Homebrew 的软件包元数据和基础设施
我们的创新重点在于:
- 用于去重的基于内容的寻址存储 (Content-addressable storage)
- 用于零开销复制的 APFS clonefiles
- 使用 Homebrew 的 Ruby DSL 的源码编译回退 (Source build fallback)
zerobrew 处于实验阶段。我们建议将其与 Homebrew 并行运行,而不是作为替代品。除非您完全确定其影响,否则**不**建议清除 Homebrew 并将其替换为 zerobrew。
## 项目状态 (Project status)
- **状态:** 处于实验阶段,但对于许多常见的 Homebrew formulas 已经非常有用。
- **反馈:** 如果遇到不兼容问题,请提出 issue 或 PR。
- **许可证:** 根据您的选择,在 [Apache 2.0](./LICENSE-APACHE.md) 或 [MIT](./LICENSE-MIT.md) 下获得双重许可。