Searching the estate

This page is for people using searchcode enterprise in a browser: the search box, the results, the file view and code navigation. Agents use the same API through MCP, and Check the estate before you build is their version of this page.

Every page here shows only repositories you are allowed to see. A repository you cannot see does not appear in a count, a facet or an error, so two people can run the same query and get different answers. Who sees what is set by your administrator; Who sees what explains how.

Type a term and press return. Searches run across every repository you can see unless you narrow them.

Terms are ANDed. retry backoff finds files containing both words. Each extra term returns less, so when a search is too broad, add a filter rather than another word.

You type It matches
retry backoff files containing both terms
retry OR backoff files containing either
retry NOT test files containing retry and not test
(retry OR backoff) http grouping, as you would expect
"exponential backoff" the exact phrase
/[Rr]etry[A-Z]\w+/ a regular expression, between slashes
backof~1 fuzzy: within one edit of the term

Matching is case-insensitive.

As you type, a line under the box explains what the query will do: that a regular expression or a fuzzy term was recognised, or that three ANDed terms will match very little. It never changes or submits your query. With JavaScript turned off the box works the same; only the explanation is missing.

Filters inside the query

Filter Narrows to Example
lang: one language, as the line counter names it lang:Go
repo: one repository, by name or unique short name repo:payments
tech: files using a detected technology tech:Django
path: files whose path contains the value path:internal
file: files whose name contains the value file:retry
ext: one file extension, without the dot ext:ts

Filters accept = and != as well as :, and comma-separated values mean "any of these": lang=Go,Python, ext!=md. path and file treat a value containing *, ? or [ as a glob.

A value with a space or punctuation needs the operator form or quotes. Write lang="Visual Basic" rather than lang:Visual Basic, which searches for the word Basic. For technologies, quote after the colon: tech:"AWS SDK (Boto3)".

A filter typed into the query binds to the term next to it, not to the whole query. a OR b path:src means a OR (b AND path:src), so matches for a come from anywhere. To filter the whole query, use the facets on the results page instead.

A filter on its own, with no term, is a listing: lang:Go lists the Go files in scope. That is also what clicking a facet does.

Examples that run

The home page lists example queries built from your own estate: real repository names, your largest language and your most-used technology. Each one is a link that runs exactly the query printed on it, so they are a quick way to check the syntax against code you know. The same list appears when a search finds nothing.

Results

The header gives two numbers: how many matches and how many files. One file with forty matches is one row. The pager counts files.

Each row names its repository and path, shows the matching lines with a little context, and links to the file view at the matching line.

Facets

The side panel counts what the whole match set contains, not just the page you are on:

Click a value to narrow to it. Applied filters appear as chips above the results, each with a control to remove it. A long facet has its own filter box, so you can find one repository among hundreds without scrolling.

A repository that is still cloning, or that failed to clone, is still listed in the repository facet and marked as such, rather than disappearing.

When something could not answer

Search is honest about what it could not read. When a repository could not contribute to an answer, an amber coverage banner above the results says which and why: it is still cloning, its analysis has not finished, or it is a directory source with no commit history.

An empty result with no banner means nothing in scope matched. An empty result with a banner means some of the estate could not be asked. Those are different statements, and the page never shows one as the other.

When nothing matched

A search with no results says which of three causes applies:

  1. The repository was never ingested. It is not configured, or it failed.
  2. It is still cloning or being analysed. Try again shortly.
  3. Nothing in scope matched. The page says which of your terms or filters reduced the answer to zero, and offers the example queries.

If you narrowed to one repository and that repository cannot answer, that is stated first, because it is the question you asked.

The file view

Open any result to see the file with syntax highlighting. The header shows the language, the line count and the short commit the file was read at, and has these controls:

When you open a permalink to an older commit, a banner says you are looking at a past revision.

Very large files are capped for display, and the page says so and links to the raw file. A single extremely long line, such as minified code, is cut for display and marked as cut.

Findings and outline

Beside the code are two panels:

Hover and click

Hover an identifier to see a short preview of what it is and where it is declared. Click it to open code navigation. The preview needs no JavaScript.

Code navigation

Code navigation answers two questions about a name: where it is defined, and where it is used. Switch between them with the link at the top of the page.

Exact and probable

Every result is labelled:

Show exact results only hides the probable ones, and the page says how many it hid. Languages with no grammar in this build still get answers, all probable.

This repository or the whole estate

Navigation starts in the repository you came from. Whole estate widens it to every repository you can see, with results grouped by repository. Widening finds more places the name appears; it does not resolve anything more precisely.

Across the estate, navigation stays within the language of the file you started from. Search every language instead removes that limit.

A very common name can appear in more files than navigation will sort through. When that happens, the page says the name appears in that many files and states the limit, rather than showing a misleading partial list. Narrow back to one repository, or search for the name with a filter. Your administrator can change the limit with search.symbols.crossRepoCeiling.

An empty answer is never presented as proof that a name is declared nowhere. The page says what was searched, because a symbol table covers what its grammars cover and no more.

Other pages for everyone

Page What it answers
Dependencies (/dependencies) Which files use a technology, across everything you can see, with the line and the keyword that attributed it, so you can check the attribution rather than trust it
Findings (/findings) Security and code quality findings across the estate. Security only by default; choose all to include quality. Filter by severity, category, repository and whether to include test files
Hotspots (/repo/REPOSITORY/hotspots) Files ranked by complexity multiplied by how often they changed, in a window you choose. Both inputs are shown
Complexity trend (/trend) Whether complexity is falling in the files that change most
Repository trends (/trend/repositories) Which repositories are getting less complex and which more, side by side, with churn shown so you can judge how much to trust each line

Hotspots, history, blame and trends need commit history. A directory source has none, and those pages say so rather than showing an empty ranking.

Keyboard

Key Does
/ Focus the search box
Escape Leave the search box
j / k Move to the next or previous result
Enter Open the selected result

Every shortcut is a convenience: each page works fully without JavaScript.

Your account

/account shows who the instance thinks you are:

It is also where you create and revoke API keys for agents and scripts, and where your instance's MCP connection details are shown for every common client. Most agents should sign in with OAuth instead of a key; Which credential do I use? explains which to use, and Connect an agent client has the snippets.

For the same search from a script, see API and MCP tool reference.

Generated from the documentation that ships with searchcode enterprise. Questions: ben@boyter.org