Skip to main content
BlueForge
ProductSeptember 17, 20263 min read

The Eighth Ecosystem

Kristian Mandrup

Founder & CEO

forge-registry supports eight package ecosystems now. RubyGems is the newest, and it arrived the way the others did: as a self-contained piece of work that has to be correct in the same places every time.

What an ecosystem actually costs

Adding a package format is not one adapter. It is a set of obligations that all have to be met, and the six commits that landed RubyGems in a day are the checklist:

  • The adapter and route table — plumbing, and the easy part.
  • A real publish flow with authentication and a credential probe, so a bad token fails at publish time rather than at install time.
  • The compact index, download and version comparison — including the format's own version semantics, which are not semver and cannot be approximated with it.
  • The cross-ecosystem yank gate — a package yanked for one format has to be refused everywhere.
  • The visibility gate, per-name scope, and an end-to-end test, plus a CLI subcommand so the flow is usable without reading source.

The parts that are shared across all eight formats are the ones that catch us: authorization, visibility, yanking, audit. The parts that are unique — index format, version rules, publish contract — are comparatively safe, because a mistake there fails loudly against a real client.

The eight

npm, PyPI, Maven, Cargo, Docker, NuGet, Composer, RubyGems. Version comparison alone means maintaining semver, PEP 440, Maven's own ordering, and now Ruby's Gem::Version — none of which agree, and each of which will happily accept a string the others silently mis-sort.

The detail I liked most

The follow-up commit is titled, plainly:

list RubyGems alongside the other seven on the public site

The registry had been serving eight ecosystems and our own marketing page still said seven. That is the ordinary tax of shipping faster than you document — and it is the fourth time this quarter we have found the site describing a system that had moved on without it.

Why eight and not one

The honest answer is that the hardcoded assumptions are the point. Every ecosystem we add forces the shared machinery — visibility, yanking, ownership, metering, audit — to be expressed as a mechanism rather than as a special case for whichever format we wrote first. A registry that supports one format is a program. The third one is where you find out whether the first two were designed or merely written.

Eight is also where the fleet's own consumption starts to pay for it: we publish to our own registry from our own repositories in more than one format, which means the first user of every new ecosystem is us, on a normal working day.

Stay in the Loop

Get early access to our products and be the first to know when we launch.

Join the Waiting List