tbzl.dev
tomato-bazel is a Bazel module registry and a set of
reusable rules_* for the modern, hermetic, bzlmod-first workflow.
registry.tbzl.dev— a bzlmod registry serving the tomato-bazel modules (rules_*, brand tooling, and more), fronted by a CDN over the publictomato-bazel/bazel-registry.static.tbzl.dev— the brand-assets CDN (marks, icons).tbzl.dev— this site.
Quick start
Point Bazel at the registry in your .bazelrc:
common --registry=https://registry.tbzl.dev/
common --registry=https://bcr.bazel.build/
Then depend on any module in your MODULE.bazel:
bazel_dep(name = "rules_tomato", version = "0.1.0")
See Using the registry for more, or browse all Modules.
Using the registry
Add the tomato-bazel registry to your .bazelrc, ahead of the BCR:
common --registry=https://registry.tbzl.dev/
common --registry=https://bcr.bazel.build/
Bazel consults registries left-to-right, so a module present in both resolves
from registry.tbzl.dev first, falling back to the BCR.
Depending on a module
In MODULE.bazel:
bazel_dep(name = "rules_tomato", version = "0.1.0")
Pins resolve to an immutable module version — registry.tbzl.dev/modules/<name>/<version>/
(MODULE.bazel + source.json). Version files are cached hard by the CDN; the
mutable index (metadata.json) is served with a short TTL, so a freshly-published
version is visible within about a minute.
What’s here
The Modules page lists every module and its versions. Sources live
in the public tomato-bazel/bazel-registry
repo.
Authoring a module
Modules are published to the registry with the rels tool (in
tomato-bazel/bazel-registry),
which cuts a version from a GitHub tag.
Cut a release
-
Tag the module repo at the release commit — the tag is
v<version>(matching theversionin itsMODULE.bazel):git tag v0.1.0 && git push origin v0.1.0The repo (and thus the tag tarball) must be public — a registry module’s source has to be anonymously fetchable, or keyless CI can’t resolve it.
-
From a
bazel-registrycheckout, cut the version —relsfetches the tag tarball, computes the integrity, and writesmodules/<name>/<version>/{source.json, MODULE.bazel}+ upsertsmetadata.json:bazel run //tools/rels:rels -- release \ --repo tomato-bazel/<repo> --version 0.1.0 --name <module_name> -
Commit + push.
registry.tbzl.devserves the new version within about a minute.
Conventions
- Module
nameis the bzlmod module name (snake_case), which may differ from the repo basename — pass--namewhen it does. rels auditflags tag↔registry drift, missing CI/CHANGELOG, and dep-pin drift.
Modules
69 modules in the tomato-bazel registry. Add to your .bazelrc: common --registry=https://registry.tbzl.dev/.
| Module | Latest | Versions | Source |
|---|---|---|---|
bazel_dep(name = "botnoc", version = "0.1.0") | 0.1.0 | 1 | github:fastverk/botnoc |
bazel_dep(name = "brand", version = "0.3.1") | 0.3.1 | 4 | github:fastverk/brand |
bazel_dep(name = "brando", version = "0.1.0") | 0.1.0 | 2 | github:mattmarshall/brando |
bazel_dep(name = "buildbarn", version = "0.0.2") | 0.0.2 | 2 | github:fastverk/buildbarn |
bazel_dep(name = "fastverk-app", version = "0.0.2") | 0.0.2 | 2 | github:fastverk/fastverk-app |
bazel_dep(name = "forge", version = "0.0.1") | 0.0.1 | 1 | github:fastverk/forge |
bazel_dep(name = "fvkit", version = "0.0.7") | 0.0.7 | 7 | github:fastverk/fvkit |
bazel_dep(name = "meridian", version = "0.2.4") | 0.2.4 | 7 | github:mattmarshall/meridian |
bazel_dep(name = "meridian_schemas", version = "0.3.0") | 0.3.0 | 3 | github:meridian-ux/meridian-schemas |
bazel_dep(name = "meridian_tui", version = "0.2.0") | 0.2.0 | 2 | github:meridian-ux/meridian-tui |
bazel_dep(name = "meridian_uiview_core", version = "0.2.0") | 0.2.0 | 4 | github:meridian-ux/meridian-uiview-core |
bazel_dep(name = "meridian_web", version = "0.2.0") | 0.2.0 | 4 | github:meridian-ux/meridian-web |
bazel_dep(name = "pinax", version = "0.1.0") | 0.1.0 | 1 | github:mattmarshall/pinax |
bazel_dep(name = "rules_agentic_ide", version = "0.0.4") | 0.0.4 | 4 | github:tomato-bazel/rules_agentic_ide |
bazel_dep(name = "rules_aip", version = "0.2.2") | 0.2.2 | 4 | github:tomato-bazel/rules_aip |
bazel_dep(name = "rules_autoconf", version = "0.1.0") | 0.1.0 | 1 | github:tomato-bazel/rules_autoconf |
bazel_dep(name = "rules_beam", version = "0.0.2") | 0.0.2 | 1 | github:tomato-bazel/rules_beam |
bazel_dep(name = "rules_bibtex", version = "0.0.6") | 0.0.6 | 6 | github:tomato-bazel/rules_bibtex |
bazel_dep(name = "rules_bun", version = "0.4.0") | 0.4.0 | 5 | github:tomato-bazel/rules_bun |
bazel_dep(name = "rules_cc_cross", version = "0.1.0") | 0.1.0 | 1 | github:tomato-bazel/rules_cc_cross |
bazel_dep(name = "rules_cc_host", version = "0.1.0") | 0.1.0 | 1 | github:tomato-bazel/rules_cc_host |
bazel_dep(name = "rules_chrome", version = "0.1.1") | 0.1.1 | 2 | github:tomato-bazel/rules_chrome |
bazel_dep(name = "rules_ci", version = "0.0.3") | 0.0.3 | 1 | github:tomato-bazel/rules_ci |
bazel_dep(name = "rules_ci_ir", version = "0.0.1") | 0.0.1 | 1 | github:tomato-bazel/rules_ci_ir |
bazel_dep(name = "rules_cloudformation", version = "0.8.0") | 0.8.0 | 11 | github:tomato-bazel/rules_cloudformation |
bazel_dep(name = "rules_docker", version = "0.2.6") | 0.2.6 | 8 | github:fastverk/rules_docker_compose |
bazel_dep(name = "rules_eslint", version = "0.1.0") | 0.1.0 | 1 | github:tomato-bazel/rules_eslint |
bazel_dep(name = "rules_fastverk", version = "0.0.3") | 0.0.3 | 3 | github:tomato-bazel/rules_fastverk |
bazel_dep(name = "rules_github", version = "0.1.2") | 0.1.2 | 3 | github:tomato-bazel/rules_github |
bazel_dep(name = "rules_gitlab", version = "0.3.4") | 0.3.4 | 10 | github:tomato-bazel/rules_gitlab |
bazel_dep(name = "rules_graphviz", version = "0.1.0") | 0.1.0 | 1 | github:tomato-bazel/rules_graphviz |
bazel_dep(name = "rules_helm", version = "0.1.0") | 0.1.0 | 1 | github:tomato-bazel/rules_helm |
bazel_dep(name = "rules_huggingface", version = "0.0.3") | 0.0.3 | 1 | github:tomato-bazel/rules_huggingface |
bazel_dep(name = "rules_jena", version = "0.3.2") | 0.3.2 | 8 | github:tomato-bazel/rules_jena |
bazel_dep(name = "rules_jsonschema", version = "0.3.0") | 0.3.0 | 3 | github:tomato-bazel/rules_jsonschema |
bazel_dep(name = "rules_lang", version = "0.4.0") | 0.4.0 | 3 | github:tomato-bazel/rules_lang |
bazel_dep(name = "rules_lean", version = "0.5.3") | 0.5.3 | 19 | github:tomato-bazel/rules_lean |
bazel_dep(name = "rules_lora", version = "0.1.3") | 0.1.3 | 38 | github:tomato-bazel/rules_lora |
bazel_dep(name = "rules_macvm", version = "0.0.1") | 0.0.1 | 1 | github:tomato-bazel/rules_macvm |
bazel_dep(name = "rules_markdown", version = "0.0.3") | 0.0.3 | 3 | github:tomato-bazel/rules_markdown |
bazel_dep(name = "rules_mdbook", version = "0.3.1") | 0.3.1 | 4 | github:tomato-bazel/rules_mdbook |
bazel_dep(name = "rules_meridian", version = "0.2.1") | 0.2.1 | 3 | github:mattmarshall/meridian |
bazel_dep(name = "rules_meson", version = "0.0.1") | 0.0.1 | 2 | github:tomato-bazel/rules_meson |
bazel_dep(name = "rules_nextjs", version = "0.3.0") | 0.3.0 | 4 | github:tomato-bazel/rules_nextjs |
bazel_dep(name = "rules_openapi", version = "0.2.1") | 0.2.1 | 3 | github:tomato-bazel/rules_openapi |
bazel_dep(name = "rules_podman", version = "0.0.2") | 0.0.2 | 2 | github:tomato-bazel/rules_podman |
bazel_dep(name = "rules_postgres", version = "0.8.0") | 0.8.0 | 7 | github:tomato-bazel/rules_postgres |
bazel_dep(name = "rules_puml", version = "0.0.2") | 0.0.2 | 2 | github:tomato-bazel/rules_puml |
bazel_dep(name = "rules_rdf", version = "0.4.0") | 0.4.0 | 5 | github:tomato-bazel/rules_rdf |
bazel_dep(name = "rules_readme", version = "0.0.3") | 0.0.3 | 3 | github:tomato-bazel/rules_readme |
bazel_dep(name = "rules_runpod", version = "0.0.11") | 0.0.11 | 10 | github:fastverk/rules_runpod |
bazel_dep(name = "rules_schema_org", version = "0.0.1") | 0.0.1 | 1 | github:tomato-bazel/rules_schema_org |
bazel_dep(name = "rules_spec", version = "0.5.1") | 0.5.1 | 7 | github:fastverk/rules_spec |
bazel_dep(name = "rules_ssh_tui", version = "0.0.5") | 0.0.5 | 5 | github:tomato-bazel/rules_ssh_tui |
bazel_dep(name = "rules_storybook", version = "0.2.0") | 0.2.0 | 2 | github:tomato-bazel/rules_storybook |
bazel_dep(name = "rules_systemd", version = "0.0.1") | 0.0.1 | 1 | github:tomato-bazel/rules_systemd |
bazel_dep(name = "rules_tap", version = "0.0.3") | 0.0.3 | 3 | github:tomato-bazel/rules_tap |
bazel_dep(name = "rules_tectonic", version = "0.2.0") | 0.2.0 | 3 | github:tomato-bazel/rules_tectonic |
bazel_dep(name = "rules_tomato", version = "0.1.1") | 0.1.1 | 2 | github:tomato-bazel/rules_tomato |
bazel_dep(name = "rules_uv", version = "0.7.4") | 0.7.4 | 12 | github:tomato-bazel/rules_uv |
bazel_dep(name = "rules_vite", version = "0.1.1") | 0.1.1 | 2 | github:tomato-bazel/rules_vite |
bazel_dep(name = "rules_vscode", version = "0.0.2") | 0.0.2 | 1 | github:tomato-bazel/rules_vscode |
bazel_dep(name = "rules_walkthrough", version = "0.1.0") | 0.1.0 | 1 | github:fastverk/rules_walkthrough |
bazel_dep(name = "rules_web", version = "0.0.1") | 0.0.1 | 1 | github:tomato-bazel/rules_web |
bazel_dep(name = "rules_xsd", version = "0.0.1") | 0.0.1 | 1 | github:tomato-bazel/rules_xsd |
bazel_dep(name = "spec", version = "0.5.2") | 0.5.2 | 1 | github:fastverk/spec |
bazel_dep(name = "tomato_brand", version = "0.0.1") | 0.0.1 | 1 | github:tomato-bazel/brand |
bazel_dep(name = "vpn", version = "0.0.1") | 0.0.1 | 1 | github:fastverk/vpn |
bazel_dep(name = "wave", version = "0.0.1") | 0.0.1 | 1 | github:fastverk/wave |