Writing Regex Queries

Basic Regex Queries

A plain query will match the content of a file.


This will match the term client in any of the files in the index. This applies to queries that contain whitespace:

apache license

will match any file that contains the exact string apache license. Non-exact, or fuzzy, matching is on the roadmap. These plain queries are also known as content: queries.

bloop can also match code symbols. These include identifiers like class, function and variable names:


A regex query returns files whose content matches a regex. Regex queries are enclosed by /:


bloop supports all UTF-8 expressions supported by Rust's regex crate.


bloop let's you narrow down search results with a set of search filters. These are repo:, path: and lang:. For example, the query:

repo:BurntSushi/aho-corasick ErrorKind

will match the term ErrorKind in any file in the aho-corasick repo. Filters can be combined to construct highly-specific search queries:

repo:BurntSushi/aho-corasick path:src/error ErrorKind lang:Rust

will only match the term ErrorKind in Rust files in the aho-corasick repo whose paths contain the pattern src/error. Note that the ordering of these filters is not important. These two queries are equivalent:

repo:BurntSushi/aho-corasick path:src/error ErrorKind
path:src/error ErrorKind repo:BurntSushi/aho-corasick

bloop queries can also match against repo names or file paths.


will return all repos whose name contains the term rus (e.g. Rust), and


will return all files that contain the pattern lint-docs in their path.

Any query term can be a regex:

repo:/BurntSushi.*/ /^Copyright\s\(c\)/

will return files in any BurntSushi repo which match the regex /^Copyright\s\(c\)/.


How does bloop know what to return when repo:, path: and content: queries are combined? Query terms have an order of precedence:

  1. content/symbol
  2. path
  3. repo

A search will return the type associated with the highest precedence term in the query. For example:

repo:BurntSushi/aho-corasick path:src/error

will match file paths within the specific repo, whereas:

path:src/error ErrorKind

will match file content because the ErrorKind term takes precedence.