---
title: 'Query guide'
---

This page covers how to get started using Bazel's query language to trace
dependencies in your code.

For a language details and `--output` flag details, please see the
reference manuals, [Bazel query reference](/versions/8.0.1/query/language)
and [Bazel cquery reference](/versions/8.0.1/query/cquery). You can get help by
typing `bazel help query` or `bazel help cquery` on the
command line.

To execute a query while ignoring errors such as missing targets, use the
`--keep_going` flag.

## Finding the dependencies of a rule {#finding-rule-dependencies}

To see the dependencies of `//foo`, use the
`deps` function in bazel query:

<pre>
$ bazel query "deps(//foo)"
//foo:foo
//foo:foo-dep
...

</pre>

This is the set of all targets required to build `//foo`.

## Tracing the dependency chain between two packages {#tracing-dependency-chain}

The library `//third_party/zlib:zlibonly` isn't in the BUILD file for
`//foo`, but it is an indirect dependency. How can
we trace this dependency path?  There are two useful functions here:
`allpaths` and `somepath`. You may also want to exclude
tooling dependencies with `--notool_deps` if you care only about
what is included in the artifact you built, and not every possible job.

To visualize the graph of all dependencies, pipe the bazel query output through
  the `dot` command-line tool:

<pre>
$ bazel query "allpaths(//foo, third_party/...)" --notool_deps --output graph | dot -Tsvg > /tmp/deps.svg

</pre>

Note: `dot` supports other image formats, just replace `svg` with the
format identifier, for example, `png`.

When a dependency graph is big and complicated, it can be helpful start with a single path:

<pre>
$ bazel query "somepath(//foo:foo, third_party/zlib:zlibonly)"
//foo:foo
//translations/tools:translator
//translations/base:base
//third_party/py/MySQL:MySQL
//third_party/py/MySQL:_MySQL.so
//third_party/mysql:mysql
//third_party/zlib:zlibonly

</pre>

If you do not specify `--output graph` with `allpaths`,
you will get a flattened list of the dependency graph.

<pre>
$ bazel query "allpaths(//foo, third_party/...)"
  ...many errors detected in BUILD files...
//foo:foo
//translations/tools:translator
//translations/tools:aggregator
//translations/base:base
//tools/pkg:pex
//tools/pkg:pex_phase_one
//tools/pkg:pex_lib
//third_party/python:python_lib
//translations/tools:messages
//third_party/py/xml:xml
//third_party/py/xml:utils/boolean.so
//third_party/py/xml:parsers/sgmlop.so
//third_party/py/xml:parsers/pyexpat.so
//third_party/py/MySQL:MySQL
//third_party/py/MySQL:_MySQL.so
//third_party/mysql:mysql
//third_party/openssl:openssl
//third_party/zlib:zlibonly
//third_party/zlib:zlibonly_v1_2_3
//third_party/python:headers
//third_party/openssl:crypto

</pre>

### Aside: implicit dependencies {#implicit-dependencies}

The BUILD file for `//foo` never references
`//translations/tools:aggregator`. So, where's the direct dependency?

Certain rules include implicit dependencies on additional libraries or tools.
For example, to build a `genproto` rule, you need first to build the Protocol
Compiler, so every `genproto` rule carries an implicit dependency on the
protocol compiler. These dependencies are not mentioned in the build file,
but added in by the build tool. The full set of implicit dependencies is
  currently undocumented. Using `--noimplicit_deps` allows you to filter out
  these deps from your query results. For cquery, this will include resolved toolchains.

## Reverse dependencies {#reverse-dependencies}

You might want to know the set of targets that depends on some target. For instance,
if you're going to change some code, you might want to know what other code
you're about to break. You can use `rdeps(u, x)` to find the reverse
dependencies of the targets in `x` within the transitive closure of `u`.

Bazel's [Sky Query](/versions/8.0.1/query/language#sky-query)
supports the `allrdeps` function which allows you to query reverse dependencies
in a universe you specify.

## Miscellaneous uses {#miscellaneous-uses}

You can use `bazel query` to analyze many dependency relationships.

### What exists ... {#what-exists}

#### What packages exist beneath `foo`? {#what-exists-beneath-foo}

<pre>
bazel query 'foo/...' --output package

</pre>

#### What rules are defined in the `foo` package? {#rules-defined-in-foo}

<pre>
bazel query 'kind(rule, foo:*)' --output label_kind

</pre>

#### What files are generated by rules in the `foo` package? {#files-generated-by-rules}

<pre>
bazel query 'kind("generated file", //foo:*)'

</pre>

#### What targets are generated by starlark macro `foo`? {#targets-generated-by-foo}

<pre>
bazel query 'attr(generator_function, foo, //path/to/search/...)'

</pre>

#### What's the set of BUILD files needed to build `//foo`? {#build-files-required}

<pre>
bazel query 'buildfiles(deps(//foo))' | cut -f1 -d:
</pre>

#### What are the individual tests that a `test_suite` expands to? {#individual-tests-in-testsuite}

<pre>
bazel query 'tests(//foo:smoke_tests)'

</pre>

#### Which of those are C++ tests? {#cxx-tests}

<pre>
bazel query 'kind(cc_.*, tests(//foo:smoke_tests))'

</pre>

#### Which of those are small?  Medium?  Large? {#size-of-tests}

<pre>
bazel query 'attr(size, small, tests(//foo:smoke_tests))'

bazel query 'attr(size, medium, tests(//foo:smoke_tests))'

bazel query 'attr(size, large, tests(//foo:smoke_tests))'

</pre>

#### What are the tests beneath `foo` that match a pattern? {#tests-beneath-foo}

<pre>
bazel query 'filter("pa?t", kind(".*_test rule", //foo/...))'

</pre>

The pattern is a regex and is applied to the full name of the rule. It's similar to doing

<pre>
bazel query 'kind(".*_test rule", //foo/...)' | grep -E 'pa?t'

</pre>

#### What package contains file `path/to/file/bar.java`? {#barjava-package}

<pre>
 bazel query path/to/file/bar.java --output=package
</pre>

#### What is the build label for `path/to/file/bar.java?` {#barjava-build-label}

<pre>
bazel query path/to/file/bar.java
</pre>

#### What rule target(s) contain file `path/to/file/bar.java` as a source? {#barjava-rule-targets}

<pre>
fullname=&#36;(bazel query path/to/file/bar.java)
bazel query "attr('srcs', &#36;fullname, &#36;&#123;fullname//:*/&#125;:*)"

</pre>

### What package dependencies exist ... {#package-dependencies}

#### What packages does `foo` depend on? (What do I need to check out to build `foo`) {#packages-foo-depends-on}

<pre>
bazel query 'buildfiles(deps(//foo:foo))' --output package

</pre>

Note: `buildfiles` is required in order to correctly obtain all files
referenced by `subinclude`; see the reference manual for details.

#### What packages does the `foo` tree depend on, excluding `foo/contrib`? {#packages-foo-tree-depends-on}

<pre>
bazel query 'deps(foo/... except foo/contrib/...)' --output package

</pre>

### What rule dependencies exist ... {#rule-dependencies}

#### What genproto rules does bar depend upon? {#genproto-rules}

<pre>
bazel query 'kind(genproto, deps(bar/...))'

</pre>

#### Find the definition of some JNI (C++) library that is transitively depended upon by a Java binary rule in the servlet tree. {#jni-library}

<pre>
bazel query 'some(kind(cc_.*library, deps(kind(java_binary, //java/com/example/frontend/...))))' --output location
</pre>

##### ...Now find the definitions of all the Java binaries that depend on them {#java-binaries}

<pre>
bazel query 'let jbs = kind(java_binary, //java/com/example/frontend/...) in
  let cls = kind(cc_.*library, deps(&#36;jbs)) in
    &#36;jbs intersect allpaths(&#36;jbs, &#36;cls)'

</pre>

### What file dependencies exist ... {#file-dependencies}

#### What's the complete set of Java source files required to build foo? {#java-source-files}

Source files:

<pre>
bazel query 'kind("source file", deps(//path/to/target/foo/...))' | grep java$
</pre>

Generated files:

<pre>
bazel query 'kind("generated file", deps(//path/to/target/foo/...))' | grep java$
</pre>

#### What is the complete set of Java source files required to build QUX's tests? {#qux-tests}

Source files:

<pre>
bazel query 'kind("source file", deps(kind(".*_test rule", javatests/com/example/qux/...)))' | grep java$
</pre>

Generated files:

<pre>
bazel query 'kind("generated file", deps(kind(".*_test rule", javatests/com/example/qux/...)))' | grep java$
</pre>

### What differences in dependencies between X and Y exist ... {#differences-in-dependencies}

#### What targets does `//foo` depend on that `//foo:foolib` does not? {#foo-targets}

<pre>
bazel query 'deps(//foo) except deps(//foo:foolib)'

</pre>

#### What C++ libraries do the `foo` tests depend on that the `//foo` production binary does _not_ depend on? {#foo-cxx-libraries}

<pre>
bazel query 'kind("cc_library", deps(kind(".*test rule", foo/...)) except deps(//foo))'

</pre>

### Why does this dependency exist ... {#why-dependencies}

#### Why does `bar` depend on `groups2`? {#dependency-bar-groups2}

<pre>
bazel query 'somepath(bar/...,groups2/...:*)'

</pre>

Once you have the results of this query, you will often find that a single
target stands out as being an unexpected or egregious and undesirable
dependency of `bar`. The query can then be further refined to:

#### Show me a path from `docker/updater:updater_systest` (a `py_test`) to some `cc_library` that it depends upon: {#path-docker-cclibrary}

<pre>
bazel query 'let cc = kind(cc_library, deps(docker/updater:updater_systest)) in
  somepath(docker/updater:updater_systest, $cc)'

</pre>

#### Why does library `//photos/frontend:lib` depend on two variants of the same library `//third_party/jpeglib` and `//third_party/jpeg`? {#library-two-variants}

This query boils down to: "show me the subgraph of `//photos/frontend:lib` that
depends on both libraries". When shown in topological order, the last element
of the result is the most likely culprit.

<pre>
bazel query 'allpaths(//photos/frontend:lib, //third_party/jpeglib)
                intersect
               allpaths(//photos/frontend:lib, //third_party/jpeg)'
//photos/frontend:lib
//photos/frontend:lib_impl
//photos/frontend:lib_dispatcher
//photos/frontend:icons
//photos/frontend/modules/gadgets:gadget_icon
//photos/thumbnailer:thumbnail_lib
//third_party/jpeg/img:renderer

</pre>

### What depends on  ... {#depends-on}

#### What rules under bar depend on Y? {#rules-bar-y}

<pre>
bazel query 'bar/... intersect allpaths(bar/..., Y)'

</pre>

Note: `X intersect allpaths(X, Y)` is the general idiom for the query "which X
depend on Y?" If expression X is non-trivial, it may be convenient to bind a
name to it using `let` to avoid duplication.

#### What targets directly depend on T, in T's package? {#targets-t}

<pre>
bazel query 'same_pkg_direct_rdeps(T)'

</pre>

### How do I break a dependency ... {#break-dependency}

{/* TODO find a convincing value of X to plug in here */}

#### What dependency paths do I have to break to make `bar` no longer depend on X? {#break-dependency-bar-x}

To output the graph to a `svg` file:

<pre>
bazel query 'allpaths(bar/...,X)' --output graph | dot -Tsvg &gt; /tmp/dep.svg
</pre>

### Misc {#misc}

#### How many sequential steps are there in the `//foo-tests` build? {#steps-footests}

Unfortunately, the query language can't currently give you the longest path
from x to y, but it can find the (or rather _a_) most distant node from the
starting point, or show you the _lengths_ of the longest path from x to every
y that it depends on. Use `maxrank`:

<pre>
bazel query 'deps(//foo-tests)' --output maxrank | tail -1
85 //third_party/zlib:zutil.c
</pre>

The result indicates that there exist paths of length 85 that must occur in
order in this build.
