Articles

ARBOR 001 - The Bazel Local Registry Pattern for Large Polyrepos That Want to Behave Like Monorepos

May 23, 2026

Bazel Monorepos Legacy ARBOR

The ARBOR series (short for “Approaches to Refactoring Big Old Repositories”) covers the techniques I’ve found and implemented when working on large project repositories, typically during a migration into Bazel. I do not claim these techniques are Bazel-idiomatic, but rather “as idiomatic as possible while working with the unique constraints of individual legacy projects”. If your project has a similar set of constraints, maybe they’ll be useful!

In this article, I’ll show you how a custom Bazel registry solved a tricky dependency problem in a multi-million line polyrepo, and why I reached for it instead of the standard override approach.

The Day Gazelle Leaked Its Abstractions - A rules_jvm Story

November 11, 2025

Bazel Gazelle rules_jvm

Every now and again, I find myself in the mood to test the limits of the Gazelle extension API. As far as abstractions go, I like it!

It’s one of those APIs that always seems too simple at first glance, too limited. There’s no way this weird thing I need to do will fit neatly into it, right? Right?

Well, it always turns out that yes, indeed, my case was supported and fit in quite well. And no, please, don’t break out of the abstractions because it’ll mess up with the execution order of Gazelle. Props to the authors, because there always seemed to be a magic parameter of a method that was typed just loosely enough that I could hook into it and do exactly what I need.

That is, until I tackled java_exports.