Bazel
Bazel is a fast, scalable, multi-language and extensible build tool open-sourced by Google. It supports software projects of any size across Java, C++, Go, Python, Rust, Swift, Kotlin, Scala, Android, iOS, and many other languages and platforms. Bazel uses a hermetic, sandboxed execution model with content-addressable caching, parallel builds, and remote execution. The project ships the `bazel` CLI, the Starlark extension language for build rules, the MODULE.bazel external-dependency system (Bzlmod), and the Bazel Central Registry — a public HTTP index registry that hosts community-maintained Bazel modules.
APIs
Bazel Central Registry API
The Bazel Central Registry (BCR) is the default index registry consulted by Bzlmod, Bazel's external dependency management system. The BCR exposes a stable HTTP layout at https:...
Bazel Command Line Interface
The `bazel` command line tool is the primary user-facing surface of Bazel. It exposes commands such as `build`, `test`, `run`, `query`, `cquery`, `aquery`, `mod`, `fetch`, `info...
Bazel Starlark Build API
Bazel's build rules, macros, and module extensions are written in Starlark — a deterministic Python dialect. The Starlark Build API exposes the rule(), repository_rule(), module...
Bazel Remote Execution API
Bazel speaks the open Remote Execution API (REAPI), a gRPC protocol for content-addressable storage and distributed action execution. REAPI lets Bazel offload compile, test, and...
Bazel Build Event Protocol
The Build Event Protocol (BEP) is Bazel's structured stream of build events — target configured, progress, test results, action executed, build finished — emitted during every i...
Collections
Features
One build tool spans Java, C++, Go, Python, Rust, Swift, Kotlin, Scala, Android, iOS, Objective-C, and dozens of community-maintained language rules.
Sandboxed action execution and explicit dependency declarations make Bazel builds reproducible across machines and CI runners.
Fine-grained action graph and Merkle-tree based caching mean only what changed gets rebuilt, even in monorepos with millions of targets.
Bazel speaks the open Remote Execution API (REAPI) so teams can share a Content-Addressable Store and offload actions to a remote build farm.
MODULE.bazel + the Bazel Central Registry replace the legacy WORKSPACE system with versioned, transitive, registry-resolved modules.
A deterministic Python-like DSL for writing custom rules, repository rules, module extensions, and aspects without touching Bazel internals.
Every invocation emits a structured BEP/BES stream consumable by CI dashboards, observability tools, and flake detectors.
bazel query, cquery (configured), and aquery (action graph) let you inspect dependency graphs, configuration transitions, and the actual actions Bazel will run.
Platform-aware toolchain selection lets one BUILD graph target Linux, macOS, Windows, Android, iOS, and embedded targets from the same source tree.
Long-lived worker processes (javac, scalac, etc.) amortize JVM and compiler startup across many actions for faster incremental builds.
Default public index of Bazel modules at bcr.bazel.build with searchable UI at registry.bazel.build.
Pins the exact Bazel version per project via .bazelversion so every contributor and CI runner uses the same build tool.