Skip to content

Dependencies in Bazel ​

This guide explains how to manage dependencies in your Bazel projects effectively.

Understanding Dependencies ​

Dependencies in Bazel can be:

  • Local (within your workspace)
  • External (from remote repositories)
  • System-level (tools and libraries)

Declaring Dependencies ​

In your BUILD files:

python
cc_library(
    name = "my_lib",
    deps = [
        "//path/to/other:lib",
        "@external_repo//some:lib",
    ],
)

Managing External Dependencies ​

There are two main approaches to managing external dependencies in Bazel:

Using WORKSPACE (Traditional Approach) ​

python
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

http_archive(
    name = "com_google_googletest",
    urls = ["https://github.com/google/googletest/archive/release-1.11.0.zip"],
    strip_prefix = "googletest-release-1.11.0",
    sha256 = "...",
)

Using Bzlmod (Modern Approach) ​

In your MODULE.bazel file:

python
module(
    name = "my_project",
    version = "1.0",
)

bazel_dep(name = "googletest", version = "1.11.0")

Best Practices ​

  1. Use precise versions for external dependencies
  2. Always include SHA-256 hashes for http_archive rules
  3. Prefer Bzlmod over WORKSPACE for new projects (Bzlmod is the modern dependency management system)
  4. Keep dependencies close to where they're used
  5. Use recommended rules from well-maintained rule sets

Released under the MIT License.