{
  "$type": "site.standard.document",
  "bskyPostRef": {
    "cid": "bafyreifkrozqzwd5uvb7glptfm2ry6kt6hytgop64bfsu2ehuzzlerf5mu",
    "uri": "at://did:plc:ivbknywyskln22er3nkssdhl/app.bsky.feed.post/3mffw3gy47ai2"
  },
  "path": "/t/child-thread-survey-of-registry-namespace-designs-for-cargo-and-crates-io/24030#post_7",
  "publishedAt": "2026-02-21T18:47:31.000Z",
  "site": "https://internals.rust-lang.org",
  "tags": [
    "Homebrew Taps"
  ],
  "textContent": "Homebrew Taps is another take for registries and namespacing.\n\nIt's technically quite similar to private registries in Cargo, but Homebrew's user interface makes all the difference. It's trivial to add a tap without editing any config files, so installing packages from taps doesn't feel more complicated or second-class compared to installing core Homebrew packages. It feels more like just installing namespaced Homebrew packages.\n\nI can run:\n\n\n    brew install filosottile/musl-cross/musl-cross\n\n\nwhich is a shorthand for:\n\n\n    brew tap filosottile/musl-cross\n    brew install musl-cross\n\n\n(and `brew tap user/repo` is a shorthand for `brew tap namespace-prefix URL` with a GitHub URL implied, but you can specify any other URL and then any prefix you want).\n\nThese commands subscribe to the \"alternative registry\" of `filosottile/musl-cross` and make its packages seamlessly available for installation and updates. `brew info musl-cross` finds the package from the tap (it requires a prefixed name only when there's a naming conflict between taps).\n\nSo even though `brew install $package` mostly behaves as one global shared namespace for packages, it only searches the taps I've added, not the whole world. So it's not really global, but more like a per-user curated namespace, populated only from user's preferred sources.\n\nThis is an interesting compromise for curation vs openness. The Homebrew core tap is curated, which is reassuring it won't suddenly spring drive-by typosquatted packages. At the same time it feels pretty open, because adding another tap is so easy, and once the tap is added, its packages blend with the core packages instead of being second-class. It also makes it very easy to publish company-internal tools without polluting a public registry.\n\nHomebrew doesn't have dependencies as sophisticated as Rust/Cargo, so the taps design doesn't have an answer for dealing with dependencies-of-dependencies and mixing of registries.",
  "title": "Child Thread: Survey of registry namespace designs for Cargo and Crates.io"
}