Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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 public tomato-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

  1. Tag the module repo at the release commit — the tag is v<version> (matching the version in its MODULE.bazel):

    git tag v0.1.0 && git push origin v0.1.0
    

    The 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.

  2. From a bazel-registry checkout, cut the version — rels fetches the tag tarball, computes the integrity, and writes modules/<name>/<version>/{source.json, MODULE.bazel} + upserts metadata.json:

    bazel run //tools/rels:rels -- release \
      --repo tomato-bazel/<repo> --version 0.1.0 --name <module_name>
    
  3. Commit + push. registry.tbzl.dev serves the new version within about a minute.

Conventions

  • Module name is the bzlmod module name (snake_case), which may differ from the repo basename — pass --name when it does.
  • rels audit flags 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/.

ModuleLatestVersionsSource
bazel_dep(name = "botnoc", version = "0.1.0")0.1.01github:fastverk/botnoc
bazel_dep(name = "brand", version = "0.3.1")0.3.14github:fastverk/brand
bazel_dep(name = "brando", version = "0.1.0")0.1.02github:mattmarshall/brando
bazel_dep(name = "buildbarn", version = "0.0.2")0.0.22github:fastverk/buildbarn
bazel_dep(name = "fastverk-app", version = "0.0.2")0.0.22github:fastverk/fastverk-app
bazel_dep(name = "forge", version = "0.0.1")0.0.11github:fastverk/forge
bazel_dep(name = "fvkit", version = "0.0.7")0.0.77github:fastverk/fvkit
bazel_dep(name = "meridian", version = "0.2.4")0.2.47github:mattmarshall/meridian
bazel_dep(name = "meridian_schemas", version = "0.3.0")0.3.03github:meridian-ux/meridian-schemas
bazel_dep(name = "meridian_tui", version = "0.2.0")0.2.02github:meridian-ux/meridian-tui
bazel_dep(name = "meridian_uiview_core", version = "0.2.0")0.2.04github:meridian-ux/meridian-uiview-core
bazel_dep(name = "meridian_web", version = "0.2.0")0.2.04github:meridian-ux/meridian-web
bazel_dep(name = "pinax", version = "0.1.0")0.1.01github:mattmarshall/pinax
bazel_dep(name = "rules_agentic_ide", version = "0.0.4")0.0.44github:tomato-bazel/rules_agentic_ide
bazel_dep(name = "rules_aip", version = "0.2.2")0.2.24github:tomato-bazel/rules_aip
bazel_dep(name = "rules_autoconf", version = "0.1.0")0.1.01github:tomato-bazel/rules_autoconf
bazel_dep(name = "rules_beam", version = "0.0.2")0.0.21github:tomato-bazel/rules_beam
bazel_dep(name = "rules_bibtex", version = "0.0.6")0.0.66github:tomato-bazel/rules_bibtex
bazel_dep(name = "rules_bun", version = "0.4.0")0.4.05github:tomato-bazel/rules_bun
bazel_dep(name = "rules_cc_cross", version = "0.1.0")0.1.01github:tomato-bazel/rules_cc_cross
bazel_dep(name = "rules_cc_host", version = "0.1.0")0.1.01github:tomato-bazel/rules_cc_host
bazel_dep(name = "rules_chrome", version = "0.1.1")0.1.12github:tomato-bazel/rules_chrome
bazel_dep(name = "rules_ci", version = "0.0.3")0.0.31github:tomato-bazel/rules_ci
bazel_dep(name = "rules_ci_ir", version = "0.0.1")0.0.11github:tomato-bazel/rules_ci_ir
bazel_dep(name = "rules_cloudformation", version = "0.8.0")0.8.011github:tomato-bazel/rules_cloudformation
bazel_dep(name = "rules_docker", version = "0.2.6")0.2.68github:fastverk/rules_docker_compose
bazel_dep(name = "rules_eslint", version = "0.1.0")0.1.01github:tomato-bazel/rules_eslint
bazel_dep(name = "rules_fastverk", version = "0.0.3")0.0.33github:tomato-bazel/rules_fastverk
bazel_dep(name = "rules_github", version = "0.1.2")0.1.23github:tomato-bazel/rules_github
bazel_dep(name = "rules_gitlab", version = "0.3.4")0.3.410github:tomato-bazel/rules_gitlab
bazel_dep(name = "rules_graphviz", version = "0.1.0")0.1.01github:tomato-bazel/rules_graphviz
bazel_dep(name = "rules_helm", version = "0.1.0")0.1.01github:tomato-bazel/rules_helm
bazel_dep(name = "rules_huggingface", version = "0.0.3")0.0.31github:tomato-bazel/rules_huggingface
bazel_dep(name = "rules_jena", version = "0.3.2")0.3.28github:tomato-bazel/rules_jena
bazel_dep(name = "rules_jsonschema", version = "0.3.0")0.3.03github:tomato-bazel/rules_jsonschema
bazel_dep(name = "rules_lang", version = "0.4.0")0.4.03github:tomato-bazel/rules_lang
bazel_dep(name = "rules_lean", version = "0.5.3")0.5.319github:tomato-bazel/rules_lean
bazel_dep(name = "rules_lora", version = "0.1.3")0.1.338github:tomato-bazel/rules_lora
bazel_dep(name = "rules_macvm", version = "0.0.1")0.0.11github:tomato-bazel/rules_macvm
bazel_dep(name = "rules_markdown", version = "0.0.3")0.0.33github:tomato-bazel/rules_markdown
bazel_dep(name = "rules_mdbook", version = "0.3.1")0.3.14github:tomato-bazel/rules_mdbook
bazel_dep(name = "rules_meridian", version = "0.2.1")0.2.13github:mattmarshall/meridian
bazel_dep(name = "rules_meson", version = "0.0.1")0.0.12github:tomato-bazel/rules_meson
bazel_dep(name = "rules_nextjs", version = "0.3.0")0.3.04github:tomato-bazel/rules_nextjs
bazel_dep(name = "rules_openapi", version = "0.2.1")0.2.13github:tomato-bazel/rules_openapi
bazel_dep(name = "rules_podman", version = "0.0.2")0.0.22github:tomato-bazel/rules_podman
bazel_dep(name = "rules_postgres", version = "0.8.0")0.8.07github:tomato-bazel/rules_postgres
bazel_dep(name = "rules_puml", version = "0.0.2")0.0.22github:tomato-bazel/rules_puml
bazel_dep(name = "rules_rdf", version = "0.4.0")0.4.05github:tomato-bazel/rules_rdf
bazel_dep(name = "rules_readme", version = "0.0.3")0.0.33github:tomato-bazel/rules_readme
bazel_dep(name = "rules_runpod", version = "0.0.11")0.0.1110github:fastverk/rules_runpod
bazel_dep(name = "rules_schema_org", version = "0.0.1")0.0.11github:tomato-bazel/rules_schema_org
bazel_dep(name = "rules_spec", version = "0.5.1")0.5.17github:fastverk/rules_spec
bazel_dep(name = "rules_ssh_tui", version = "0.0.5")0.0.55github:tomato-bazel/rules_ssh_tui
bazel_dep(name = "rules_storybook", version = "0.2.0")0.2.02github:tomato-bazel/rules_storybook
bazel_dep(name = "rules_systemd", version = "0.0.1")0.0.11github:tomato-bazel/rules_systemd
bazel_dep(name = "rules_tap", version = "0.0.3")0.0.33github:tomato-bazel/rules_tap
bazel_dep(name = "rules_tectonic", version = "0.2.0")0.2.03github:tomato-bazel/rules_tectonic
bazel_dep(name = "rules_tomato", version = "0.1.1")0.1.12github:tomato-bazel/rules_tomato
bazel_dep(name = "rules_uv", version = "0.7.4")0.7.412github:tomato-bazel/rules_uv
bazel_dep(name = "rules_vite", version = "0.1.1")0.1.12github:tomato-bazel/rules_vite
bazel_dep(name = "rules_vscode", version = "0.0.2")0.0.21github:tomato-bazel/rules_vscode
bazel_dep(name = "rules_walkthrough", version = "0.1.0")0.1.01github:fastverk/rules_walkthrough
bazel_dep(name = "rules_web", version = "0.0.1")0.0.11github:tomato-bazel/rules_web
bazel_dep(name = "rules_xsd", version = "0.0.1")0.0.11github:tomato-bazel/rules_xsd
bazel_dep(name = "spec", version = "0.5.2")0.5.21github:fastverk/spec
bazel_dep(name = "tomato_brand", version = "0.0.1")0.0.11github:tomato-bazel/brand
bazel_dep(name = "vpn", version = "0.0.1")0.0.11github:fastverk/vpn
bazel_dep(name = "wave", version = "0.0.1")0.0.11github:fastverk/wave