Make the Orbit UI work with a keyboard and a screen reader
What does this MR do and why?
An accessibility pass for the GitLab Orbit GA checklist found 3 blockers and 4 top should-fix items. This MR fixes them, so keyboard and screen reader users can use each Orbit page.
| Area | Change |
|---|---|
| Group settings, GitLab Orbit toggle | Turning Orbit on or off asks for confirmation first, with the same dialogs as the Status tab. Turning off shows that indexed data is deleted after 30 days. |
| Overview map | The map has a name and instructions, and Tab reaches it. The arrow keys select a node and open its details, Enter loads its connections, and Esc clears the selection. A screen reader reads the selected node. |
| Code navigation panel | Each symbol is a button, so keyboard users can open it. |
| Query editor results | A screen reader reads each result, "No rows match this query" too, also when the same result comes again. |
| Query reference drawer | The button tells if the drawer is open. The drawer is a named dialog that takes focus, and focus goes back to the button when it closes. |
| Query editor, no access | The card has a Contact sales button when its text says to contact sales. |
The report also listed an auto-rotating globe. The globe does not rotate by itself, because nothing calls the rotate method, so this MR does not change motion.
References
None. The findings come from an accessibility pass (axe-core and keyboard checks) for the GitLab Orbit GA Go/No-Go checklist.
Screenshots or screen recordings
E2E run on a full local stack: GDK in SaaS mode, Siphon, NATS, ClickHouse, and the GitLab Orbit indexer, dispatcher, and web server. A headless browser uses only real key presses. The box at the bottom left shows the check result, the focused element, and what a screen reader hears. Before: master. After: this branch.
| Before | After | |
|---|---|---|
| Settings: press Space on the toggle | ![]() |
![]() |
| Settings: turn off | ![]() |
|
| Overview: Tab walk, then arrow keys | ![]() |
![]() |
| Query reference open | ![]() |
![]() |
| Query editor, no access | ![]() |
![]() |
| Code navigation, Tab into the symbols | ![]() |
![]() |
| Check | Before | After |
|---|---|---|
| Settings: nothing changes until you confirm (UI and database) | no, one key press turns Orbit on | yes, both ways, and Cancel keeps the state |
| Overview: Tab reaches the map | no | yes |
| Overview: arrow keys select and announce nodes, Enter loads connections | no | yes, the map grows from 4 to 7 nodes |
| Query editor: first result, a repeated result, and "No rows" are read | no | yes |
| Query reference: focus moves in and comes back | no | yes |
| Query editor, no access: link to sales | no | yes, reachable with Tab |
| Code navigation: Tab and Enter open a symbol | no | yes |
| axe-core 4.11, WCAG 2.2 AA, on each page and dialog | 0 new violations | |
| Total | 9 of 29 pass | 43 of 43 pass |
The only axe finding is on master too: color contrast of the grey example query in an empty editor.
Videos before (master)
Settings
Overview map
Query editor
Code navigation
Videos after (this branch)
Settings
Overview map
Query editor
Code navigation
Not covered: GitLab Self-Managed (the turn-on dialog shows the instance trial end date there, which the specs cover), dark mode, and a real screen reader.
How to set up and validate locally
- As the Owner of a group with GitLab Orbit off, go to Settings > GitLab Orbit. Press Tab to the toggle, then Space. A dialog asks you to confirm. Do the same to turn it off.
- Go to Your work > GitLab Orbit. Press Tab until the map has focus, then use the arrow keys, Enter, and Esc.
- On the Query editor tab, open Query reference with the keyboard, then run a query with a screen reader on.
- With the
orbit_code_intelligenceflag, open a code file on the default branch, select Code navigation, and press Tab into the symbols.
MR acceptance checklist
Evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.










