Search

Code Search

Forgejo supports code search through an indexer and git-grep as a fallback when REPO_INDEXER_ENABLED is disabled.

Basic (git-grep)

Code search results page using git-grep

When REPO_INDEXER_ENABLED is set to false, code search is restricted to a single repository, utilizing the git-grep command.

Supported Options

The following options are currently available for code search while using git-grep.

Scope

Since git-grep is performed on the fly, it can be executed on any valid branch or tag. The currently active branch/tag is displayed as the default value in the dropdown menu above the search bar, allowing users to easily switch between branches and tags.

Searching within a specific directory (or file) executes git-grep using a literal pathspec for the given path. If REPO_INDEXER_INCLUDE has been set by the administrator, the filter is added if and only if it matches one of the globs.

Example

Performing a search for foo at /{user}/{repo}/src/branch/main?path=src returns results that belong to the branch main inside the directory /src.

main
├── docs -> [...]
└── src
    └── main.go
    └── utils.go

In the above figure, the search would match results for foo in main.go and utils.go, but not from docs/*.

Indexer

Code search results page using indexer

For complex searches or cross-repository queries across an entire organization or instance, REPO_INDEXER_ENABLED must be set to true. This enables code search via the selected indexer (REPO_INDEXER_TYPE).

Supported Options

The following options are currently available for code search while using an indexer.

[!note] Note Fuzzy search requires the admin to set REPO_INDEXER_FUZZY_ENABLED.

Scope

Please note that when using the repository indexer, search results are limited to the contents of the default branch of each repository.

Similar to basic search, searching within a directory (or file) is also possible for advanced search. However, unlike basic search, the search is more granular as it applies the filter but selectively includes/excludes files depending on REPO_INDEXER_INCLUDE/REPO_INDEXER_EXCLUDE.

Issue Search

Since v11, Issue search on Forgejo replaced its previously dropdown-defined behavior of searches with a query syntax defined by operators.

Query Syntax

Keywords

  1. Terms

Performs a fuzzy match search of each term in the query.

For example,

  1. Phrase

Performs an exact match for the provided phrase. This is done by wrapping the phrase in double quotes.

For example,

Operators

  1. Negation

Negates the keyword by returning results that do not contain the keyword. This is done by prefixing the keyword with a minus symbol.

For example,

  1. Required

Denotes that the provided keyword MUST be present. This is done by prefixing the keyword with a plus symbol.

For example,

Escaping

All operators may be escaped by adding a backslash in front of the operators.

For example,

Filters

Filters listed below may be escaped by using a phrase search. For example, "is:open".

State

These filters are mutually exclusive. If multiple state filters are used, then the rightmost filter takes precedence.

Filter Description
is:open or -is:closed Filters issues/pull requests that are open
is:closed or -is:open Filters issues/pull requests that are closed
is:all Filters issues/pull requests that are either open or closed

Examples,

User

These filter issues/pull requests by a username.

Filter Description
author:* Authored By
assignee:* Assigned To
review:* Reviewed By
mentions:* Mentions the user

Examples,

Misc.

Filter Description
sort:<by>:[asc/desc] Sorts issues/PRs. Where, <by> is one of created, comments, updated, deadline
modified:[>/<]<date> Last updated date in ISO format

Examples,