Search query syntax

Search queries can consist of just words, and you'll see results where those words appear in order, in all files across all repositories. Many queries will also use keywords. Keywords help to filter searches, define the type of search, and more. This page is a comprehensive list of keywords available for code search.

As of version 3.9.0, by default, searches are interpreted literally instead of as regexp. Site admins and users can change their instance and personal default behavior by changing the search.defaultPatternType setting to "literal" or "regexp". To toggle regexp search, you can click the dot-star icon in the search input, or use the patterntype: keyword in your search.

Keywords (all searches)

The following keywords can be used on all searches (using RE2 syntax any place a regex is accepted):

Keyword Description Examples
any-string Strings are matched exactly, including whitespace and punctuation. open(props
patterntype:literal, patterntype:structural, patterntype:regexp Configure your query to be interpreted literally, as a regular expression, or a structural search pattern. test. patternType:literal
(open|close)file patternType:regexp
"any string" When using patterntype:regexp, double-quote a string to find exact matches. Supports \" and \\ escapes. "*string" patternType:regexp
repo:regexp-pattern
repo:regexp-pattern@rev
alias: r
Only include results from repositories whose path matches the regexp. A repository's path is a string such as github.com/myteam/abc or code.example.com/xyz that depends on your organization's repository host. If the regexp ends in @rev, that revision is searched instead of the default branch (usually master). repo:gorilla/mux testroute
repo:alice/abc@mybranch
-repo:regexp-pattern
alias: -r
Exclude results from repositories whose path matches the regexp. repo:alice/ -repo:old-repo
repogroup:group-name
alias: g
Only include results from the named group of repositories (defined by the server admin). Same as using a repo: keyword that matches all of the group's repositories. Use repo: unless you know that the group exists.
file:regexp-pattern
alias: f
Only include results in files whose full path matches the regexp. file:\.js$ httptest
file:internal/ httptest
-file:regexp-pattern
alias: -f
Exclude results from files whose full path matches the regexp. file:\.js$ -file:test http
lang:language-name
alias: l
Only include results from files in the specified programming language. lang:typescript encoding
-lang:language-name
alias: -l
Exclude results from files in the specified programming language. -lang:typescript encoding
type:symbol Perform a symbol search. type:symbol path
case:yes Perform a case sensitive query. Without this, everything is matched case insensitively. OPEN_FILE case:yes
fork:no, fork:only Filter out results from repository forks or filter results to only repository forks. fork:no repo:sourcegraph
archived:no, archived:only Filter out results from archived repositories or filter results to only archived repositories. By default, results from archived repositories are included. repo:sourcegraph/ archived:only
repohasfile:regexp-pattern Only include results from repositories that contain a matching file. This keyword is a pure filter, so it requires at least one other search term in the query. Note: this filter currently only works on text matches and file path matches. repohasfile:\.py file:Dockerfile pip
-repohasfile:regexp-pattern Exclude results from repositories that contain a matching file. This keyword is a pure filter, so it requires at least one other search term in the query. Note: this filter currently only works on text matches and file path matches. -repohasfile:Dockerfile docker
repohascommitafter:"string specifying time frame" (Experimental) Filter out stale repositories that don't contain commits past the specified time frame. repohascommitafter:"last thursday"
repohascommitafter:"june 25 2017"
count:N
Retrieve at least N results. By default, Sourcegraph stops searching early and returns if it finds a full page of results. This is desirable for most interactive searches. To wait for all results, or to see results beyond the first page, use the count: keyword with a larger N. This can also be used to get deterministic results and result ordering (whose order isn't dependent on the variable time it takes to perform the search). count:1000 function
timeout:go-duration-value
Customizes the timeout for searches. The value of the parameter is a string that can be parsed by the Go time package's ParseDuration (e.g. 10s, 100ms). By default, the timeout is set to 10 seconds, and the search will optimize for returning results as soon as possible. The timeout value cannot be set longer than 1 minute. When provided, the search is given the full timeout to complete. repo:^github.com/sourcegraph timeout:15s func count:10000

Multiple or combined repo: and file: keywords are intersected. For example, repo:foo repo:bar limits your search to repositories whose path contains both foo and bar (such as github.com/alice/foobar). To include results from repositories whose path contains either foo or bar, use repo:foo|bar.


Keywords (diff and commit searches only)

The following keywords are only used for commit diff and commit message searches, which show changes over time:

Keyword Description Examples
repo:regexp-pattern@refs Specifies which Git refs (:-separated) to search for commits. Use *refs/heads/ to include all Git branches (and *refs/tags/ to include all Git tags). You can also prefix a Git ref name or pattern with ^ to exclude. For example, *refs/heads/:^refs/heads/master will match all commits that are not merged into master. repo:vscode@*refs/heads/:^refs/heads/master type:diff task (unmerged commit diffs containing task)
type:diff
type:commit
Specifies the type of search. By default, searches are executed on all code at a given point in time (a branch or a commit). Specify the type: if you want to search over changes to code or commit messages instead (diffs or commits). type:diff func
type:commit test
author:name Only include results from diffs or commits authored by the user. Regexps are supported. Note that they match the whole author string of the form Full Name <[email protected]>, so to include only authors from a specific domain, use author:example.com>$.

You can also search by committer:git-email. Note: there is a committer only when they are a different user than the author.
type:diff author:nick
before:"string specifying time frame" Only include results from diffs or commits which have a commit date before the specified time frame before:"last thursday"
before:"november 1 2019"
after:"string specifying time frame" Only include results from diffs or commits which have a commit date after the specified time frame after:"6 weeks ago"
after:"november 1 2019"
message:"any string" Only include results from diffs or commits which have commit messages containing the string type:commit message:"testing"
type:diff message:"testing"

A query with only repo: filters returns a list of repositories with matching names.

Example: repo:docker repo:registry

A query with type:path restricts terms to matching filenames only (not file contents).

Example: type:path repo:/docker/ registry