nanobrew v0.1.192

Native installs. No Homebrew runtime.
119.4x faster than Homebrew. 37.5x faster than zerobrew.

Top 100 Homebrew formulae and top 100 casks now run through nanobrew's own Zig install path. Covered packages do not need Homebrew installed, do not spawn brew, and do not touch the Ruby metadata path.

359 verified native paths: 256 formula records plus 103 cask records. nanobrew resolves, downloads, verifies, extracts, caches, links, shims, and records install state itself.

nb update # to v0.1.192
119.4x faster than Homebrew on yt-dlp target reinstall
37.5x faster than zerobrew on the same CI path
359 native paths covering top 100 formulae + top 100 casks

yt-dlp target reinstall: nanobrew 48.8ms → zerobrew 1830.7ms → Homebrew 5827.7ms. Sandboxed macOS Actions runner, 5 iterations.

CI package-manager comparison — yt-dlp

Target reinstall means dependencies and cache/store were primed, then only yt-dlp was removed and installed again. Current nanobrew runs as nb install --shims yt-dlp and smoke-tests that yt-dlp --version works while dependency tools stay private.

target reinstall lower is better
119.4x faster than Homebrew
Homebrew 5.1.7
5827.7ms
zerobrew 0.2.1
1830.7ms
nb v0.1.191
3385.2ms
nb v0.1.192
48.8ms
already installed no-op lower is better
186.8x faster than zerobrew
nb v0.1.191
3183.7ms
zerobrew 0.2.1
1083.2ms
Homebrew 5.1.7
916.9ms
nb v0.1.192
5.8ms
native nanobrew vs non-native nanobrew same CI path
69.4x reinstall / 548.9x no-op
non-native target
3385.2ms
native target
48.8ms
non-native no-op
3183.7ms
native no-op
5.8ms

Native install path

The shimmed path exposes the requested tool while keeping dependency executables out of the global prefix.

$ nb install --shims yt-dlp
==> Using verified upstream release metadata for yt-dlp
==> Installing dependencies privately for shim runtime
==> Linking requested command through prefix/bin/yt-dlp
==> Done in 48.8ms on the target reinstall benchmark

$ yt-dlp --version
2026.03.17

$ ls /opt/nanobrew/prefix/bin/deno /opt/nanobrew/prefix/bin/python3.14
not exposed globally; shim PATH is private

Release status

x86 is not supported in v0.1.192 because of a Rosetta signed-binary bug. Fresh unsigned x86 builds run under Rosetta with status 0, but signed/notarized x86 exits 139. A universal signed binary also runs the arm64 slice fine while the x86 slice still exits 139. Apple accepts notarization, but the actual Rosetta smoke test fails, so the x86 artifact is not safe to release as-is.

Public issue credits

Thanks to @SteveXFLiu for the cask MountFailed/ExtractFailed report that drove the cask installer IO fix in this branch.

Thanks to @jet10000 and @edvardm for the x86 startup crash reports. Those reports are why this release now calls out the Rosetta signed-binary blocker instead of publishing a broken x86 artifact.

What changed in v0.1.192

359

Verified native paths

The embedded registry now carries 256 formula records and 103 cask records, covering 100/100 top Homebrew formulae and 100/100 top casks from the April 25, 2026 snapshot.

0

No Homebrew dependency

Covered packages do not shell out to brew, require a Homebrew prefix, or boot Ruby. Bottle-backed records still use verified artifact URLs and checksums; nanobrew owns the install work.

5.8ms

Fast no-op installs

Already-installed shimmed packages now exit through the native state path in single-digit milliseconds on CI, 548.9x faster than v0.1.191 in the same workflow.

--shims

Private runtime deps

nb install --shims yt-dlp exposes yt-dlp but keeps helper binaries such as deno and python private, then injects them only into the wrapper's PATH.

CI

Sandboxed comparisons

GitHub Actions now compares current nanobrew, previous nanobrew, Homebrew, and pinned zerobrew on disposable macOS runners without polluting a developer machine.

off

Anonymous telemetry control

nb telemetry off and nanobrew telemetry off make opt-out explicit. Events are anonymized and intended to prioritize which native paths to build next.

What native means here

v0.1.192 moves the common path out of metadata lookup and into nanobrew's own install machinery.

Phasev0.1.192 behaviorWhy it matters
ResolveLoads the verified upstream registry from local cache, hosted registry, or embedded fallback and parses the matching record.No full formula-list parse on the hot path.
FetchUses Zig native HTTP with streaming SHA256 verification and content-addressed blob caching.No curl process and no second hash pass.
ExtractUses native source-archive, bottle, and cask pipelines with cached relocated store entries.Reinstalls skip repeated download/extraction/relocation work.
LinkRepairs links only when needed and can create wrapper shims for private dependency runtimes.Common already-installed and target-reinstall paths stay tiny.