Skip to content

appendix b screen reader cheatsheet

taylorarndt edited this page Mar 7, 2026 · 1 revision

Appendix B: Screen Reader Cheat Sheet

Listen to Episode 19: Screen Reader Cheat Sheet - a conversational audio overview of this chapter. Listen before reading to preview the concepts, or after to reinforce what you learned.

GitHub Navigation with NVDA, JAWS, and VoiceOver

How to use this sheet: Keep it open in a second window or print it. Commands are organized by task so you can find what you need quickly while you work. All commands are keyboard-only - no mouse required.

Screen Reader Mode Basics

Before navigating GitHub, understand the two fundamental modes that all screen readers use on the web:

Browse Mode (also called Virtual Cursor / Reading Mode)

This is your primary mode for reading and navigating pages. The screen reader intercepts keystrokes and uses them as navigation commands - for example, pressing H jumps to the next heading rather than typing the letter H.

Screen Reader How to know you're in Browse Mode
NVDA Lower-pitched sound when switching; NVDA says "browse mode"
JAWS JAWS says "virtual cursor on"
VoiceOver No mode switching needed - VoiceOver uses the VO modifier keys

Focus Mode (also called Forms or Application Mode)

This mode is for typing and interacting with form fields, text areas, buttons, and interactive widgets. Your keystrokes go directly to the web page instead of being captured by the screen reader.

Screen Reader Toggle Focus/Browse Mode When to use
NVDA NVDA+Space (Insert+Space or CapsLock+Space) Type in comment boxes, issue titles, PR descriptions
JAWS JAWS+Z (Insert+Z) or automatic Same
VoiceOver VO+Shift+Down to interact with an element Same

Rule of thumb: Browse mode to navigate, Focus mode to type.

Quick Navigation Keys (Browse Mode)

These single-key shortcuts work in Browse Mode (NVDA and JAWS). VoiceOver users with Quick Nav enabled use the same keys.

Heading Navigation - Your Most-Used Tool

GitHub structures pages with headings. Jumping between headings is the fastest way to navigate.

Key Action VoiceOver
H Next heading (any level) H (Quick Nav on)
Shift+H Previous heading Shift+H
1 Next h1 (page title) 1
2 Next h2 (section heading) 2
3 Next h3 (issue/PR titles are h3) 3
4 Next h4 (commit titles in PRs) 4

Landmark Navigation - Jump Between Page Regions

Landmarks are named regions of a page (navigation, main content, sidebar, etc.). GitHub uses landmarks heavily.

Key Action VoiceOver
D Next landmark / region VO+U → Landmarks rotor
Shift+D Previous landmark Same, navigate backwards

GitHub landmarks you will encounter

Landmark Label What It Contains
Navigation Menu Your avatar menu and global nav
Repository navigation Code, Issues, PRs, Actions tabs
Main The primary page content
Repository files navigation README display
Pull requests list The list of PRs
Search Results List Issues or PR list results
Add a comment Comment submission form
Pagination Next/Previous page buttons

Link, Button, and Form Navigation

Key Action JAWS Equivalent VoiceOver
K Next link Tab or U VO+U → Links rotor
Shift+K Previous link Shift+U -
B Next button B VO+U → Buttons rotor
Shift+B Previous button Shift+B -
F or E Next edit/form field F VO+U → Form Controls
Tab Next interactive element (any type) Tab Tab
Shift+Tab Previous interactive element Shift+Tab Shift+Tab
Enter / Space Activate link or button Same VO+Space

List and Table Navigation

Key Action Notes
L Next list Useful for spotting issue/PR lists
I Next list item Navigate within a list
T Next table Use this for the files table in a repo
Ctrl+Alt+→ Move right in a table cell Navigate table columns
Ctrl+Alt+← Move left in a table cell
Ctrl+Alt+↓ Move down in a table (next row) Navigate file list rows
Ctrl+Alt+↑ Move up in a table

The Elements List - Your Navigation Superpower

This is one of the most powerful tools for navigating complex pages. It opens a dialog listing all headings, links, buttons, form fields, or landmarks on the page.

Screen Reader Open Elements List What It Shows
NVDA NVDA+F7 (Insert+F7 or CapsLock+F7) Headings, Links, Form fields, Buttons, Landmarks (tabs within the dialog)
JAWS Insert+F6 (headings) / Insert+F7 (links) Headings list / Links list
VoiceOver VO+U Rotor - switch between Headings, Links, Landmarks, Form Controls

How to use it

  1. Press the keyboard shortcut above
  2. Navigate between the tabs (Headings, Links, etc.) with Tab or arrow keys
  3. Type to filter the list (e.g., type "new issue" to find the New Issue button)
  4. Press Enter to jump to the item on the page

Per-Screen-Reader Command Reference

A compact reference organized by screen reader. For task-based navigation guides (navigating a PR, leaving a comment, etc.), see the sections below.

NVDA (Windows)

Single-key navigation (Browse Mode)

Key Moves to
H / Shift+H Next / previous heading
1-6 Next heading of that level
K Next link
B Next button
F or E Next form field
T Next table
D Next landmark region
L Next list
I Next list item

Mode switching and reading

Key Action
Insert+Space Toggle Browse / Focus Mode
Insert+F7 Elements list (headings, links, form fields, buttons)
NVDA+↓ Start reading from cursor (Say All)
NVDA+↑ Read current line
Ctrl Stop reading

JAWS (Windows)

Single-key navigation (Virtual Cursor)

Key Moves to
H / Shift+H Next / previous heading
1-6 Next heading of that level
U Next unvisited link
K Next link
B Next button
F Next form field
T Next table
R Next landmark region
L Next list
I Next list item

Mode switching and reading

Key Action
Insert+Z Toggle Virtual PC Cursor (Browse / Focus)
Num Pad Plus Exit forms mode (open PC Cursor)
Insert+F6 Headings list
Insert+F7 Links list
Insert+↓ Start reading from cursor (Say All)
Insert+↑ Read current line
Ctrl Stop reading

VoiceOver (macOS)

Activate VoiceOver: Cmd+F5. The VO modifier key is Control+Option (abbreviated VO).

Rotor navigation: Open with VO+U, use ←/→ to switch between element types (Headings, Links, Form Controls, Tables, Landmarks), and ↑/↓ to navigate within a type.

Command Action
VO+U Open Rotor
VO+Right / VO+Left Move forward / backward
VO+Space Activate current element
VO+Shift+Down Interact with element (enter Focus Mode)
VO+Shift+Up Stop interacting
VO+A Start reading from cursor
Ctrl Stop reading
Cmd+F5 Start / stop VoiceOver

Navigating Specific GitHub Pages

Repository Main Page

Goal Key Sequence
Find the repo name and description 1 - jumps to the h1 heading (the repo name)
Jump to repo navigation tabs D to "Repository navigation" landmark
Open the files table T (next table)
Navigate files Ctrl+Alt+Down Arrow for next row, Ctrl+Alt+Right Arrow for next column
Open a file Enter on the filename
Find the Clone or Download button B (next button after the h1)
Switch branches B to find the branch button, then Enter
Search for a file F to reach the "go to file" field, then type filename

Issues List Page

Goal Key Sequence
Find the issue list 1 then L (next list) or D to "Search Results List" landmark
Navigate issue titles 3 (issue titles are h3 headings)
Navigate list items I (next list item within the search results list)
Open an issue Enter on the issue title link
Open in a new tab Ctrl+Enter
Search or filter issues F to the edit field, type search query, then Enter
Create a new issue Tab from search field until "New issue" link
Filter by label Tab to the filter toolbar buttons, Enter, then arrow keys in the dropdown

Issue Detail Page

Goal Key Sequence
Read the issue description 2 to "Description" heading
Read activity and comments 2 to "Activity" heading, then Down Arrow to read
Jump to the comment box D to "Add a comment", then E to the edit field
Type a comment Switch to Focus mode (NVDA+Space), then type
Submit the comment Tab to the "Comment" button then Enter - or Ctrl+Enter from the text area
Close the issue Tab to the "Close" button, then Enter
Navigate assignees and labels sidebar 3 (sidebar items are h3 headings)

Pull Requests List Page

Goal Key Sequence
Find the PR list D to "Pull requests list" landmark
Navigate PR titles Tab (no per-item heading semantics - tab through)
Open a PR Enter on the PR title
Create a new pull request K to the "New pull request" link
Filter PRs F to the search field, then Enter

Pull Request Detail - Conversation Tab

Goal Key Sequence
Read PR description 2 to the first h2 heading
Navigate comment threads 3 (comments are h3 headings)
Open pull request tabs D to "Pull request tabs", then K to navigate links
Add a comment D to "Add a comment", then E, then Focus mode, then type
Submit review B to the "Submit review" button

Pull Request Detail - Commits Tab

Goal Key Sequence
Switch to Commits tab D to "Pull request navigation tabs", then Tab between tab controls, then Left or Right Arrow
Navigate commits by date 3 (date headings are h3)
Navigate individual commits 4 (commit names are h4) or I (list items)
Open a commit Enter on the commit heading or link

Pull Request Detail - Files Changed Tab

Goal Key Sequence
Navigate to Files Changed D to "Pull request navigation tabs", then Left or Right Arrow to "Files changed", then Enter
Navigate file headings H or 3
Find a specific file E to "Filter changed files" field, then type filename
Navigate file tree 2 to "file tree", then Up Arrow or Down Arrow
Navigate diff lines NVDA+Space for Focus mode, then arrow keys in the diff table
Read across a diff row Ctrl+Alt+Right Arrow (columns: line number, change type, content)
Comment on a line Focus the line, then Enter (activates comment mode)
Multi-line comment Focus start line, then Shift+Down Arrow to extend, then Enter
Submit review 1 then B to "Submit review" button

Checking and Enabling Feature Previews

GitHub Feature Previews are opt-in UI improvements. For screen reader users, two are especially important: New Issues Experience and New Files Changed Experience. Both may already be active - or may have graduated out of Feature Preview entirely.

NVDA / JAWS (Browse Mode)

Goal Key Sequence
Open User Menu B repeatedly until "Open user navigation menu, button" → Enter
Open Feature Preview panel or K to "Feature preview" → Enter
Navigate the feature list or I (list items)
Check if a feature is enabled Toggle announces "Pressed" or "Disable" = enabled; "not Pressed" or "Enable" = disabled
Enable a feature Enter or Space on the toggle when it is not Pressed
Feature not listed Feature has graduated - active automatically, no action needed

VoiceOver (macOS)

Goal Key Sequence
Open User Menu VO+U → Buttons → "Open user navigation menu" → Enter
Open Feature Preview panel VO+Down Arrow to "Feature preview" → VO+Space
Check if a feature is enabled Toggle announces "checked" = enabled; "unchecked" = disabled
Enable a feature VO+Space on an unchecked toggle

See Pre-Workshop Setup, Step 4 for full details on what each feature enables and why it matters for screen reader users.

Typing and Submitting Content

Entering text in GitHub (Focus Mode required)

  1. Navigate to the text field using Browse Mode: F or E for edit fields, Tab for any interactive element
  2. Switch to Focus Mode:
    • NVDA: Insert+Space
    • JAWS: Insert+Z (or it switches automatically)
    • VoiceOver: VO+Shift+Down to interact with the text area
  3. Type your content
  4. Return to Browse Mode when done typing:
    • NVDA: Insert+Space
    • JAWS: Insert+Z
    • VoiceOver: VO+Shift+Up to stop interacting

Markdown formatting shortcuts in GitHub text areas

These work while in Focus Mode inside a GitHub text area:

Shortcut Effect
Ctrl+B Bold
Ctrl+I Italic
Ctrl+E Inline code
Ctrl+K [Insert link]
Ctrl+Shift+. > Blockquote
Ctrl+Shift+L Unordered list
Ctrl+Shift+7 Ordered list

Dropdown Menus and Flyouts

GitHub uses popup flyout menus for labels, assignees, reviewers, and branch selection. Here is how to handle them:

Step 1: Navigate to the button (D for landmark, B for button, or Tab)
Step 2: Activate the button (Enter or Space) - flyout opens
Step 3: Type to filter results OR use ↑/↓ arrow keys to navigate
Step 4: Select an item (Enter)
Step 5: Close the flyout (Esc) - selections apply on close

VoiceOver users

Step 1: Navigate to the button with Tab or VO+Right
Step 2: Activate with VO+Space
Step 3: VO+Down to enter the flyout
Step 4: VO+Right/Left to navigate items
Step 5: VO+Space to select, Esc to close

GitHub Built-In Keyboard Shortcuts

GitHub has a dedicated keyboard shortcut system built into every page. These are completely separate from your screen reader's navigation keys - they are JavaScript-powered shortcuts that trigger GitHub actions directly without using the mouse.

Using GitHub shortcuts alongside a screen reader

The key issue: when your screen reader is in Browse Mode, it intercepts keystrokes before they reach the page. GitHub's shortcut system relies on the page receiving the keystroke directly. Here is how to unlock them:

Screen Reader How to use GitHub shortcuts
NVDA Press NVDA+Space to enter Focus Mode, use the shortcut, then NVDA+Space to return to Browse Mode
JAWS Press Insert+Z to toggle Virtual Cursor off, use the shortcut, then Insert+Z to turn it back on
VoiceOver GitHub shortcuts generally work without mode switching - VoiceOver handles this differently

Exceptions that always work in Browse Mode: ? (shows all shortcuts) and S// (focus the search bar) work at any time because they immediately move browser focus to an interactive element.

Practical sequence for G shortcuts

Step 1: Press NVDA+Space (or Insert+Z in JAWS) - enter Focus Mode
Step 2: Press G, pause half a second
Step 3: Press the second key (I, P, A, etc.)
Step 4: Press NVDA+Space to return to Browse Mode on the new page

Discover shortcuts on any page - The ? Key

Start here every time you're on an unfamiliar GitHub page. The ? key opens GitHub's built-in keyboard shortcut help dialog. It lists every shortcut for the exact page you are on - the set changes depending on whether you are on a repository, an issue, a PR, the notifications inbox, etc.

Press ? (Shift+/) from any GitHub page when not inside a text field to open the shortcut dialog.

Reading the shortcut dialog with a screen reader

The dialog is a standard ARIA modal (role="dialog"). When it opens, browser focus moves inside it automatically.

NVDA
Step 1: Press Shift+/ to open the dialog → NVDA announces "dialog" and reads the title
Step 2: Press NVDA+Space to enter Browse Mode inside the dialog
Step 3: Press H to navigate between shortcut categories (they are h2 headings)
Step 4: Press ↓ to read each shortcut row in the category
Step 5: Press Escape or Tab to the Close button → Enter to close
JAWS
Step 1: Press Shift+/ → JAWS announces the dialog and its title
Step 2: Use ↓ to read through the contents, or Ctrl+Home to start from the top
Step 3: Use Tab to move between interactive elements (the Close button)
Step 4: Press Escape to close
VoiceOver (macOS)
Step 1: Press Shift+/ → VoiceOver announces the dialog
Step 2: Use VO+Right to move through the dialog contents
Step 3: Use VO+Command+H to jump between heading categories
Step 4: Press Escape or navigate to the Close button (VO+Space)
Key facts about the shortcut dialog
  • It is context-aware - the shortcuts shown change based on your current page
  • It is always current - GitHub automatically updates it when they add new shortcuts
  • The dialog is divided into sections: Site-wide, Source code browsing, Issues, Pull requests, Notifications, etc. - only sections relevant to the current page appear
  • You do not need to be in Focus Mode to open it - ? works from Browse Mode

Site-wide - work on every GitHub page

Shortcut Action
? Show all keyboard shortcuts for the current page
S or / Focus the search bar
G then N Go to your Notifications

Repository navigation - on any repository page

Shortcut Action Screen reader note
G then C Go to the Code tab Safe - use Focus Mode first
G then I Go to the Issues tab Safe - use Focus Mode first
G then P Go to the Pull Requests tab Safe - use Focus Mode first
G then A Go to the Actions tab Safe - use Focus Mode first
G then W Go to the Wiki tab Safe - use Focus Mode first
G then G Go to the Discussions tab Safe - use Focus Mode first
. (period) Open repository in github.dev, same tab Opens VS Code in your browser
> (Shift+Period) Open repository in github.dev, new tab Preserves your GitHub page - preferred
T Open file finder (Go to File) Conflicts with NVDA T = next table - use F to find the field instead

Shortcut spotlight - . and >: These open github.dev, which is VS Code running inside your browser - same keyboard shortcuts, same screen reader mode. > opens a new tab so you keep your current GitHub page. This is the fastest way to start editing a file without installing anything.

Source code browsing - viewing a file

Shortcut Action Screen reader note
T Activate the file finder Conflicts with NVDA table nav - use F for the field instead
L Jump to a specific line number Conflicts with NVDA L = next list - use Focus Mode first
W Switch to a new branch or tag -
Y Expand URL to its permanent canonical form Useful for linking to a specific commit of a file - the URL never changes
I Show or hide comments on diffs -
A Show or hide annotations on diffs -
B Open blame view (who changed each line, and when) Conflicts with NVDA B = next button - use Focus Mode first

Issue and pull request lists

These shortcuts work on the Issues list page and the Pull Requests list page:

Shortcut Action Screen reader note
C Create a new issue Use Focus Mode first
Ctrl+/ (Win) or Cmd+/ (Mac) Focus the issues or PR search bar Works in Browse Mode - uses Ctrl
U Filter by author Use Focus Mode first
L Filter by or edit labels Conflicts with NVDA L = next list - use Focus Mode
M Filter by or edit milestones Use Focus Mode first
A Filter by or edit assignee Use Focus Mode first
O or Enter Open the currently selected issue or PR -

Issue and pull request detail pages

When viewing an open issue or pull request:

Shortcut Action
Q Request a reviewer (pull requests only)
M Set a milestone
L Apply a label
A Set an assignee
X Link an issue from the same repository
Ctrl+Shift+P (Win) or Cmd+Shift+P (Mac) Toggle Write and Preview tabs in the comment editor
R Quote selected text in your reply - select text first, then press R

Tip for R - quote a specific part of a comment: In Browse Mode, select the text you want to quote by holding Shift and pressing arrow keys. Then press R - GitHub puts it directly into the comment box as a Markdown blockquote, with the author attributed. This is much faster than manually typing >.

Comments - inside any text area (Focus Mode required)

These shortcuts work while typing in any GitHub comment or description field:

Action Windows / Linux Mac
Bold Ctrl+B Cmd+B
Italic Ctrl+I Cmd+I
Inline code Ctrl+E Cmd+E
Insert link Ctrl+K Cmd+K
Paste as Markdown link (over selected text) Ctrl+V Cmd+V
Paste HTML link as plain text Ctrl+Shift+V Cmd+Shift+V
Blockquote Ctrl+Shift+. Cmd+Shift+.
Ordered list Ctrl+Shift+7 Cmd+Shift+7
Unordered list Ctrl+Shift+8 Cmd+Shift+8
Toggle Write / Preview Ctrl+Shift+P Cmd+Shift+P
Insert a code suggestion block Ctrl+G Cmd+G
Submit comment Ctrl+Enter Cmd+Enter

The most important one: Ctrl+Enter submits a comment from inside the text area - you do not have to Tab to the Submit button and press Enter. Your focus stays in context.

Insert suggestion (Ctrl+G): Select the code you want to suggest a change to (in the diff), then press Ctrl+G. GitHub wraps it in a ```suggestion block. The PR author can apply your exact change with one button press.

Files Changed tab in pull requests

Shortcut Action
C Open the commits dropdown - filter which commits are shown in the diffs
T Move focus to the "Filter changed files" search field
Ctrl+Shift+Enter (Win) or Cmd+Shift+Enter (Mac) Submit a review comment

Notifications page

On your Notifications page (github.com/notifications):

Shortcut Action
E Mark notification as done
Shift+U Mark as unread
Shift+I Mark as read
Shift+M Unsubscribe from thread

GitHub Actions

On any Actions page in a repository:

Shortcut Action
G then F Go to the workflow file
Shift+T or T Toggle timestamps in logs
Shift+F or F Toggle full-screen log view
Esc Exit full-screen log view
Ctrl+Space (Win) or Cmd+Space (Mac) Get AI suggestions in the workflow editor

Projects (board and table view)

Shortcut Action
Ctrl+F or Cmd+F Focus the filter field
Enter Toggle edit mode for the focused cell
Esc Cancel editing
Shift+Space Select item
Space Open selected item
E Archive selected items
Ctrl+Shift+\ or Cmd+Shift+\ Open row actions menu

Keep the official reference handy: github.com/keyboard-shortcuts - and press ? on any GitHub page for the context-specific subset.

Common Navigation Patterns - Quick Reference

Print or bookmark this section:

Action Keys
Switch browse or focus mode NVDA+Space or JAWS+Z
Elements list NVDA+F7 / JAWS+F6 or F7 / VO+U
Next heading (any level) H
Next h3 (issue or PR title) 3
Next landmark or region D
Next link K
Next button B
Next form field F or E
Next list item I
Jump to file table T then Ctrl+Alt+Arrow keys
Activate item Enter or Space
Submit comment Ctrl+Enter (in text area)
Open dropdown Enter, then Up or Down Arrow, then Enter, then Escape

Troubleshooting Common Issues

"The page doesn't match the instructions"

  • Solution: Maximize your browser window. GitHub's layout changes at smaller widths, and landmarks/headings may appear in different positions. Full-screen or maximized window gives the most consistent experience.

"I'm hearing too much or navigating too slowly"

  • Disable hovercards in GitHub Accessibility Settings (see Pre-Workshop Setup)
  • Adjust your screen reader verbosity settings
  • Use NVDA+F7 / VO+U to get a filtered list rather than tabbing through everything
  • NVDA reads GitHub too slowly: In NVDA Settings → Browse Mode → increase "Maximum number of characters on one line" to 10000. This prevents NVDA from pausing to wrap long lines.

"I pressed H but it's typing the letter H"

  • You are in Focus Mode - press NVDA+Space (or JAWS+Z) to return to Browse Mode
  • In Browse Mode, H is a navigation key, not a typing key

"I can't find the comment box"

  • Use D to navigate to the "Add a comment" landmark
  • Then E or F to jump to the edit field
  • Switch to Focus Mode before typing

"The diff/code area is hard to navigate"

  • The Files Changed tab requires Focus Mode to navigate the diff table
  • Use NVDA+Space to enter Focus Mode, then use arrow keys
  • Use Ctrl+Alt+Arrow keys to move between table cells

Official Screen Reader Resources

Keyboard Shortcuts in Other Appendices

This cheat sheet covers GitHub web navigation and screen reader commands. Additional keyboard shortcuts for specific tools are documented in:

Topic Location
VS Code keyboard navigation and accessibility Appendix M - VS Code Accessibility Reference
GitHub Copilot Chat and inline suggestions Appendix W - GitHub Copilot Reference
VS Code setup and configuration shortcuts Chapter 10 - VS Code Basics
GitHub Copilot activation and model switching Chapter 13 - GitHub Copilot

Screen Reader Compatibility Notes

The commands in this cheat sheet have been written for and tested with the following screen readers:

Screen Reader Platform Version Tested Notes
NVDA Windows 2025.3.3+ Free, open source. Primary screen reader for this workshop.
JAWS Windows 2026+ Commercial. Trial available.
VoiceOver macOS Built into macOS Sonoma+ No installation required.

If a command doesn't work as described

  1. Check that you are in the correct mode (Browse Mode vs. Focus Mode)
  2. Verify your screen reader version - older versions may use different key assignments
  3. Check GitHub's own shortcut dialog (? key) for the current page's shortcuts
  4. See Troubleshooting above for common fixes

Appendix B - keep this open as a reference throughout both days. Return to: Day 1 Agenda | Understanding GitHub's Web Structure See also: GitHub Concepts Glossary

Clone this wiki locally