---
layout: documentation
title: Query how-to
---

<a name="_Bazel_Query_How_To"> </a>
# Bazel query how-to

This is a quick tutorial to get you started using Bazel's query language to
trace dependencies in your code.

For a language details and `--output` flag details, please see the reference
manual, [Bazel query reference](query.html).  You can get help for Bazel query
by typing `bazel help query`.

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

<a name="_Contents"></a>
## Contents

*   [Finding the Dependencies of a Rule](#Finding_the_Dependencies_of_a_Ru)
*   [Tracing the Dependency Chain between Two
    Packages](#Tracing_the_Dependency_Chain_bet)
    *   [Aside: implicit dependencies](#Aside_implicit_dependencies)
*   [Reverse Dependencies](#Reverse_Dependencies)
*   [Miscellaneous Uses](#Miscellaneous_Uses)
    *   [What exists ...](#What_exists_)
        *   [What packages exist beneath
            `foo`?](#What_packages_exist_beneath_foo_)
        *   [What rules are defined in the `foo`
            package?](#What_rules_are_defined_in_the_foo)
        *   [What files are generated by rules in the `foo`
            package?](#What_files_are_generated_by_rule)
        *   [What's the set of BUILD files needed to build
            `//foo`?](#What_s_the_set_of_BUILD_files_ne)
        *   [What are the individual tests that a `test_suite` expands
            to?](#What_are_the_individual_tests_th)
            *   [Which of those are C++ tests?](#Which_of_those_are_C_tests_)
            *   [Which of those are small? Medium?
                Large?](#Which_of_those_are_small_Medium_)
        *   [What are the tests beneath `foo` that match a
            pattern?](#What_are_the_tests_beneath_foo_t)
        *   [What package contains file
            `src/main/java/com/example/cache/LRUCache.java`?
            ](#What_package_contains_file_java_)
        *   [What is the build label for
            `src/main/java/com/example/cache/LRUCache.java`?
            ](#What_is_the_build_label_for_java)
        *   [What build rule contains file
            `src/main/java/com/example/cache/LRUCache.java` as a
            source?](#What_build_rule_contains_file_ja)
    *   [What package dependencies exist ...](#What_package_dependencies_exist_)
        *   [What packages does `foo` depend on? (What do I need to check out
            to build `foo`)](#What_packages_does_foo_depend_on)
        *   [What packages does the `foo` tree depend on, excluding
            `foo/contrib`?](#What_packages_does_the_foo_)
    *   [What rule dependencies exist ...](#What_rule_dependencies_exist_)
        *   [What genproto rules does bar depend
            upon?](#What_genproto_rules_does_bar_)
        *   [Find the definition of some JNI (C++) library that is transitively
            depended upon by a Java binary rule in the servlet
            tree.](#Find_the_definition_of_some_JNI_)
            *   [...Now find the definitions of all the Java binaries that
                depend on them](#_Now_find_the_definitions_of_all)
    *   [What file dependencies exist ...](#What_file_dependencies_exist_)
        *   [What's the complete set of Java source files required to build
            QUX?](#What_s_the_complete_set_of_Java_)
        *   [What is the complete set of Java source files required to build
            QUX's tests?](#What_is_the_complete_set_of_Java)
    *   [What differences in dependencies between X and Y exist
        ...](#What_differences_in_dependencies)
        *   [What targets does `//foo` depend on that `//foo:foolib` does
            not?](#What_targets_does_foo_depend_on_)
        *   [What C++ libraries do the `foo` tests depend on that the `//foo`
            production binary does _not_ depend
            on?](#What_C_libraries_do_the_foo_test)
    *   [Why does this dependency exist ...](#Why_does_this_dependency_exist_)
        *   [Why does `bar` depend on
            `groups2`?](#Why_does_bar_depend_on_groups)
        *   [Show me a path from `docker/updater:updater_systest` (a `py_test`)
            to some `cc_library` that it depends
            upon:](#Show_me_a_path_from_docker_updater)
        *   [Why does library `//photos/frontend:lib` depend on two variants of
            the same library `//third_party/jpeglib` and
            `//third_party/jpeg`?](#Why_does_library_photos_fronten)
    *   [What depends on ...](#What_depends_on_)
        *   [What rules under bar depend on Y?](#What_rules_under_bar_depend_o)
    *   [How do I break a dependency ...](#How_do_I_break_a_dependency_)
        *   [What dependency paths do I have to break to make `bar` no longer
            depend on X?](#What_dependency_paths_do_I_have_)
    *   [Misc ...](#Misc_)
        *   [How many sequential steps are there in the `ServletSmokeTests`
            build?](#How_many_sequential_steps_are_th)

<a name="Finding_the_Dependencies_of_a_Ru"></a>
## Finding the Dependencies of a Rule

To see the dependencies of `//src/main/java/com/example/base:base`, use the
`deps` function in bazel query:

```
$ bazel query "deps(src/main/java/com/example/base:base)"
//resources:translation.xml
//src/main/java/com/example/base:AbstractPublishedUri.java
...
```

This is the set of all targets required to build <code>//src/main/java/com/example/base:base</code>.

<a name="Tracing_the_Dependency_Chain_bet"></a>
## Tracing the Dependency Chain between Two Packages

The library `//third_party/zlib:zlibonly` isn't in the BUILD file for
`//src/main/java/com/example/base`, but it is an indirect dependency. How can
we trace this dependency path?  There are two useful functions here:
`allpaths` and `somepath`

```
$ bazel query "somepath(src/main/java/com/example/base:base, third_party/zlib:zlibonly)"
//src/main/java/com/example/base:base
//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
$ bazel query "allpaths(src/main/java/com/example/common/base:base, third_party/...)"
  ...many errors detected in BUILD files...
//src/main/java/com/example/common/base:base
//third_party/java/jsr166x:jsr166x
//third_party/java/sun_servlet:sun_servlet
//src/main/java/com/example/common/flags:flags
//src/main/java/com/example/common/flags:base
//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
```

<a name="Aside_implicit_dependencies"></a>
### Aside: implicit dependencies

The BUILD file for `src/main/java/com/example/common/base` 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; read the source code of
[`RuleClassProvider`](https://github.com/bazelbuild/bazel/tree/master/src/main/java/com/example/devtools/build/lib/packages/RuleClassProvider.java).

<a name="Reverse_Dependencies"></a>
## Reverse Dependencies

You might want to know the set of targets that depends on some target.  e.g.,
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`.

Unfortunately, invoking, e.g., `rdeps(..., daffie/annotations2:constants-lib)`
is not practical for a large tree, because it requires parsing every BUILD file
and building a very large dependency graph (Bazel may run out of memory).  If
you would like to execute this query across a large repository, you may have to
query subtrees and then combine the results.

<a name="Miscellaneous_Uses"></a>
## Miscellaneous Uses

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

<a name="What_exists_"></a>
### What exists ...

<a name="What_packages_exist_beneath_foo_"></a>
#### What packages exist beneath `foo`?

```sh
bazel query 'foo/...' --output package
```

<a name="What_rules_are_defined_in_the_gw"></a>
#### What rules are defined in the `foo` package?

```sh
bazel query 'kind(rule, foo:all)' --output label_kind
```

<a name="What_files_are_generated_by_rule"></a>
#### What files are generated by rules in the `foo` package?

```sh
bazel query 'kind("generated file", //foo:*)'
```

<a name="What_s_the_set_of_BUILD_files_ne"></a>
#### What's the set of BUILD files needed to build `//foo`?

bazel query 'buildfiles(deps(//foo))' --output location | cut -f1 -d:

<a name="What_are_the_individual_tests_th"></a>
#### What are the individual tests that a `test_suite` expands to?

```sh
bazel query 'tests(//foo:smoke_tests)'
```

<a name="Which_of_those_are_C_tests_"></a>
##### Which of those are C++ tests?

```sh
bazel query 'kind(cc_.*, tests(//foo:smoke_tests))'
```

<a name="Which_of_those_are_small_Medium_"></a>
#### Which of those are small?  Medium?  Large?

```sh
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))'
```

<a name="What_are_the_tests_beneath_foo_t"></a>
#### What are the tests beneath `foo` that match a pattern?

```sh
bazel query 'filter("pa?t", kind(".*_test rule", //foo/...))'
```

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

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

<a name="What_package_contains_file_java_"></a>
#### What package contains file src/main/java/com/example/cache/LRUCache.java`?

```sh
bazel query 'buildfiles(src/main/java/com/example/cache/LRUCache.java)' --output=package
```

<a name="What_is_the_build_label_for_java"></a>
#### What is the build label for src/main/java/com/example/cache/LRUCache.java?

```sh
bazel query src/main/java/com/example/cache/LRUCache.java
```

<a name="What_build_rule_contains_file_ja"></a>
#### What build rule contains file `src/main/java/com/example/cache/LRUCache.java` as a source?

```sh
fullname=$(bazel query src/main/java/com/example/cache/LRUCache.java)
bazel query "attr('srcs', $fullname, ${fullname//:*/}:*)"
```

<a name="What_package_dependencies_exist_"></a>
### What package dependencies exist ...

<a name="What_packages_does_foo_depend_on"></a>
#### What packages does `foo` depend on? (What do I need to check out to build `foo`)

```sh
bazel query 'buildfiles(deps(//foo:foo))' --output package
```

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

<a name="What_packages_does_the_foo_"></a>
#### What packages does the `foo` tree depend on, excluding `foo/contrib`?

```sh
bazel query 'deps(foo/... except foo/contrib/...)' --output package
```

<a name="What_rule_dependencies_exist_"></a>
### What rule dependencies exist ...

<a name="What_genproto_rules_does_bar_"></a>
#### What genproto rules does bar depend upon?

```sh
bazel query 'kind(genproto, deps(bar/...))'
```

<a name="Find_the_definition_of_some_JNI_"></a>
#### Find the definition of some JNI (C++) library that is transitively depended upon by a Java binary rule in the servlet tree.

```sh
bazel query 'some(kind(cc_.*library, deps(kind(java_binary, src/main/java/com/example/frontend/...))))' --output location
```

<a name="_Now_find_the_definitions_of_all"></a>
##### ...Now find the definitions of all the Java binaries that depend on them

```sh
bazel query 'let jbs = kind(java_binary, src/main/java/com/example/frontend/...) in
  let cls = kind(cc_.*library, deps($jbs)) in
    $jbs intersect allpaths($jbs, $cls)'
```

<a name="What_file_dependencies_exist_"></a>
### What file dependencies exist ...

<a name="What_s_the_complete_set_of_Java_"></a>
#### What's the complete set of Java source files required to build QUX?

Source files:

```sh
bazel query 'kind("source file", deps(src/main/java/com/example/qux/...))' | grep java$
```

Generated files:

```sh
bazel query 'kind("generated file", deps(src/main/java/com/example/qux/...))' | grep java$
```

<a name="What_is_the_complete_set_of_Java"></a>
#### What is the complete set of Java source files required to build QUX's tests?

Source files:

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

Generated files:

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

<a name="What_differences_in_dependencies"></a>
### What differences in dependencies between X and Y exist ...

<a name="What_targets_does_foo_depend_on_"></a>
#### What targets does `//foo` depend on that `//foo:foolib` does not?

```sh
bazel query 'deps(//foo) except deps(//foo:foolib)'
```

<a name="What_C_libraries_do_the_foo_test"></a>
#### What C++ libraries do the `foo` tests depend on that the `//foo` production binary does _not_ depend on?

```sh
bazel query 'kind("cc_library", deps(kind(".*test rule", foo/...)) except deps(//foo))'
```

<a name="Why_does_this_dependency_exist_"></a>
### Why does this dependency exist ...

<a name="Why_does_bar_depend_on_groups"></a>
#### Why does <code>bar</code> depend on <code>groups2</code>?

```sh
bazel query 'somepath(bar/...,groups2/...:*)'
```

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:

<a name="Show_me_a_path_from_docker_updater"></a>
#### Show me a path from `docker/updater:updater_systest` (a `py_test`) to some `cc_library` that it depends upon:

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

<a name="Why_does_library_photos_fronten"></a>
#### Why does library `//photos/frontend:lib` depend on two variants of the same library `//third_party/jpeglib` and `//third_party/jpeg`?

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.

```
% 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
```

<a name="What_depends_on_"></a>
### What depends on  ...

<a name="What_rules_under_bar_depend_o"></a>
#### What rules under bar depend on Y?

```sh
bazel query 'bar/... intersect allpaths(bar/..., Y)'
```

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.

<a name="How_do_I_break_a_dependency_"></a>
### How do I break a dependency ...

<!-- TODO find a convincing value of X to plug in here -->
<a name="What_dependency_paths_do_I_have_"></a>
#### What dependency paths do I have to break to make `bar` no longer depend on X?

To output the graph to a `png` file:

```sh
bazel query 'allpaths(bar/...,X)' --output graph | dot -Tpng > /tmp/dep.png
```

<a name="Misc_"></a>
### Misc ...

<a name="How_many_sequential_steps_are_th"></a>
#### How many sequential steps are there in the `ServletSmokeTests` build?

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`:

```sh
% bazel query 'deps(//src/test/java/com/example/servlet:ServletSmokeTests)' --output maxrank | tail -1
85 //third_party/zlib:zutil.c
```

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