GitHub Search
Quick Commands
Goal Command
Search repos gh search repos "<query>" --limit 30
Search code gh search code "<query>" --limit 30
Search issues gh search issues "<query>" --limit 30
Search PRs gh search prs "<query>" --limit 30
Direct API Search (Web-Exact Results)
For complex queries where gh search repos gives different results than web:
Template - URL-encodes query automatically
gh api "search/repositories?q=$(printf '%s' 'YOUR_QUERY_HERE' | jq -sRr @uri)&sort=updated&per_page=30" --jq '.items[].full_name'
Example - Multi-language with exclusions:
gh api "search/repositories?q=$(printf '%s' 'stars:>500 language:rust language:go language:TypeScript language:javascript -topic:ethereum -topic:cryptocurrency -topic:blockchain -topic:bitcoin -topic:web3' | jq -sRr @uri)&sort=updated&per_page=10" --jq '.items[].full_name'
Why use this?
-
gh search repos is a convenience wrapper with its own query parsing
-
gh api search/repositories hits the raw API, matching web behavior exactly
-
Required when combining: multiple languages + topic exclusions + star filters
Common jq extractions:
Output jq filter
Names only --jq '.items[].name'
Full names --jq '.items[].full_name'
With stars --jq '.items[] | "(.full_name) ⭐(.stargazers_count)"'
URLs --jq '.items[].html_url'
Full JSON (omit --jq)
Patterns
Finding Repositories
When you see: User wants to find projects/repos by criteria Use: gh search repos
Basic search with stars
gh search repos "stars:>500 language:rust" --sort=stars --limit=50
Multiple languages (OR logic)
gh search repos "language:rust language:go language:typescript"
Exclude topics
gh search repos "stars:>1000 -topic:cryptocurrency -topic:blockchain"
By topic
gh search repos "topic:cli topic:terminal stars:>100"
Recently updated
gh search repos "language:python pushed:>2024-01-01"
Output formats:
--json name,url,description,stargazersCount # JSON output --web # Open in browser
Finding Code Examples
When you see: User wants to know how to use a library Use: gh search code
Find usage patterns
gh search code "from zod import" --limit=20 gh search code "import { z } from 'zod'" --limit=20
In specific file types
gh search code "useQuery" extension:tsx --limit=30
In specific paths
gh search code "tanstack/query" path:src/ extension:ts
Exact phrase
gh search code '"createTRPCRouter"' extension:ts
Pro tip: Combine with repo filter for focused results:
gh search code "pattern" repo:owner/repo
Finding Issues/Discussions
When you see: User looking for bug reports, feature requests, or discussions Use: gh search issues or gh search prs
Open issues with label
gh search issues "is:open label:bug repo:facebook/react"
PRs by author
gh search prs "author:username is:merged"
Issues mentioning error
gh search issues '"connection refused" language:go'
Query Qualifiers Reference
Repo Search
Qualifier Example Description
stars:
stars:>1000 , stars:100..500
Star count
forks:
forks:>100
Fork count
language:
language:rust
Primary language
topic:
topic:cli
Repository topic
-topic:
-topic:blockchain
Exclude topic
pushed:
pushed:>2024-01-01
Last push date
created:
created:>2023-01-01
Creation date
license:
license:mit
License type
archived:
archived:false
Archive status
is:
is:public , is:private
Visibility
Code Search
Qualifier Example Description
extension:
extension:ts
File extension
path:
path:src/
File path
repo:
repo:owner/name
Specific repo
language:
language:javascript
Code language
filename:
filename:package.json
File name
Common Flags
Flag Description
--limit N
Number of results (max 1000)
--sort X
Sort by: stars, forks, updated, best-match
--order X
asc or desc
--json FIELDS
JSON output with specific fields
--web
Open results in browser
Common Use Cases
"Find popular X repos"
gh search repos "language:X stars:>500" --sort=stars --limit=50
"How do people use library Y"
gh search code "import Y" extension:ts --limit=30 gh search code "from Y import" extension:py --limit=30
"Find repos like Z but exclude crypto"
gh search repos "topic:Z -topic:cryptocurrency -topic:blockchain -topic:web3"
"Find recent active projects"
gh search repos "language:go pushed:>2024-06-01 stars:>100" --sort=updated
Tips
-
Quote the query when it contains special chars: gh search repos "stars:>500"
-
Multiple languages = OR: language:rust language:go matches either
-
Use --json for scripting: --json name,url,stargazersCount
-
Date ranges: pushed:2024-01-01..2024-06-01
-
Numeric ranges: stars:100..500
-
Use gh api for complex queries: When gh search repos gives unexpected results, use gh api search/repositories?q=... for exact web parity