Python bindings for searchfox.org API
Project description
searchfox-cli
A command-line interface for searching Mozilla codebases using searchfox.org, written by and for Claude Code.
Also available as a Rust library (searchfox-lib) and Python package (searchfox-py).
Features
- Search across multiple Mozilla repositories (mozilla-central, beta, release, ESR branches, comm-central)
- Symbol search using searchfox's native indexing for precise lookups
- Advanced definition finding with complete function/class extraction using intelligent brace matching
- Call graph analysis: Understand code flow with
calls-from,calls-to, andcalls-betweenqueries (LLM-friendly markdown output) - Field layout inspection: Display C++ class/struct memory layout with size, alignment, and field offsets
- Language filtering (C++, C, WebIDL, JavaScript)
- Path patterns and regular expressions
- Request logging for performance analysis
Installation
cargo install searchfox-cli
CLI Usage
Basic Search
# Search for "AudioStream" in mozilla-central
searchfox-cli -q AudioStream
# Search with case sensitivity
searchfox-cli -q AudioStream -C
# Search with regular expressions
searchfox-cli -q '^Audio.*' -r
# Limit results to 10 matches
searchfox-cli -q AudioStream -l 10
Symbol and Definition Search
# Find symbol definitions
searchfox-cli --symbol AudioContext
# Find exact identifier matches (not prefix-based)
searchfox-cli --id main
# Search for symbols using searchfox's symbol index
searchfox-cli --symbol 'AudioContext'
searchfox-cli --symbol 'CreateGain'
# Search for symbols in specific paths
searchfox-cli -q 'path:dom/media symbol:AudioStream'
Repository Selection
# Search in beta branch
searchfox-cli -q AudioStream -R mozilla-beta
Path Filtering
# Search only in dom/media directory
searchfox-cli -q AudioStream -p ^dom/media
# Search in specific file patterns
searchfox-cli -q AudioStream -p '\.cpp$'
# Use -p alone to search for files by path pattern
searchfox-cli -p PContent.ipdl
searchfox-cli -p AudioContext.cpp
# Using advanced path syntax in query
searchfox-cli -q 'path:dom/media AudioStream'
searchfox-cli -q 'pathre:^dom/(media|audio) AudioStream'
Language Filtering
Filter search results by programming language using language-specific flags:
# Search only in C++ files (.cc, .cpp, .h, .hh, .hpp)
searchfox-cli -q AudioContext --cpp
searchfox-cli --define AudioContext -p dom/media --cpp
# Search only in C files (.c, .h)
searchfox-cli -q malloc --c
# Search only in WebIDL files (.webidl)
searchfox-cli -q AudioContext --webidl
# Search only in JavaScript files (.js, .mjs, .ts, .cjs, .jsx, .tsx)
searchfox-cli -q AudioContext --js
# Without language filters, all file types are included
searchfox-cli --define AudioContext -p dom/media
Advanced Query Features
# Search with context lines
searchfox-cli -q AudioStream --context 3
# Text search with regex
searchfox-cli -q 're:AudioContext::.*Create'
# Exact text search (escapes regex chars)
searchfox-cli -q 'text:function main()'
# Combined advanced queries
searchfox-cli -q 'context:3 pathre:dom/media symbol:AudioStream'
Symbol Search
The --symbol flag uses searchfox's native symbol indexing for precise symbol lookups:
# Search for symbols by name
searchfox-cli --symbol 'AudioContext'
searchfox-cli --symbol 'CreateGain'
# Combine with path filtering
searchfox-cli -q 'path:dom/media symbol:AudioStream'
Symbol search relies on searchfox's own symbol database, which includes properly mangled C++ symbols and other language constructs as indexed by the searchfox infrastructure.
Advanced Definition Finding
The --define flag provides an advanced way to find symbol definitions by:
- Symbol Search: Uses
id:prefix internally for precise symbol lookups - Class/Struct Priority: Prioritizes class and struct definitions over constructors
- Definition Resolution: Searches both "Definitions" and "Declarations" categories (for C++ classes)
- Context Extraction: Fetches the source file and displays the complete method/function/class
# Find class definition with full body
searchfox-cli --define AudioContext -p dom/media
# Find method definition with full context
searchfox-cli --define 'AudioContext::CreateGain'
# Filter by language
searchfox-cli --define AudioContext -p dom/media --cpp
# The tool will:
# 1. Search using id:AudioContext for precise matches
# 2. Prioritize class definitions over constructor declarations
# 3. Extract the complete class body (with brace matching)
# 4. Display the full definition with proper highlighting
This approach leverages searchfox's comprehensive symbol database for reliable definition finding.
Example Output:
For class definitions:
$ searchfox-cli --define AudioContext -p dom/media --cpp
>>> 135: class AudioContext final : public DOMEventTargetHelper,
136: public nsIMemoryReporter,
137: public RelativeTimeline {
138: AudioContext(nsPIDOMWindowInner* aParentWindow, bool aIsOffline,
139: uint32_t aNumberOfChannels = 0, uint32_t aLength = 0,
140: float aSampleRate = 0.0f);
141: ~AudioContext();
142:
143: public:
144: typedef uint64_t AudioContextId;
145:
146: NS_DECL_ISUPPORTS_INHERITED
147: NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(AudioContext, DOMEventTargetHelper)
148: MOZ_DEFINE_MALLOC_SIZE_OF(MallocSizeOf)
...
335: void RegisterNode(AudioNode* aNode);
... : (method too long, truncated)
For method definitions:
$ searchfox-cli --define 'AudioContext::CreateGain'
>>> 469: already_AddRefed<GainNode> AudioContext::CreateGain(ErrorResult& aRv) {
470: return GainNode::Create(*this, GainOptions(), aRv);
471: }
The tool automatically:
- Searches searchfox's structured data for definition entries
- Uses searchfox's native symbol indexing for accurate results
- Finds the actual source file location (not generated binding files)
- Fetches the source code and displays complete methods/functions
- Highlights the exact definition line with
>>>
Complete Function and Class Extraction
When using --define, the tool automatically detects and extracts complete function/method bodies and class definitions using intelligent brace matching:
For simple functions:
$ searchfox-cli --define 'AudioContext::CreateGain'
>>> 469: already_AddRefed<GainNode> AudioContext::CreateGain(ErrorResult& aRv) {
470: return GainNode::Create(*this, GainOptions(), aRv);
471: }
For complex constructors with initializer lists:
$ searchfox-cli --define 'AudioContext::AudioContext'
>>> 154: AudioContext::AudioContext(nsPIDOMWindowInner* aWindow, bool aIsOffline,
155: uint32_t aNumberOfChannels, uint32_t aLength,
156: float aSampleRate)
157: : DOMEventTargetHelper(aWindow),
158: mId(gAudioContextId++),
159: mSampleRate(GetSampleRateForAudioContext(
160: aIsOffline, aSampleRate,
161: aWindow->AsGlobal()->ShouldResistFingerprinting(
162: RFPTarget::AudioSampleRate))),
163: mAudioContextState(AudioContextState::Suspended),
164: ...
179: mSuspendedByChrome(nsGlobalWindowInner::Cast(aWindow)->IsSuspended()) {
180: bool mute = aWindow->AddAudioContext(this);
181: // ... full method body continues ...
205: }
Features of complete extraction:
- Multi-language support: Handles C++, Rust, and JavaScript function syntax
- Class and struct definitions: Extracts complete class/struct bodies with proper brace matching
- Smart brace matching: Ignores braces in strings, comments, and character literals
- Complex signatures: Handles multi-line function signatures and initializer lists
- Constructor support: Properly extracts C++ constructors with member initialization lists
- Class termination: Handles classes/structs ending with semicolons correctly
- Safety limits: Truncates extremely long definitions (>200 lines) to prevent output overflow
- Accurate parsing: Correctly handles nested braces, escape sequences, and comment blocks
File Retrieval
# Fetch and display a specific file
searchfox-cli --get-file dom/media/AudioStream.h
Available Repositories
mozilla-central(default) - Main Firefox developmentmozilla-beta- Beta release branchmozilla-release- Release branchmozilla-esr115- ESR 115 branchmozilla-esr128- ESR 128 branchmozilla-esr140- ESR 140 branchcomm-central- Thunderbird development
Command Line Options
-q, --query <QUERY>- Search query string (supports advanced syntax)-R, --repo <REPO>- Repository to search in (default: mozilla-central)-p, --path <PATH>- Filter results by path prefix using regex, or search for files by path pattern-C, --case- Enable case-sensitive search-r, --regexp- Enable regular expression search-l, --limit <LIMIT>- Maximum number of results to display (default: 50)--get-file <FILE>- Fetch and display contents of a specific file--symbol <SYMBOL>- Search for symbol definitions using searchfox's symbol index--id <IDENTIFIER>- Search for exact identifier matches--context <N>- Show N lines of context around matches--define <SYMBOL>- Find and display the definition of a symbol with full context--log-requests- Enable detailed HTTP request logging with timing and size information--cpp- Filter results to C++ files only (.cc, .cpp, .h, .hh, .hpp)--c- Filter results to C files only (.c, .h)--webidl- Filter results to WebIDL files only (.webidl)--js- Filter results to JavaScript files only (.js, .mjs, .ts, .cjs, .jsx, .tsx)--calls-from <SYMBOL>- Show what functions are called by the specified symbol--calls-to <SYMBOL>- Show what functions call the specified symbol--calls-between <SOURCE,TARGET>- Show direct calls from source class/namespace to target class/namespace--depth <N>- Set traversal depth for call graph searches (default: 1)--field-layout <CLASS>- Display C++ class/struct memory layout (aliases:--class-layout,--struct-layout)
Call Graph Analysis
Understand code flow and dependencies with LLM-friendly markdown output:
# What does a function call?
searchfox-cli --calls-from 'mozilla::AudioCallbackDriver::DataCallback'
# What calls this function?
searchfox-cli --calls-to 'mozilla::AudioCallbackDriver::Start'
# How do two classes interact?
searchfox-cli --calls-between 'mozilla::dom::AudioContext,mozilla::MediaTrackGraph' --depth 2
Output features:
- Results grouped by parent class/namespace
- Both definition and declaration locations shown
- Overloaded functions collapsed with all variants listed
- Mangled symbols included for subsequent queries
- Direct call edges (for
calls-between)
Examples
# Find all AudioStream references
searchfox-cli -q AudioStream
# Find function definitions starting with "Audio"
searchfox-cli -q '^Audio.*' -r
# Search only in media-related files
searchfox-cli -q AudioStream -p ^dom/media
# Get a specific file
searchfox-cli --get-file dom/media/AudioStream.h
# Search in Thunderbird codebase
searchfox-cli -q "MailServices" -R comm-central
# Find where AudioContext is defined
searchfox-cli --symbol AudioContext
# Find exact matches for "main" function
searchfox-cli --id main
# Search with context lines
searchfox-cli -q AudioStream --context 5
# Symbol search using searchfox's symbol index
searchfox-cli --symbol 'AudioContext'
searchfox-cli --symbol 'CreateGain'
# Find complete definition with context
searchfox-cli --define 'AudioContext::CreateGain'
searchfox-cli --define 'AudioContext'
# Language filtering
searchfox-cli --define AudioContext -p dom/media --cpp
searchfox-cli -q malloc --c
searchfox-cli -q AudioContext --js
# File path search
searchfox-cli -p PContent.ipdl
searchfox-cli -p AudioContext.cpp
# Advanced query syntax
searchfox-cli -q 'path:dom/media symbol:AudioStream'
searchfox-cli -q 're:AudioContext::.*Create'
# Class memory layout inspection
searchfox-cli --field-layout 'mozilla::dom::AudioContext'
searchfox-cli --class-layout 'soundtouch::SoundTouch'
# Performance analysis with request logging
searchfox-cli --log-requests --define 'AudioContext::CreateGain'
searchfox-cli --log-requests -q AudioStream -l 10
# Cache control for file fetches
searchfox-cli --get-file dom/media/AudioStream.h --force-refetch
searchfox-cli --get-file dom/media/AudioStream.h --no-cache
searchfox-cli --clear-cache
Request Logging
searchfox-cli --log-requests --define 'AudioContext::CreateGain'
Shows HTTP request timing, response sizes, and baseline latency for performance analysis.
File Cache Policy
--get-file uses an on-disk SQLite cache at $XDG_CACHE_HOME/searchfox-cli/cache.db, or ~/.cache/searchfox-cli/cache.db when XDG_CACHE_HOME is unset.
- Fresh TTL: cached file contents are reused for 1 hour without a network request.
- Revalidation: after 1 hour, the client sends conditional requests with
ETagandLast-Modifiedwhen available. A304 Not Modifiedresponse refreshes the cache timestamp without reparsing the file. - Retention: cache entries older than 7 days are pruned when the client opens the cache database.
- Scope: the cache currently applies to
--get-file/SearchfoxClient::get_file.
Manual cache control:
searchfox-cli --clear-cache
searchfox-cli --get-file dom/media/AudioStream.h --force-refetch
searchfox-cli --get-file dom/media/AudioStream.h --no-cache
--clear-cachedeletes the cache database and exits.--force-refetchbypasses any cached file entry for the current invocation, fetches fresh content from searchfox, and updates the cache if caching is enabled.--no-cachedisables cache reads and writes for the current invocation.
Python API
import searchfox
client = searchfox.SearchfoxClient("mozilla-central")
results = client.search(query="AudioStream", limit=10)
definition = client.get_definition("AudioContext::CreateGain")
content = client.get_file("dom/media/AudioStream.h")
Installation:
cd searchfox-py && maturin develop # Development
cd searchfox-py && maturin build --release # Distribution wheel
See python/examples/ for complete examples.
License
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file searchfox-0.18.0-cp38-abi3-win_amd64.whl.
File metadata
- Download URL: searchfox-0.18.0-cp38-abi3-win_amd64.whl
- Upload date:
- Size: 4.1 MB
- Tags: CPython 3.8+, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
839c0ee0b9214ad8f9845d81f52796efb0523e7d375a7ac109fac4055c678353
|
|
| MD5 |
7ac0952bfc1b37370aad573a4174f87c
|
|
| BLAKE2b-256 |
8d5dd00991af907ea3ac526c037eb4b255ca63f36dbd7e200708f6258b38f8e6
|
Provenance
The following attestation bundles were made for searchfox-0.18.0-cp38-abi3-win_amd64.whl:
Publisher:
release.yml on padenot/searchfox-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
searchfox-0.18.0-cp38-abi3-win_amd64.whl -
Subject digest:
839c0ee0b9214ad8f9845d81f52796efb0523e7d375a7ac109fac4055c678353 - Sigstore transparency entry: 1938104312
- Sigstore integration time:
-
Permalink:
padenot/searchfox-cli@b878a6e8b5c0cebf18588d15c1bcebf4477990a1 -
Branch / Tag:
refs/tags/v0.18.0 - Owner: https://github.com/padenot
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@b878a6e8b5c0cebf18588d15c1bcebf4477990a1 -
Trigger Event:
push
-
Statement type:
File details
Details for the file searchfox-0.18.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: searchfox-0.18.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 4.8 MB
- Tags: CPython 3.8+, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6049323ad6e7135cb37a4992fba1dca71213b536369f879717e695537622e523
|
|
| MD5 |
d37aea35deea03420329523dcc716d98
|
|
| BLAKE2b-256 |
2cb64610f8b96969c5ac75e98ede5a92f41d36bc63c9cf26f086fa0d070ad5cd
|
Provenance
The following attestation bundles were made for searchfox-0.18.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
release.yml on padenot/searchfox-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
searchfox-0.18.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
6049323ad6e7135cb37a4992fba1dca71213b536369f879717e695537622e523 - Sigstore transparency entry: 1938104601
- Sigstore integration time:
-
Permalink:
padenot/searchfox-cli@b878a6e8b5c0cebf18588d15c1bcebf4477990a1 -
Branch / Tag:
refs/tags/v0.18.0 - Owner: https://github.com/padenot
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@b878a6e8b5c0cebf18588d15c1bcebf4477990a1 -
Trigger Event:
push
-
Statement type:
File details
Details for the file searchfox-0.18.0-cp38-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: searchfox-0.18.0-cp38-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 4.3 MB
- Tags: CPython 3.8+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ee97997ea4054453476d3fba9300c39e983148554667e2665317dc6cd9e7bd50
|
|
| MD5 |
f19824f81ace28e64b48bc6f4fc6651d
|
|
| BLAKE2b-256 |
be7e62284ab6a6de1902808acbb3dc4acb02aab3c8d9e77948739c9a7da3c246
|
Provenance
The following attestation bundles were made for searchfox-0.18.0-cp38-abi3-macosx_11_0_arm64.whl:
Publisher:
release.yml on padenot/searchfox-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
searchfox-0.18.0-cp38-abi3-macosx_11_0_arm64.whl -
Subject digest:
ee97997ea4054453476d3fba9300c39e983148554667e2665317dc6cd9e7bd50 - Sigstore transparency entry: 1938104490
- Sigstore integration time:
-
Permalink:
padenot/searchfox-cli@b878a6e8b5c0cebf18588d15c1bcebf4477990a1 -
Branch / Tag:
refs/tags/v0.18.0 - Owner: https://github.com/padenot
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@b878a6e8b5c0cebf18588d15c1bcebf4477990a1 -
Trigger Event:
push
-
Statement type:
File details
Details for the file searchfox-0.18.0-cp38-abi3-macosx_10_12_x86_64.whl.
File metadata
- Download URL: searchfox-0.18.0-cp38-abi3-macosx_10_12_x86_64.whl
- Upload date:
- Size: 4.4 MB
- Tags: CPython 3.8+, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a830f6f402181d583bb74eb14a77b1ed10113bf33a3d4a66261643ca9782f73d
|
|
| MD5 |
5f7644360b0cd08deb6b22222cfb6a68
|
|
| BLAKE2b-256 |
219744efffea01dbea6d04b7cce4b106e8786a4f219434a9192560a28a70145c
|
Provenance
The following attestation bundles were made for searchfox-0.18.0-cp38-abi3-macosx_10_12_x86_64.whl:
Publisher:
release.yml on padenot/searchfox-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
searchfox-0.18.0-cp38-abi3-macosx_10_12_x86_64.whl -
Subject digest:
a830f6f402181d583bb74eb14a77b1ed10113bf33a3d4a66261643ca9782f73d - Sigstore transparency entry: 1938104171
- Sigstore integration time:
-
Permalink:
padenot/searchfox-cli@b878a6e8b5c0cebf18588d15c1bcebf4477990a1 -
Branch / Tag:
refs/tags/v0.18.0 - Owner: https://github.com/padenot
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@b878a6e8b5c0cebf18588d15c1bcebf4477990a1 -
Trigger Event:
push
-
Statement type: