Advanced Search
GitHub search query language, qualifiers, and filtering for issues, PRs, and code.
Listen
Transcript
Alex: Welcome back. Today we're talking about GitHub advanced search, which sounds like a power-user feature, but it is really a way to stop wandering around the site when you already know what you want.
Jamie: I love that framing, because search is where I go when I can't remember which repo, issue, pull request, or file I saw something in.
Alex: Exactly. GitHub search can reach across repositories, code, issues, pull requests, commits, users, organizations, and topics. The trick is learning the small query language that narrows the results before you ever press Enter.
Jamie: So instead of opening menus and checking boxes, I can type a more precise sentence into the search field.
Alex: Yes. And if you use a screen reader or high zoom, that can be a big relief. A typed query often gives you a clean results page faster than moving through filter dropdowns, sidebars, and checkbox menus.
Jamie: Where do you start from on GitHub?
Alex: On most GitHub pages, press slash to focus the global search bar at the top. Type your query, press Enter, and GitHub opens a results page grouped by type, such as Code, Issues, Pull requests, Repositories, and Users.
Jamie: Global search is the one at the top of the page. But GitHub also has search boxes inside repositories, right?
Alex: Right. The global search bar starts broad, across all of GitHub unless your query narrows it. Inside a repository, the Issues tab and Pull requests tab have their own search fields, and those are already scoped to that repository.
Jamie: So if I'm in a repo's Issues tab, I don't need to type the repo name unless I want to be extra explicit.
Alex: Exactly. But when you're starting from the top search bar, you can scope the search yourself with qualifiers like repo:owner/name, org:orgname, or user:username. A qualifier is a key and a value separated by a colon.
Jamie: Give me a concrete one.
Alex: repo:community-access/accessibility-agents in:title keyboard searches that repository for results with keyboard in the title. The in:title part says, do not search every body and comment; focus on the title field.
Jamie: That would reduce a lot of noise. What about in:body and in:comments?
Alex: Those work the same way. Use in:body when the important detail is likely in the description, and in:comments when you're looking for discussion after the issue or pull request was opened.
Jamie: And if I do lose the search bar visually at high zoom, slash brings me back there.
Alex: Yes. After results load, screen reader users can jump by headings to move between result groups. Low vision users can also use browser zoom to make GitHub's bold matched terms easier to find, and the Advanced Search page at github.com/search/advanced is a good bookmark if you want labeled form fields instead of compact syntax.
Alex: The query language itself starts simple. If you type two words, GitHub treats that as both words. So keyboard navigation means results should match keyboard and navigation.
Jamie: And if I want either word?
Alex: Use OR in capital letters, like keyboard OR focus. For an exact phrase, put it in straight quote marks, like "skip link". To exclude a word, put a minus sign in front, like -deprecated.
Jamie: I have definitely needed that last one. Sometimes one noisy term takes over the whole search.
Alex: You can also exclude a qualifier. For example, -label:bug means results should not have the bug label. That same key:value pattern is the heart of GitHub search.
Jamie: Let's unpack the issue and pull request qualifiers people see all the time.
Alex: is:open means open items only, and is:closed means closed items only. is:issue limits results to issues, and is:pr limits results to pull requests. For pull requests, is:merged finds merged PRs, and is:unmerged finds PRs that were not merged.
Jamie: And labels?
Alex: label:accessibility finds items with that label. If the label has spaces, quote it, like label:"good first issue". no:label finds items with no labels, no:assignee finds items assigned to nobody, and no:milestone finds items not attached to a milestone.
Jamie: What about the human side, like who made it or who owns it now?
Alex: author:@me finds items you created. assignee:@me finds items assigned to you. mentions:username finds places where that user was mentioned, and involves:@me is broader: it can include things you created, were assigned to, were mentioned in, or commented on.
Jamie: Dates use the same style?
Alex: Yes. created:>2025-01-01 means created after that date. updated:<2026-01-01 means updated before that date. A range looks like created:2025-01-01..2025-03-31.
Jamie: Let's use this for issues and pull requests, because that is where a lot of contribution work starts.
Alex: A good direct place is github.com/issues for issues involving you, and github.com/pulls for pull requests involving you. Those pages are already focused on repositories you have access to, so the result list can feel more manageable than a full global search.
Jamie: What would I type if I wanted open accessibility issues in an organization, but only ones nobody has claimed yet?
Alex: org:community-access is:issue is:open label:accessibility no:assignee. That says: search this organization, only issues, only open ones, with the accessibility label, and no current assignee.
Jamie: That is much more precise than searching the word accessibility and hoping.
Alex: For beginner-friendly work across GitHub, try is:issue is:open label:"good first issue" no:assignee. If you want a language filter, add language:python or language:javascript.
Jamie: Does language always make sense for issues?
Alex: It depends. GitHub can use repository language signals, so it is useful when you want issues from projects mostly written in a language. It does not mean the issue text itself is written in Python or JavaScript.
Jamie: What about pull request review?
Alex: A daily review query is is:pr is:open review-requested:@me. If you need pull requests where someone mentioned you, use is:pr is:open mentions:@me. To find your own open issues, use is:issue is:open author:@me.
Jamie: And stale work?
Alex: Use a date qualifier. For example, is:issue is:open repo:owner/name updated:<2024-08-01 finds open issues in one repository that have not been updated since before that date.
Jamie: Pull requests have a few special qualifiers too, don't they?
Alex: They do. review:approved can find PRs with an approving review. draft:true finds draft pull requests, while is:draft is another common way to express that. head:branch-name searches by the source branch of a PR, and base:main searches by the target branch.
Jamie: So base:main is useful when I only care about PRs trying to merge into main.
Alex: Exactly. And once the results are right, sorting helps. sort:created-asc puts the oldest created results first, while sort:updated-desc puts the most recently updated results first.
Alex: Code search feels related, but it has its own behavior. GitHub's modern code search is built for files, symbols, paths, and exact strings, not just issue text.
Jamie: So if I want to find aria-label in JavaScript files inside one repo?
Alex: Use repo:owner/name language:javascript aria-label. That combines a repository scope, a language filter, and the text you want to find.
Jamie: What if I know the function name?
Alex: Try symbol:handleKeyDown with a repo scope, like repo:owner/name symbol:handleKeyDown. Symbol search is meant for named code things such as functions or classes, where GitHub can recognize them.
Jamie: And across an organization?
Alex: org:community-access aria-hidden="true" searches across repositories in that organization for that exact pattern. You can tighten it with path:src/ to search only files under a path, extension:md to search Markdown files, filename:config.yml for a specific file name, or content:"exact string" for an exact string in file content.
Jamie: I like path:src/ because it lets me ignore docs or generated files when they are not relevant.
Alex: Exactly. And org: and repo: are useful here too. repo:owner/name means one repository, while org:orgname means all repositories in that organization.
Jamie: Commits are searchable too, but I always forget that.
Alex: They are. A query like repo:owner/name fix keyboard navigation can find commits with those words in the message. repo:owner/name author:username finds commits by a specific author, committer-date:2025-01-01..2025-03-31 narrows by date range, and path:docs/README.md finds commits touching a specific file.
Jamie: Search is not only for work items and files. It can also help you discover projects.
Alex: Yes. Repository search is great for finding communities and examples. topic:accessibility stars:>50 is:public finds public repositories tagged with the accessibility topic and more than 50 stars.
Jamie: And if I want TypeScript projects related to screen readers?
Alex: language:typescript topic:screen-reader sort:stars-desc. That filters by language and topic, then sorts with the most-starred repositories first.
Jamie: What other repository qualifiers are useful?
Alex: stars:>100, forks:>10, archived:false, and pushed:>2025-01-01 are common ones. You can use them to avoid abandoned projects, or to find active projects with a certain amount of community activity.
Jamie: Can I search for people and organizations the same way?
Alex: Yes. User and organization search supports qualifiers like type:user, type:org, location:, and fullname:. You might search accessibility type:user, or accessibility type:org, then use the result type filters to narrow what GitHub shows.
Alex: In this workshop, search becomes especially useful when you're looking for contribution opportunities or checking whether a report already exists.
Jamie: So before I file a new issue, I can search for the problem first.
Alex: Exactly. In a repository, use terms from the problem plus is:issue. If the issue is about keyboard focus, a query like repo:owner/name is:issue keyboard focus in:title can quickly show whether someone already filed something similar.
Jamie: And for the Accessibility Agents work, we should treat that collection as a living catalog, not a fixed set.
Alex: Right. Challenge 15 is browse-first, so search can help you discover what is already there without requiring a fork. A query like repo:community-access/accessibility-agents is:issue is:open label:accessibility can help you find current discussion or possible work, depending on the repository's labels.
Jamie: Then Challenge 16, the Capstone Project, is broader than one repo.
Alex: Yes. A meaningful capstone contribution might be to Accessibility Agents, GLOW, or another repository where the work matters. Review-ready drafts and contribution plans can count as completion evidence, so search can help you gather proof, locate related issues, and avoid duplicating work.
Jamie: What about proof after the fact?
Alex: Use is:pr is:merged author:@me to find your merged pull requests. Add org:community-access or repo:owner/name if you need proof from a specific place. For recent discussion about a topic, combine the topic words with updated:>2025-01-01 and maybe in:comments.
Jamie: I know I can bookmark a results page, but is there a better habit than leaving a pile of random bookmarks?
Alex: Build a small personal search library. Save the searches you actually reuse: review requests, your open issues, beginner-friendly issues, stale issues in a repo you maintain, and proof of merged work.
Jamie: Because the query is stored in the URL after I run the search.
Alex: Exactly. You can bookmark that URL, keep it in a notes file, or make a Markdown table with the name of the search, the query, and when you use it. That turns search from a one-time trick into part of your workflow.
Jamie: And if I live in the terminal?
Alex: The GitHub CLI has gh search commands. For example, gh search issues "is:open label:accessibility no:assignee" can bring issue search into your command line, and gh search prs "is:open review-requested:@me" can help you check review requests without opening the browser first.
Jamie: So the same mental model carries over: words, qualifiers, scopes, dates, and sorting.
Alex: That's the key. Start broad only when you need to explore. When you know the repository, organization, state, label, author, date, or file path, put that knowledge into the query.
Jamie: And the payoff is not just faster search. It is fewer wrong turns, fewer duplicate issues, and a cleaner path to the contribution you were trying to make.
Alex: Well said. Advanced search is one of those skills that makes GitHub feel smaller, calmer, and much more navigable.
Workshop Content
Companion Podcast and Transcript
Use audio and transcript companions to review concepts in a conversational format.
Advanced Search
Companion audio: this episode reinforces key ideas and may not be a word-for-word reading of this page.
Open audio file (external) Full transcript source (external)
Transcript preview
Alex: Welcome back. Today we're talking about GitHub advanced search, which sounds like a power-user feature, but it is really a way to stop wandering around the site when you already know what you want.
Jamie: I love that framing, because search is where I go when I can't remember which repo, issue, pull request, or file I saw something in.
Alex: Exactly. GitHub search can reach across repositories, code, issues, pull requests, commits, users, organizations, and topics. The trick is learning the small query language that narrows the results before you ever press Enter.
Jamie: So instead of opening menus and checking boxes, I can type a more precise sentence into the search field.
Appendix N: GitHub Advanced Search
Listen to Episode 27: Advanced Search - a conversational audio overview of this chapter. Listen before reading to preview the concepts, or after to reinforce what you learned.
Reference companion to: Chapter 05: Working with Issues | Also relevant: Chapter 09
Authoritative source: GitHub Docs: Searching on GitHub
Finding Anything Across All of GitHub
GitHub's search engine is powerful and underused. For screen reader users in particular, using the search bar with precise query syntax is often faster and more accessible than navigating filter dropdowns and checkbox menus. This reference covers the query language so you can filter anything from the keyboard.
Table of Contents
- The Search Interface
- Search Scopes
- The Core Query Language
- Searching Issues and Pull Requests
- Searching Code
- Searching Commits
- Searching Repositories
- Searching Users and Organizations
- Practical Queries for This Workshop
- Saving and Reusing Searches
1. The Search Interface
GitHub's search is accessible from nearly any page:
- Global search bar: At the top of every GitHub page - keyboard shortcut
/to focus it from anywhere (press/, then type) - Issues/PRs list: Each tab has its own search bar pre-scoped to that repository
- Advanced Search UI:
github.com/search/advanced- a form with individual fields for each filter. Accessible but verbose; query syntax below is faster.
Keyboard to global search
/ → Focus the global search bar (works on most GitHub pages)
Type your query → Enter
→ Results page opens, grouped by type (Code, Issues, PRs, Repositories, etc.)
Learning Cards: The Search Interface
Screen reader users
- Press
/on any GitHub page to jump straight to the global search bar — no Tab hunting required - After pressing Enter on a query, results are grouped by type under headings (Code, Issues, PRs, Repositories) — use
Hto jump between groups - Query syntax typed directly in the search bar is often faster and more accessible than the Advanced Search form at github.com/search/advanced
Low vision users
- The search bar sits at the very top of every GitHub page — if you lose it at high zoom, press
/to refocus instantly - Search results use bold text for matched terms — increase browser zoom to make the highlighted keywords easier to spot
- Pin the Advanced Search page (github.com/search/advanced) as a bookmark for days when you prefer large labeled form fields over compact query syntax
Sighted users
- Look for the search bar in the top navigation bar — it shows a
/hint icon on the right to remind you of the keyboard shortcut - After submitting a query, use the left sidebar type filters (Code, Issues, PRs, etc.) to narrow results visually
- GitHub highlights matched keywords in yellow within search results — scan for those highlights to evaluate relevance quickly
2. Search Scopes
By default, GitHub searches across all of GitHub. Scope modifiers restrict results:
| Modifier | Scope |
|---|---|
repo:owner/name |
One specific repository |
org:orgname |
All repos in an organization |
user:username |
All repos owned by a user |
in:title |
Only matches in the title field |
in:body |
Only matches in the body field |
in:comments |
Only matches in comments |
Example: repo:community-access/accessibility-agents in:title keyboard finds issues/PRs whose titles mention "keyboard" in the accessibility-agents repo.
3. The Core Query Language
Boolean Logic
| Syntax | Meaning |
|---|---|
word1 word2 |
Both words (implicit AND) |
word1 OR word2 |
Either word |
"exact phrase" |
Exact phrase match |
-word |
Exclude this word |
-label:bug |
Exclude items with this label |
Common Qualifiers
| Qualifier | Meaning |
|---|---|
is:open |
Open items only |
is:closed |
Closed items only |
is:merged |
Merged PRs only |
is:unmerged |
Open or closed but not merged PRs |
is:issue |
Issues only |
is:pr |
Pull requests only |
is:draft |
Draft pull requests only |
label:name |
Items with this label |
no:label |
Items with no labels |
assignee:@me |
Assigned to you |
assignee:username |
Assigned to a specific user |
author:@me |
Created by you |
author:username |
Created by a specific user |
mentions:username |
Mentions a specific user |
involves:@me |
You are author, assignee, mentioned, or commented |
milestone:"Milestone Name" |
In a specific milestone |
no:milestone |
Not in any milestone |
no:assignee |
Not assigned to anyone |
comments:>5 |
More than 5 comments |
reactions:>10 |
More than 10 reactions |
Date Qualifiers
| Qualifier | Meaning |
|---|---|
created:>2025-01-01 |
Created after a date |
created:<2025-01-01 |
Created before a date |
created:2025-01-01..2025-03-31 |
Created in a date range |
updated:>2025-06-01 |
Updated after a date |
closed:>2025-06-01 |
Closed after a date |
4. Searching Issues and Pull Requests
Going to the Issues search directly
GitHub's issue/PR search is at github.com/issues (your issues) or github.com/pulls (your PRs). The search bar there is pre-scoped to "repos you have access to involving you."
Practical queries
Find all unassigned, open accessibility issues across an org
org:community-access is:issue is:open label:accessibility no:assignee
Find good first issues in any language
is:issue is:open label:"good first issue" no:assignee
Find good first issues in a specific language
is:issue is:open label:"good first issue" language:python no:assignee
Find all PRs you need to review
is:pr is:open review-requested:@me
Find all open PRs where you were mentioned
is:pr is:open mentions:@me
Find your open issues across all repos
is:issue is:open author:@me
Find issues that are stale (open, not updated in 6+ months)
is:issue is:open repo:owner/name updated:<2024-08-01
Learning Cards: Searching Issues and Pull Requests
Screen reader users
- The
is:pr is:open review-requested:@mequery is your daily go-to — it lists every PR waiting for your review without navigating the Pulls tab - Combine
assignee:@mewithis:opento get your personal task list announced as a simple results list - Use
in:titleorin:bodyqualifiers to avoid noisy matches buried in long comment threads
Low vision users
- Bookmark the URL after running a search — the full query is encoded in the address bar so you can reuse it without retyping
- The Issues search page (github.com/issues) pre-scopes to your repos — at high zoom this single-column list is easier to scan than a full global search
- Results show labels as colored badges next to each title — zoom in or hover to read the label text if the color alone is hard to distinguish
Sighted users
- The left sidebar on the search results page lets you toggle between Issues and PRs with one click — use it to refine without editing your query
- Look for the green (open), purple (merged), or red (closed) state icons next to each result for quick visual triage
- Star or bookmark the "good first issue" query from Section 4 — it is the fastest way to find your next contribution
5. Searching Code
Code search operates differently from issue search. As of 2024, GitHub uses an improved code search engine (sometimes called "code search v2") with better indexing.
Basic code search
repo:owner/name language:javascript aria-label
Find uses of a function across a repo
repo:owner/name symbol:handleKeyDown
Find a pattern across all repos in an org
org:community-access aria-hidden="true"
Code search qualifiers
| Qualifier | Meaning |
|---|---|
language:python |
Filter by programming language |
path:src/ |
Only files under this path |
filename:config.yml |
Only files with this name |
extension:md |
Only files with this extension |
symbol:functionName |
Search for a specific symbol/function name |
content:"exact string" |
Exact string match in file content |
6. Searching Commits
Find commits with a keyword in the message
repo:owner/name fix keyboard navigation
Find commits by a specific author
repo:owner/name author:username
Find commits in a date range
repo:owner/name committer-date:2025-01-01..2025-03-31
Find commits that touched a specific file
repo:owner/name path:docs/README.md
7. Searching Repositories
Find accessible repos by topic
topic:accessibility stars:>50 is:public
Find repos with a specific language, sorted by stars
language:typescript topic:screen-reader sort:stars-desc
Repository qualifiers
| Qualifier | Meaning |
|---|---|
stars:>100 |
More than 100 stars |
forks:>10 |
More than 10 forks |
is:public |
Public repos only |
is:private |
Private repos only (requires access) |
topic:topicname |
Repos tagged with this topic |
license:mit |
Repos with an MIT license |
size:<1000 |
Repos smaller than 1000 KB |
pushed:>2025-01-01 |
Repos with recent activity |
8. Searching Users and Organizations
Find users
type:user location:Seattle followers:>100
Find organizations
type:org topic:accessibility
9. Practical Queries for This Workshop
Bookmark these for use during the hackathon:
Find open contributions you can make right now in accessibility-agents
repo:community-access/accessibility-agents is:issue is:open label:"good first issue" no:assignee
Check whether your issue is already filed
repo:community-access/accessibility-agents is:issue keyboard navigation
Find all accessibility-related issues in a project
repo:community-access/accessibility-agents is:issue label:accessibility is:open
See all your merged PRs (proof of contribution)
is:pr is:merged author:@me
Find recent discussions about a topic
repo:community-access/accessibility-agents in:discussions screen reader
10. Saving and Reusing Searches
GitHub does not have a built-in saved-search feature, but you can:
- Bookmark the URL - every search result page has the query in the URL. Bookmark it in your browser for instant re-run.
- Pin in notifications - if you're watching a repo, set up notification filters
- Accessibility Agents - use
/my-issuesand/my-prsfor your personal saved-search equivalents without leaving VS Code
Example bookmarkable URL
https://github.com/issues?q=is%3Aissue+is%3Aopen+assignee%3A%40me
Next: Appendix O: Branch Protection
Back: Appendix M: Accessibility Standards
Teaching chapter: Chapter 05: Working with Issues
Authoritative Sources
Use these official references when you need the current source of truth for facts in this chapter.
Section-Level Source Map
Use this map to verify facts for each major section in this file.
- Finding Anything Across All of GitHub: GitHub Docs, home, GitHub Changelog, GitHub code search syntax, Advanced search docs, About Git
- 1. The Search Interface: GitHub Docs, home, GitHub Changelog, GitHub code search syntax, Advanced search docs
- 2. Search Scopes: GitHub Docs, home, GitHub Changelog, GitHub code search syntax, Advanced search docs
- 3. The Core Query Language: GitHub Docs, home, GitHub Changelog, GitHub code search syntax, Advanced search docs
- 4. Searching Issues and Pull Requests: GitHub Docs, home, GitHub Changelog, GitHub code search syntax, Advanced search docs, About Git
- 5. Searching Code: GitHub Docs, home, GitHub Changelog, GitHub code search syntax, Advanced search docs
- 6. Searching Commits: GitHub Docs, home, GitHub Changelog, GitHub code search syntax, Advanced search docs, About Git
- 7. Searching Repositories: GitHub Docs, home, GitHub Changelog, GitHub code search syntax, Advanced search docs
- 8. Searching Users and Organizations: GitHub Docs, home, GitHub Changelog, GitHub code search syntax, Advanced search docs
- 9. Practical Queries for This Workshop: GitHub Docs, home, GitHub Changelog, GitHub code search syntax, Advanced search docs
- 10. Saving and Reusing Searches: GitHub Docs, home, GitHub Changelog, GitHub code search syntax, Advanced search docs