> 核对时间:2026-08-19。整理自 GitHub 仓库 lucasgelfond/zerobrew 的 README(含中文版)、CHANGELOG、官网 zerobrew.rs。zerobrew 迭代很快,命令以你本地 zb --help 和仓库当前 README 为准。

zerobrew 是个用 Rust 写的 Homebrew 替代品,口号是"即插即用、快 5–20 倍"。它是把 uv(Python 包管理器)那套架构搬到 Homebrew 上。文章分三块:

1. 快速上手:它是什么、为什么快,装好并跑通第一个包;
2. 安装与使用:常用命令、Brewfile、从 Homebrew 迁移、源码构建、维护;
3. 实践经验:日常技巧、坑和注意点。

> 如果你苦于 Homebrew 慢,又不想改用 brew 的包管理器,zerobrew 或许就是你想要的。

一、快速上手


1.1 它是什么


- 定位:macOS / Linux 上的 Homebrew 替代品,Rust 编写;
- 思路:复用 Homebrew 的基础设施(formula 定义、官方预编译 bottle、元数据、CDN),只把"客户端引擎"换成 Rust。可以把它想成 Homebrew 生态的高性能前端;
- 现状:截至 2026-08-19,仓库约 7.5k+ star、392 commits;最新正式版 v0.3.2(2026-06-11,修了 CVE-2026-53970);
- 许可:MIT 或 Apache-2.0。

一句话:想留着 Homebrew 的软件生态、又嫌它慢,zerobrew 就是换个更快的引擎。

1.2 为什么快


zerobrew 的快来自几处工程取舍:

| 技术手段 | 作用 |
|---|---|
| 内容寻址存储 | 每个文件按内容哈希存一份,跨包重复的文件不重复占空间,重装近乎零成本(类似 Docker 镜像层) |
| APFS clonefile | macOS 上用文件系统快照拷贝(写时复制),复制几乎瞬时 |
| 并行下载 + 流式解压 | 多任务并发拉取、边下边装,吃满带宽和多核 |
| 复用 Homebrew 官方 CDN | 下载源不变,bottle 仍从官方拉,兼容有保障 |
| Rust 实现 | 编译型语言 + tokio 并发,启动快、内存低 |

装好后的数据目录结构(root 安装默认前缀 /opt/zerobrew,用户级安装落在 ~/.local/share/zerobrew,以安装脚本打印为准):

/opt/zerobrew/
├── store/    # 内容寻址存储,所有包的只读层,按哈希去重
├── cache/    # 元数据、索引缓存
├── db/       # SQLite 数据库,记录已安装状态
└── locks/    # 并发锁


1.3 官方性能数据


README 给的基准测试(Apple Silicon,清缓存冷启动计时):

| 场景 | Homebrew | zerobrew 冷启动 | zerobrew 热启动 |
|---|---|---|---|
| Top 100 公式批量安装 | 452s | 226s(2.0x) | 59s(7.6x) |
| ffmpeg | 基准 | 0.9x(略慢) | 4.4x |
| libsodium | 基准 | 6.0x | 18.1x |
| sqlite | 基准 | 4.6x | 18.1x |
| tesseract | 基准 | 3.4x | 29.5x |

ffmpeg 这种依赖很多的大家伙,冷启动反而略慢于 Homebrew(首次要解包大量依赖),热启动仍快 4 倍以上。结论很明显:**小包、重复安装/升级收益最大;大型依赖树首次安装收益有限,甚至可能更慢**。

1.4 和 Homebrew 的关系


- zerobrew 设计上不是为了替换 Homebrew,两者可并行安装使用,它们的前缀和数据库各自独立、互不干扰;
- 官方明确建议:用 zerobrew 作为 Homebrew 的补充
- 对 Homebrew 已经装好的软件,zerobrew 不会感知,反之亦然。切换前需要重新安装一遍目标软件。

1.5 跑通第一个包


安装完(见下一节),先确认命令进了 PATH:

zb --version


装个小包验证链路通不通:

zb install jq
zb list          # 看已装列表,确认 jq 在
jq --version     # 能直接跑,说明链接成功


能输出版本号就说明整条链路通了。

二、安装与使用


2.1 安装


官方脚本(推荐):

curl -fsSL https://zerobrew.rs/install | bash


脚本下载二进制、写 shell 配置。装完重开终端(或按提示 source)让 zbzbx 进 PATH。curl | bash 建议先存下来看一眼再跑:

curl -fsSL https://zerobrew.rs/install -o install.sh
# 确认 install.sh 无误,再 bash install.sh


走 Homebrew 也行:

brew install lucasgelfond/zerobrew/zerobrew


2.2 更新 zb 本体


- 脚本装的:重跑安装脚本覆盖升级;
- Homebrew 装的:brew update && brew upgrade zerobrew;
- 区分两个命令:zb update 更新 formula 索引(= brew update),zb upgrade 升级已装包(= brew upgrade)。

2.3 常用命令


| 命令 | 作用 | 对应 Homebrew |
|---|---|---|
| zb install <formula> | 安装 | brew install |
| zb uninstall <formula> | 卸载 | brew uninstall |
| zb search <关键词> | 搜 formula | brew search |
| zb info <formula> | 看公式详情/依赖 | brew info |
| zb list | 列出已装 | brew list |
| zb outdated | 列出可升级(--quiet/--verbose/--json) | brew outdated |
| zb upgrade | 升级全部/指定包(--build-from-source、--no-link) | brew upgrade |
| zb bundle | 按 Brewfile 装依赖 | brew bundle |
| zb bundle dump | 导出当前环境为 Brewfile | brew bundle dump |
| zb reset | 清掉已装、回到刚装好的状态 | — |
| zb gc | 清理孤立存储 | brew cleanup 近似 |
| zb doctor | 诊断,--repair 自动修 | brew doctor |
| zbx <command> | 临时隔离环境跑命令,不写 store | — |

每条命令都能 --help;全局 -v/-q 控日志详细度。

2.4 Brewfile


zerobrew 支持 Brewfile,方便整套环境"搬家"或备份:

zb bundle dump              # 导出当前已装到 Brewfile
zb bundle install -f        # 按 Brewfile 批量装,已装跳过,-f 强制重装


如果你已在用 brew bundle,生成的 Brewfile 同样是 brew/tap/cask 条目,zerobrew 的 zb bundle 可以直接消费常见的 Homebrew 风格 Brewfile。

2.5 从 Homebrew 迁移:zb migrate


v0.2.0 起提供了 zb migrate 命令,可扫描 Homebrew 已安装的 formula 并批量迁移(v0.2.0 起支持无交互的批量模式,一次迁移全部包)。大致流程:

1. brew bundle dump 先备份;
2. zb migrate 自动扫描;
3. 按提示批量或逐个迁;
4. zb outdated / zb upgrade 确认正常。

边界:官方只迁 homebrew/core 的 formula,**cask(GUI 应用)和第三方 tap 不在范围内**,这些留在 Homebrew。所以迁移后"Homebrew + zerobrew 并行"是常态。

2.6 源码构建与自定义安装


有的公式没官方 bottle,或你想本地编译:

# 强制源码构建(-s 是 --build-from-source 的简写)
zb install -s <formula>
zb upgrade --build-from-source


zerobrew 装不上时,会**回退用 Homebrew 的 Ruby DSL 在本地构建**,这是它兼容性的兜底方案。此外它支持:

- 外部 tap 和 cask(v0.1.2 起);
- GitHub Release 直装:可以从 GitHub Releases 直接安装二进制(对不在 homebrew-core 的工具很实用)。

三、实践经验与使用技巧


3.1 与 Homebrew 并行:智能回退函数


zerobrew 不是所有包都能装,在 shell 配置里加个包装函数,优先 zb、装不上回退 brew:

br() {
  if zb install "$1" 2>/dev/null; then
    echo "✔ 已通过 zerobrew 安装: $1"
  else
    echo "→ 回退到 Homebrew: $1"
    brew install "$1"
  fi
}
# br ffmpeg
# br some-cask-app   # cask 自动走 brew


3.2 日常技巧


- zbx 临时运行:不想把某个包"装进"环境时,用 zbx <command> 在隔离环境里跑,用完即走,适合工具链冲突场景;
- 定期 zb gc:内容寻址存储按哈希去重,但长期安装/升级会留下孤儿数据,存储体积会膨胀。社区反馈"用一段时间后 store 明显变大",养成定期 zb gc 的习惯;
- CI/CD 加速:内容寻址存储天然适合做缓存——CI 里把 /opt/zerobrew/store 作为缓存目录,restore-keys 按分支缓存,任务冷启动装包时间可从分钟级降到秒级;
- zb doctor --repair:遇到奇怪的损坏(符号链接断掉、存储孤儿项)先跑它,v0.3.0 起支持自动修复,比手动清 store 安全;
- 模糊匹配建议:找不到公式时,zb 会给出"你是不是要找 xxx"的推荐(v0.2.0 起),利用它快速纠正拼写错误;
- ZEROBREW_API_URL 环境变量:需要自建镜像/代理场景可指向自定义 API 地址,元数据还会持久化缓存,网络不稳时重复查询不重复拉取;
- --no-link:和 Homebrew 的 keg-only 同理,不想污染 PATH 时可以只安装不链接。

3.3 注意事项与常见问题


**兼容范围有限**。README 明确标注是"实验性"项目,官方支持范围以 homebrew/core 为主。cask、第三方 tap、Linux 上的部分特性都在演进中,遇到装不上的包,先查 GitHub Issues,大概率已有讨论或 workaround。

**PATH 冲突**。zb 和 brew 都会往 PATH 里加自己的 bin/,若两套都装了同名工具,执行的是哪个取决于 PATH 顺序。建议二选一管理常用工具,或用上面"智能回退"的思路统一入口。

**存储体积管理**。/opt/zerobrew/store 会随着安装历史增长,配合 zb gc + 定期 zb outdated 清理不用的包。若磁盘紧张,避免在容器/CI 里重复创建全新 store,尽量复用缓存。

**安全与供应链**。官方安装脚本是 curl | bash,建议先审阅再执行;bottle 的校验依赖上游 Homebrew 基础设施;历史上有安全修复(如 v0.3.2 的 CVE-2026-53970),记得及时升级 zb 本体。

**卸载**。目前没有官方 uninstall 子命令(zb reset 只重置安装状态)。社区实践是:移除 zb/zbx 二进制、删掉 ~/.local/share/zerobrew(或安装脚本输出提示的数据目录)与 /opt/zerobrew,再清理 shell 配置里的 PATH 条目。**具体路径以安装脚本打印的输出为准**,不同版本可能不同。

3.4 故障排查思路


zb --help     # 确认命令与参数,版本不同可能不同
zb doctor     # 自检,--repair 自动修
zb -v <cmd>   # 开详细日志定位


还不行就带 zb -v 输出、版本号、OS、zb doctor 结果去 GitHub Issues。

总结


zerobrew 适合当 Homebrew 的并行补充:小包交给 zb 提速,GUI 和特殊 tap 留 brew,回退函数让两者无缝。它仍是实验性项目,兼容范围、store 打理、PATH 规划都得自己操心。等哪天补齐 cask、tap 和 brew services 这类守护进程管理,才谈得上真正搬家。

参考


- GitHub:https://github.com/lucasgelfond/zerobrew
- 官网:https://zerobrew.rs/
- 中文 README:https://github.com/lucasgelfond/zerobrew/blob/main/README.zh.md
- CHANGELOG:https://github.com/lucasgelfond/zerobrew/blob/main/CHANGELOG.md