Bazel website screenshot

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.

5 APIs 12 Features
Build SystemsBuild ToolBzlmodCI/CDDeveloper ToolsHermetic BuildsMonorepoOpen SourceRemote ExecutionStarlark

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

Multi-Language Support

One build tool spans Java, C++, Go, Python, Rust, Swift, Kotlin, Scala, Android, iOS, Objective-C, and dozens of community-maintained language rules.

Hermetic, Reproducible Builds

Sandboxed action execution and explicit dependency declarations make Bazel builds reproducible across machines and CI runners.

Incremental Builds

Fine-grained action graph and Merkle-tree based caching mean only what changed gets rebuilt, even in monorepos with millions of targets.

Remote Caching and Execution

Bazel speaks the open Remote Execution API (REAPI) so teams can share a Content-Addressable Store and offload actions to a remote build farm.

Bzlmod External Dependencies

MODULE.bazel + the Bazel Central Registry replace the legacy WORKSPACE system with versioned, transitive, registry-resolved modules.

Starlark Extension Language

A deterministic Python-like DSL for writing custom rules, repository rules, module extensions, and aspects without touching Bazel internals.

Build Event Protocol

Every invocation emits a structured BEP/BES stream consumable by CI dashboards, observability tools, and flake detectors.

Query Languages

bazel query, cquery (configured), and aquery (action graph) let you inspect dependency graphs, configuration transitions, and the actual actions Bazel will run.

Toolchain Resolution

Platform-aware toolchain selection lets one BUILD graph target Linux, macOS, Windows, Android, iOS, and embedded targets from the same source tree.

Persistent Workers

Long-lived worker processes (javac, scalac, etc.) amortize JVM and compiler startup across many actions for faster incremental builds.

Bazel Central Registry

Default public index of Bazel modules at bcr.bazel.build with searchable UI at registry.bazel.build.

Bazelisk Version Launcher

Pins the exact Bazel version per project via .bazelversion so every contributor and CI runner uses the same build tool.

Semantic Vocabularies

Bazel Build Context

33 classes · 2 properties

JSON-LD

API Governance Rules

Bazel API Rules

6 rules · 1 errors 5 warnings

SPECTRAL

Example Payloads

Bcr Source Archive Example

6 fields

EXAMPLE

Resources

🌐
Portal
Portal
🔗
Documentation
Documentation
🚀
GettingStarted
GettingStarted
🔗
APIReference
APIReference
📰
Blog
Blog
👥
GitHubOrganization
GitHubOrganization
👥
GitHubRepository
GitHubRepository
👥
GitHubRepository
GitHubRepository
👥
GitHubRepository
GitHubRepository
👥
GitHubRepository
GitHubRepository
👥
GitHubRepository
GitHubRepository
👥
GitHubRepository
GitHubRepository
👥
GitHubRepository
GitHubRepository
📄
ChangeLog
ChangeLog
🔗
Issues
Issues
🔗
RoadMap
RoadMap
🔗
Governance
Governance
📜
TermsOfService
TermsOfService
🔗
Security
Security
🔗
Forums
Forums
👥
StackOverflow
StackOverflow
🔧
Tools
Tools
🔧
Tools
Tools
🔧
Tools
Tools
📦
SDKs
SDKs
📦
SDKs
SDKs
📦
SDKs
SDKs
📦
SDKs
SDKs
📦
SDKs
SDKs
📦
SDKs
SDKs
📦
SDKs
SDKs
📦
SDKs
SDKs
📦
SDKs
SDKs
📦
SDKs
SDKs
📦
SDKs
SDKs
📦
SDKs
SDKs
📦
SDKs
SDKs
📦
SDKs
SDKs
📦
SDKs
SDKs
🔗
Plugins
Plugins
🔗
Plugins
Plugins
💻
CodeExamples
CodeExamples
🔗
Vocabulary
Vocabulary
🔗
JSONLD
JSONLD
🔗
SpectralRules
SpectralRules
🔗
License
License

Sources

Raw ↑
opencollection: 1.0.0
info:
  name: Bazel Central Registry API
  version: '1.0'
items:
- info:
    name: Registry
    type: folder
  items:
  - info:
      name: Get Registry Metadata
      type: http
    http:
      method: GET
      url: https://bcr.bazel.build/bazel_registry.json
    docs: Returns the registry-wide metadata document. Lists optional source-archive mirrors and the base path for `local_path`
      source types. May be absent on minimal registries.
- info:
    name: Modules
    type: folder
  items:
  - info:
      name: Get Module Metadata
      type: http
    http:
      method: GET
      url: https://bcr.bazel.build/modules/:module/metadata.json
      params:
      - name: module
        value: ''
        type: path
        description: Module name, e.g. `rules_python`, `rules_go`, `protobuf`.
    docs: Returns the module-level metadata document — homepage, maintainers, available versions, and any yanked versions
      with their explanations.
  - info:
      name: Get Module Manifest
      type: http
    http:
      method: GET
      url: https://bcr.bazel.build/modules/:module/:version/MODULE.bazel
      params:
      - name: module
        value: ''
        type: path
        description: Module name, e.g. `rules_python`, `rules_go`, `protobuf`.
      - name: version
        value: ''
        type: path
        description: Module version string. Bazel uses an extended SemVer ordering that also tolerates suffixes such as `1.2.3.bcr.1`.
    docs: Returns the MODULE.bazel manifest for a specific version of a module. This is the Starlark file that declares the
      module's name, version, transitive bazel_dep() entries, module extensions, and use_repo() calls.
  - info:
      name: Get Module Source
      type: http
    http:
      method: GET
      url: https://bcr.bazel.build/modules/:module/:version/source.json
      params:
      - name: module
        value: ''
        type: path
        description: Module name, e.g. `rules_python`, `rules_go`, `protobuf`.
      - name: version
        value: ''
        type: path
        description: Module version string. Bazel uses an extended SemVer ordering that also tolerates suffixes such as `1.2.3.bcr.1`.
    docs: Returns fetch instructions for the module source — archive URL and integrity hash, git repository + commit, or local
      path. Bazel uses this to download and stage the module source on disk.
  - info:
      name: Get Module Presubmit Configuration
      type: http
    http:
      method: GET
      url: https://bcr.bazel.build/modules/:module/:version/presubmit.yml
      params:
      - name: module
        value: ''
        type: path
        description: Module name, e.g. `rules_python`, `rules_go`, `protobuf`.
      - name: version
        value: ''
        type: path
        description: Module version string. Bazel uses an extended SemVer ordering that also tolerates suffixes such as `1.2.3.bcr.1`.
    docs: Returns the Buildkite-format presubmit CI configuration the BCR uses to verify each module version. This file is
      specific to the Bazel Central Registry — it is not part of the generic index-registry protocol.
bundled: true