Back to Devoured - October 09, 2026
DEVOURED
zerobrew (GitHub Repo)

zerobrew (GitHub Repo)

Tech GitHub
zerobrew brings uv-style performance to Homebrew by using content-addressed storage to achieve significantly faster package installation speeds.
What: zerobrew replaces Homebrew's traditional install logic—which involves slow binary re-signing and path rewriting—with in-process relocation and hard-linking from a central store.
Why it matters: The shift toward 'uv-style' architecture (content-addressable, highly cached) is becoming the new standard for package managers, prioritizing installation performance for ephemeral development environments.
Takeaway: Test your existing Brewfile with `zb bundle` to compare installation speeds against standard Homebrew.
Deep dive
  • Content-Addressable Storage: Files are stored based on their content hash, enabling automatic deduplication and zero-overhead copying.
  • Performance Gains: Benchmarks show significant improvements in 'warm' installs (where dependencies are cached) compared to standard Homebrew.
  • Compatibility: zerobrew reuses Homebrew's existing 'bottles' (pre-compiled binary packages), requiring no changes to formula definitions.
  • Design Philosophy: It treats the package store as an interface for linking rather than a place to rebuild and sign binaries upon every invocation.
  • Risk: The project is currently experimental and intended for use alongside, rather than as a total replacement for, the official Homebrew client.
Decoder
  • Bottle: The term used by Homebrew for a pre-compiled binary package.
  • Formula: A Ruby script that defines how to download, compile, and install a piece of software in Homebrew.
  • Keg: The specific directory in the Homebrew cellar where a package is installed.
Original article

zerobrew

zerobrew brings uv-style architecture to Homebrew packages on macOS and Linux.

Install

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

The installer updates your shell config. After it finishes, restart your terminal or run the source command it prints.

Or via Homebrew:

brew install zerobrewhq/zerobrew/zerobrew

Update zerobrew

If you used the standalone installer, rerun it:

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

If you installed with Homebrew:

brew update && brew upgrade zerobrew

If you installed from the old lucasgelfond/zerobrew tap, it's no longer updated. Switch to the new one:

brew uninstall zerobrew
brew untap lucasgelfond/zerobrew
brew install zerobrewhq/zerobrew/zerobrew

Quick start

zb install jq                   # install one package
zb install wget git             # install multiple
zb bundle                       # install from Brewfile
zb bundle install -f myfile     # install from custom file
zb bundle dump                  # export installed packages to Brewfile
zb bundle dump -f out --force   # dump to custom file (overwrite)
zb uninstall jq                 # uninstall one package
zb outdated                     # list packages with newer versions
zb upgrade                      # upgrade all outdated packages
zb upgrade jq wget              # upgrade specific packages
zb reset                        # uninstall everything
zb gc                           # garbage collect unused store entries
zbx jq --version                # run without linking

Performance snapshot

Package Homebrew (cold) ZB (cold) Cold speedup Homebrew (warm) ZB (warm) Warm speedup
Overall (100 packages) 776s 117s 6.6x 638s 9.3s 68x
python@3.14 16.99s 1.97s 8.6x 14.37s 207ms 69.4x
node 29.31s 3.16s 9.3x 28.24s 232ms 121.7x
tesseract 34.63s 2.16s 16.0x 32.37s 476ms 68.0x
openjdk 32.09s 5.17s 6.2x 26.86s 448ms 60.0x
llvm 18.22s 9.14s 2.0x 9.66s 183ms 52.8x

Measured on 2026-10-08 with zerobrew 0.3.5 (development release) and Homebrew 7.0.8 on macOS 26.6.2, MacBook Pro (M3 Pro, 18 GB RAM), ~318 Mbit/s download bandwidth. Homebrew started with nothing installed.

  • Cold: the package and all of its dependencies uninstalled, empty download cache.
  • Warm: the package and all of its dependencies uninstalled, downloads from the cold run still cached.
  • The median package was 5.3x faster cold and 56x faster warm. Per package, cold ranged from 1.6x (go) to 20x (ca-certificates) and warm from 18x (go) to 252x (ca-certificates). 24 of the 100 packages installed 100x faster or more warm, which is what the asterisk on the tagline refers to.
  • Cold installs are bound by the link. The same run on a ~69 Mbit/s connection came out at 3.3x cold and 69x warm. Big bottles like go and llvm spend nearly all of their cold time downloading, so both tools land close together there.
  • zerobrew doesn't run post-install steps yet. Homebrew did in these runs, so for the 13 formulae here that have them (ca-certificates, fontconfig, gcc, glib, gnupg, gnutls, llvm, node, openssl@3, python@3.13, python@3.14, ruby, unbound) Homebrew is doing work we aren't. ca-certificates is the obvious one, its step rebuilds the cert bundle. Next run gets --skip-post-install on the brew side until we run them too.
  • Warm installs use more disk. After an uninstall brew keeps the bottle, we keep the bottle and the unpacked keg in the store. That's the whole reason a reinstall is a clone and not a rebuild.

A note on how we are achieving these speeds

WRT Homebrew, I want it to be clear that both brew and zerobrew install the same bottles from Homebrew's build farm.

The difference is what happens after the download: Homebrew runs Ruby to evaluate the formula, unpacks, rewrites paths with install_name_tool, and re-signs each binary one at a time, while zerobrew does the relocation in-process and links from a content-addressed store, so it pays for the download once and almost nothing after.

I want it to be clear that we are basically nothing without Homebrew's bottle build farm. Every package zerobrew installs is one they built, tested and published. We don't compile anything, we don't maintain formulae, and none of these numbers exist without that work. The speed comes from how the artifacts are installed, not from what's in them.

Relationship with Homebrew

zerobrew is more of a performance-optimized client for the Homebrew ecosystem. We rely on:

  • Homebrew's formula definitions (homebrew-core)
  • Homebrew's pre-built bottles when available
  • Homebrew's package metadata and infrastructure

Our innovations focus on:

  • Content-addressable storage for deduplication
  • APFS clonefiles for zero-overhead copying
  • Source build fallback using Homebrew's Ruby DSL

zerobrew is experimental. We recommend running it alongside Homebrew rather than as a replacement, and do not recommend purging homebrew and replacing it with zerobrew unless you are absolutely sure about the implications of doing so.

Project status

  • Status: Experimental, but quite useful. I (@cachebag) daily drive it myself.
  • Feedback: If you hit incompatibilities, please open an issue or PR.
  • License: Dual-licensed under Apache 2.0 OR MIT, at your choice. The source build shim is derived from Homebrew and is covered by its BSD 2-Clause license.
Explore all 55 articles in today's digest

Fresh dev news, AI-digested daily. Never miss a trend at devoured.fyi