On this page

WCAG 2.2 for game menus and UI

W3C's Web Content Accessibility Guidelines 2.2 (a W3C Recommendation) are written for web pages. Most of them describe problems that game menus, HUDs, dialogs and settings screens have too. This page reads every success criterion as a rule for Godot UI, says how Godot 4.7 meets it, and where the kit checks it. The ui-accessibility skill is the short, working version of this page. Microsoft's Xbox Accessibility Guidelines, written for games, are mapped onto it near the end.

Sources: the criterion texts and the contrast and flash formulas come from W3C's machine-readable wcag.json. Every Godot property and default named here was read from Godot 4.7.2 itself (ClassDB, ProjectSettings, InputMap, the C# API documentation), and the skill's C# compiled against it, not taken from memory. Following WCAG makes a game easier to play; it is not a compliance claim, since WCAG does not define one for games.

How the words translate

WCAG says In a game
web page a screen: title menu, pause menu, settings page, dialog, HUD, shop
set of web pages all the game's menus
keyboard interface keyboard and gamepad focus navigation (the ui_* input actions), each on its own
CSS pixel 1 px at 1080p on a desktop monitor. CSS defines it as an angle (one pixel at 96 dpi, seen from 28 inches), so on a TV seen from the couch it is about 1.5 to 2 px at 1080p; on phones, a density-independent pixel
large-scale text 18 pt or 14 pt bold: 24 px, or 18.7 px bold, at 1080p. The Xbox guidelines, written for games, set it higher: 36 px on PC and 52 px on console (below)
change of context leaving the screen, starting or loading a game, applying a display mode or language
status message a toast or notice that appears without taking focus: "Saved", "Controller disconnected", an achievement
time limit a menu that times out, auto-advancing dialogue, a timed prompt ("press within 5 s"), an idle kick
authentication signing in to an online account
user agent the engine and the operating system

Formulas

Every success criterion

Kind: Applies (as written), Transformed (the same need, in game terms), Not applicable (nothing like it in game UI). Checked by: look (screenshot critique against docs/STYLE.md), flows (a UI flow), review (an agent reading the scenes and code), doctor (a project setting it reads), proposed (see the end of this page). 4.1.1 Parsing is obsolete in WCAG 2.2 and left out.

1 Perceivable

SC Level Kind For menus and UI Godot 4.7 Checked by
1.1.1 Non-text Content A Transformed Icon-only buttons, item and status icons have a name; decoration needs none accessibility_name, tooltip_text review, proposed
1.2.1 Audio-only and Video-only A Transformed Silent trailers get a text description; audio logs get a transcript review
1.2.2 Captions (Prerecorded) A Applies Subtitles for cutscenes and voiced dialogue, offered at first start review
1.2.3 Audio Description or Media Alternative A Transformed A text recap of each story cutscene (codex, journal) review
1.2.4 Captions (Live) AA Transformed Speech-to-text for voice chat, if the game has voice chat review
1.2.5 Audio Description AA Transformed Story-heavy games: described cutscenes review
1.2.6 Sign Language AAA Not applicable
1.2.7 Extended Audio Description AAA Not applicable
1.2.8 Media Alternative AAA Transformed Same as 1.2.3 for every cutscene review
1.2.9 Audio-only (Live) AAA Not applicable
1.3.1 Info and Relationships A Transformed Use real controls (Button, CheckBox, HSlider, OptionButton, TabContainer), not drawn ones; tie each slider to its label accessibility_labeled_by_nodes review
1.3.2 Meaningful Sequence A Applies Scene-tree order is reading and focus order accessibility_flow_to_nodes when the layout differs review
1.3.3 Sensory Characteristics A Applies Not "press the glowing button on the left": name the action and show the input glyph with text look
1.3.4 Orientation AA Transformed Mobile builds work in both orientations unless the game needs one; elsewhere not applicable display/window/handheld/orientation review
1.3.5 Identify Input Purpose AA Transformed Account forms only: e-mail fields bring up the e-mail keyboard LineEdit.virtual_keyboard_type review
1.3.6 Identify Purpose AAA Not applicable Markup-specific
1.4.1 Use of Color A Applies Selected, locked, disabled, error, rarity and team states never by colour alone: add an icon, shape, pattern or word look, on shot -ColorVision pictures (designing for colour blindness)
1.4.2 Audio Control A Transformed Music, effects, voice and UI sounds each have a volume, separate from the master; a mute one AudioServer bus each review
1.4.3 Contrast (Minimum) AA Applies Text 4.5:1; 3:1 only for large text (XAG 102: 36 px on PC, 52 px on console, at 1080p). Measured after post-processing, over the worst point of a moving backdrop SrgbToLinear().Luminance look, proposed
1.4.4 Resize Text AA Transformed A UI scale setting up to 200% without clipped or lost text Window.ContentScaleFactor, or theme font sizes look (shot at 200%)
1.4.5 Images of Text AA Applies Menu text is Labels with a font, not text painted into textures (scales, translates, can be read aloud); logos excepted look, review
1.4.6 Contrast (Enhanced) AAA Transformed A high-contrast option at 7:1, on by default when the system asks for it DisplayServer.AccessibilityShouldIncreaseContrast() == 1 (-1: unknown) review
1.4.7 Low or No Background Audio AAA Transformed Music ducks under dialogue (WCAG: 20 dB) or the player can lower it a compressor sidechain on the music bus review
1.4.8 Visual Presentation AAA Transformed Long text (codex, tutorials): at most 80 characters a line (inkle aims at 5 to 15 words: ui-accessibility/in-game.md), not justified, line spacing 1.5, a subtitle background the player can darken Label theme constant line_spacing look
1.4.9 Images of Text (No Exception) AAA Applies As 1.4.5, without the exceptions look
1.4.10 Reflow AA Transformed At 200% UI scale and the smallest listed resolution, lists scroll one way only and nothing is cut off containers, ScrollContainer look
1.4.11 Non-text Contrast AA Applies Focus ring, slider track and handle, checkbox, toggle state, health bars and HUD icons: 3:1 against what is next to them look, proposed
1.4.12 Text Spacing AA Transformed Layouts survive longer translations and wider line spacing: wrapping labels in containers, not fixed boxes autowrap_mode, containers look
1.4.13 Content on Hover or Focus AA Applies Descriptions appear for the focused item as well as the hovered one, can be closed without moving focus, and stay until the player moves on built-in tooltips follow the mouse: show the same text in a panel for the focused item flows, look

2 Operable

SC Level Kind For menus and UI Godot 4.7 Checked by
2.1.1 Keyboard A Transformed Every menu works with keyboard alone and with a gamepad alone ui_* actions. Godot 4.7's default ui_accept and ui_cancel have no gamepad button: add them flows, proposed
2.1.2 No Keyboard Trap A Applies Every popup, dialog and sub-menu closes with ui_cancel and gives focus back to what opened it grab_focus() on close flows
2.1.3 Keyboard (No Exception) AAA Transformed As 2.1.1 for every menu without exception flows
2.1.4 Character Key Shortcuts A Applies Single-key menu shortcuts can be remapped or turned off BaseButton.shortcut from an input action review
2.2.1 Timing Adjustable A Transformed Menus never time out; auto-advance and timed prompts can be turned off or slowed ten times review
2.2.2 Pause, Stop, Hide A Transformed Pause wherever the game allows it; animated menu backgrounds, scrolling credits and kill feeds can be stopped or hidden get_tree().paused, process_mode review
2.2.3 No Timing AAA Not applicable Game design, not UI
2.2.4 Interruptions AAA Transformed Achievement and notice toasts can be postponed or turned off during play review
2.2.5 Re-authenticating AAA Transformed An expired online sign-in loses no progress review
2.2.6 Timeouts AAA Transformed Warn before an idle kick in online lobbies review
2.3.1 Three Flashes or Below Threshold A Applies Menu transitions, hit flashes, lightning: at most three flashes a second, or a small area proposed
2.3.2 Three Flashes AAA Applies At most three a second, whatever the size proposed
2.3.3 Animation from Interactions AAA Transformed A reduce-motion setting turns off button bounce, shake, parallax and camera sway; on by default when the system asks DisplayServer.AccessibilityShouldReduceAnimation() == 1 (Windows and macOS only; -1 elsewhere) review
2.4.1 Bypass Blocks A Transformed Skippable logos (after the first run) and cutscenes; menus remember the last selected item flows
2.4.2 Page Titled A Transformed Every screen shows its title ("Settings: Audio"), and names its window for screen readers Window.accessibility_name look
2.4.3 Focus Order A Applies Focus starts on the likely choice when a screen opens and moves in visual order; linear menus loop only with a sound and a rumble on the wrap, grids do not (XAG 112) grab_focus(), focus_neighbor_*, focus_next flows, review
2.4.4 Link Purpose (In Context) A Transformed Button text says what happens: "Delete save 2", not "OK" look
2.4.5 Multiple Ways AA Transformed Settings open from the title screen and from the pause menu flows
2.4.6 Headings and Labels AA Applies Labels name what they change: "Music volume" look
2.4.7 Focus Visible AA Applies The focused control is always visible once a key or button is used the theme's focus stylebox must not be empty look, proposed
2.4.8 Location AAA Transformed A breadcrumb in nested menus: "Settings: Controls: Gamepad" look
2.4.9 Link Purpose (Link Only) AAA Transformed As 2.4.4 look
2.4.10 Section Headings AAA Transformed Long settings pages are grouped under headings or tabs TabContainer look
2.4.11 Focus Not Obscured (Minimum) AA Applies The focused item is never under a popup, outside the safe area, or scrolled out of view ScrollContainer.follow_focus look, proposed
2.4.12 Focus Not Obscured (Enhanced) AAA Applies No part of it hidden look
2.4.13 Focus Appearance AAA Transformed The focus indicator is at least a 2 px outline at 1080p and 3:1 against the unfocused look focus stylebox look
2.5.1 Pointer Gestures A Applies Touch: pinch and swipe actions also have a button review
2.5.2 Pointer Cancellation A Applies Menu buttons act on release, so sliding off cancels action_mode Button Release (the default); keep it proposed
2.5.3 Label in Name A Applies A set accessibility_name contains the visible text, so voice control can say it review
2.5.4 Motion Actuation A Applies Tilt and shake controls have a button alternative and can be turned off review
2.5.5 Target Size (Enhanced) AAA Transformed Touch builds: 44 x 44; XAG 107 asks 15 mm on phones (59 px at 100 DPI) look, proposed
2.5.6 Concurrent Input Mechanisms AAA Applies Mouse, keyboard, gamepad and touch all work at once; glyphs follow the last device used review
2.5.7 Dragging Movements AA Applies Drag-and-drop inventories also work by select, then place accessibility_drag(), accessibility_drop() flows
2.5.8 Target Size (Minimum) AA Transformed Clickable controls at least 24 x 24 px at 1080p, or spaced so 24 px circles do not overlap; more on TV, 44 for touch custom_minimum_size look, proposed

3 Understandable

SC Level Kind For menus and UI Godot 4.7 Checked by
3.1.1 Language of Page A Transformed Start in the system language, offer a language setting TranslationServer review
3.1.2 Language of Parts AA Transformed The language list names each language in itself ("Deutsch", "Nederlands") look
3.1.3 Unusual Words AAA Transformed A glossary or codex for the game's own terms review
3.1.4 Abbreviations AAA Transformed HUD abbreviations (HP, DPS) explained in the description panel review
3.1.5 Reading Level AAA Transformed Tutorial text in plain words review
3.1.6 Pronunciation AAA Not applicable
3.2.1 On Focus A Applies Moving focus never applies a setting or opens a screen flows
3.2.2 On Input A Applies Changing a setting does not leave the menu; display-mode changes ask to keep or revert flows
3.2.3 Consistent Navigation AA Applies Confirm and Back are the same buttons, in the same place, on every screen look
3.2.4 Consistent Identification AA Applies The same action has the same word and icon everywhere look
3.2.5 Change on Request AAA Transformed Nothing advances by itself unless the player chose that review
3.2.6 Consistent Help A Transformed The button-hint bar sits in the same place on every screen look
3.3.1 Error Identification A Applies Name entry, remapping conflicts, failed connections: say what is wrong, in text, next to it look
3.3.2 Labels or Instructions A Applies Every input says what it wants: "Press a key for Jump (Esc cancels)" look
3.3.3 Error Suggestion AA Applies "Jump is already on Space. Swap them?" review
3.3.4 Error Prevention (Legal, Financial, Data) AA Transformed Deleting or overwriting a save, quitting unsaved, spending real or premium money: confirm, with focus on the safe choice flows
3.3.5 Help AAA Transformed A description panel for the focused option look
3.3.6 Error Prevention (All) AAA Transformed Settings can be reset to defaults, and the reset undone review
3.3.7 Redundant Entry A Transformed Remember the player's name, last difficulty and server review
3.3.8 Accessible Authentication (Minimum) AA Transformed Online sign-in allows paste and password managers; consoles offer a code or QR sign-in; no puzzles review
3.3.9 Accessible Authentication (Enhanced) AAA Transformed As 3.3.8, and no picture recognition either review

4 Robust

SC Level Kind For menus and UI Godot 4.7 Checked by
4.1.2 Name, Role, Value A Transformed Screen readers can name every control, its kind and its value Godot's own controls report role and value through AccessKit; set accessibility_name on icon-only and custom controls; keep accessibility/general/accessibility_support on Auto, not Disabled (doctor warns) review, doctor
4.1.3 Status Messages AA Transformed Toasts and notices are announced without taking focus AccessibilityLive = AccessibilityServer.AccessibilityLiveMode.Polite (Assertive for errors) review

Count: of the 86 criteria, 31 apply as written, 49 apply in game terms, and 6 have no game UI counterpart.

Xbox Accessibility Guidelines

Microsoft's Xbox Accessibility Guidelines (XAG v3.2, 2023) are written for games, so where they are stricter than WCAG, follow them. Each guideline below is summarised from its own page (.../xag-deep-dives/xag-1NN-...), with the WCAG criteria it overlaps. Like WCAG, the XAGs say they are not a compliance checklist.

Where the XAGs are stricter than WCAG for game UI:

XAG For menus, HUD and settings WCAG
101 Text display Minimum body height above; scaling to 200% without two-way scrolling; a sans-serif option and a plain alternative to stylised fonts; sentence case available; text aligned to the language, not centred or justified, in long text; line width at most 80 characters (40 CJK), line spacing 1.5 1.4.4, 1.4.8, 1.4.10, 1.4.12
102 Contrast 4.5:1, large text 3:1 at the sizes above, disabled text 3:1, placeholder text 4.5:1, a 7:1 high-contrast mode that follows the system setting, player-chosen text and background colours, no text inside images except logos 1.4.3, 1.4.6, 1.4.11, 1.4.5
103 Additional cues Critical visual information also through sound or haptics; critical sound also visual; colour never alone, and greyed-out options also get a lock icon or "Not available"; player-chosen colours for key markers 1.3.3, 1.4.1
104 Subtitles and captions Subtitles for all speech with speaker names, on at first launch or offered before the first cinematic; captions for important sounds, by category; at most 40 characters a line and 2 lines; mixed case; a solid background with 0 to 100% opacity; a preview of the settings. GDC talks add 46 px at 1080p (never under 28, checked by the textsize runner), 38 characters, bottom centre, new lines entering at the bottom: docs/gdc/subtitles-are-changing.md 1.2.2, 1.2.4
105 Audio Separate volume and mute for music, voice-over, gameplay effects, ambient effects, narration and voice chat; a mono option; pausable audio and cinematics; ducking when a screen reader speaks 1.4.2, 1.4.7
106 Screen narration All UI text can be read aloud (platform screen reader first); controls announce type, value and position ("Music volume, slider, 52%", "Tab, 1 of 3"); narration stops when focus moves; decorative images are silent; recurring states (loading) re-read every 7 to 10 s 1.1.1, 1.3.1, 4.1.2, 4.1.3
107 Input Menus work with single, non-simultaneous presses, digital and analog, and keyboard only; full in-game remapping including each stick's axis inversion, with prompts updated; no required holds, mashing or chords; pointer actions on release; analog sensitivity at least plus or minus 50% 2.1.1, 2.1.4, 2.5.1, 2.5.2, 2.5.4, 2.5.7
108 Difficulty Ideally four or more presets, described respectfully; changeable at any time without losing progress; per-mechanic assists; manual and automatic saves; pause at any time, cinematics included 2.2.1, 2.2.2
109 Objective clarity Current objectives reviewable at any time, a log of completed ones, numeric progress ("3 of 5"), optional hints after no progress, descriptive saves (screenshot, time, place, summary), tutorials available on demand 2.4.8, 3.3.5
110 Haptic feedback Can be turned off and scaled; never the only channel. A GDC talk adds patterns that each mean one thing, told apart by count, motor or length, and settings per player: docs/gdc/aaa-gaming-while-blind.md, examples/csharp/src/Example.Core/Controls/Haptics.cs 2.5.4 (partly)
111 Audio description Described cinematics, or a full transcript 1.2.3, 1.2.5, 1.2.7
112 UI navigation Consistent order and button prompts on every screen; digital-only navigation; looping rules above; more than one way to find things in large sets (filters and search in inventories); a constant way back 2.4.3, 2.4.5, 3.2.3, 2.1.2
113 UI focus handling A highly visible focus indicator that never disappears or moves off screen; dialogs trap focus until closed 2.4.7, 2.4.11, 2.4.13
114 UI context Where you are in the menus; context changes the player did not start are announced; labels next to what they label; same icon and word for the same action; jargon explained; settings previewed in a realistic scene 2.4.2, 2.4.6, 3.2.4, 3.1.3, 3.1.5, 3.3.2
115 Error messages Errors explained in text and narration, at the place they occurred, visually distinct; review and undo before deleting or changing saved data, purchases and selling; no hold-to-confirm 3.3.1, 3.3.3, 3.3.4
116 Time limits As WCAG, plus on-screen durations (tutorial text, dialogue, chat) adjustable to ten times or until dismissed 2.2.1, 2.2.3
117 Visual distractions and motion Moving or auto-updating UI can be stopped; camera shake, bob, motion blur avoidable or adjustable; field of view and camera sensitivity settings 2.2.2, 2.3.3
118 Photosensitivity Flash, red flash and pattern limits above 2.3.1, 2.3.2
119 Chat Speech-to-text and text-to-speech chat, narrated incoming messages and emotes 1.2.4
120 Communication experiences The whole path to chatting (menus, matchmaking, friends, muting, reporting) meets the other XAGs. In the US the CVAA requires it for chat between people (legal section 7); what accessible chat looks like: .agents/skills/multiplayer/chat.md (none)
121 Accessible feature documentation A web page per game describing its accessibility features, before purchase, in every shipped language (none)
122 Accessible customer support Support reachable by more than one accessible channel (none)
123 Mental health best practices Content warnings before purchase and in game, an advisory at launch, options to reduce or skip sensitive content, helplines reachable from anywhere (none)

Game Accessibility Guidelines

The Game Accessibility Guidelines, written by studios, specialists and academics, list 111 guidelines in three levels (basic, intermediate, advanced) across motor, cognitive, vision, hearing and speech. The site states no licence for its text, so this page summarises and links rather than copying it. Most of the basic and intermediate guidelines that concern menus, HUD, input and subtitles are already covered by a WCAG or XAG row above. These are not, and the kit adds them:

Guideline (level) For menus, HUD and settings Godot 4.7
Adjust the game speed (basic) A game-speed setting, for example 50 to 100% Engine.TimeScale
Settings are saved (basic) Every setting survives a restart ConfigFile saved under user://
Start without many menus (basic) Continue or Play has focus on the title screen and starts the game in one or two presses GrabFocus()
Accessibility features explained in game (basic) An accessibility settings page with a description of each option
Field of view default (basic) A default that suits the platform (TV or desk) Camera3D.Fov
Speech input never required (basic) No action bound only to speech
Subtitles on before any sound (intermediate) The subtitle choice comes before the first sound, logos included; stricter than XAG 104
Reminder of controls (intermediate) A controls page in the pause menu, built from the input map so it follows remapping InputMap.ActionGetEvents
Rearrange interfaces (intermediate) HUD layout presets, or HUD elements the player can move
Windowed mode on PC (intermediate) A display-mode setting that includes Windowed, for on-screen keyboards DisplayServer.WindowSetMode
Stationary targets (intermediate) Buttons and menu options do not move or bounce while they can be clicked
Essential information near the eye-line (intermediate) Warnings and short-lived prompts near the centre or the action, not in the corners
Not text alone (intermediate) Instructions pair text with an input glyph, an icon or speech
Screen reader support (advanced) Beyond menus, the game world: one assist action speaks the focused object's state, name and short description, and stops it when pressed again; other audio is ducked meanwhile (Cosmonious High) DisplayServer.TtsSpeak, with audio/general/text_to_speech on (doctor warns)
Highlight important words (intermediate) Key terms in tutorials and prompts in bold, not by colour alone RichTextLabel BBCode
Interactive things look interactive (intermediate) Objects in the world the player can use are highlighted or prompted, like focused controls
Distinct sounds (intermediate) Each key event has its own sound
Presets and changed settings (a GDC talk, not a guideline: God of War Ragnarok's UI) Presets by need (vision, hearing, motion, motor) set several options at once; every setting that differs from its default is marked with colour and a symbol; a setting players miss is listed in both categories; text size on the first-launch screen a plain C# model: examples/csharp/src/Example.Core/Settings/GameSettings.cs

Other W3C documents worth knowing

From the full list of W3C Recommendations (318 when checked) and the related Notes; statuses as published by W3C:

Document Status Use in a game
WCAG2ICT Note, 2025 W3C's own guidance on applying WCAG 2 to software that is not a web page: the basis for the "Transformed" readings above
IMSC 1.3 (TTML) and WebVTT Recommendation, 2026; Candidate Recommendation Subtitle and caption file formats, for exchanging cutscene subtitles with translators (XAG 104)
COGA: Making Content Usable Note, 2021 Cognitive accessibility of menus, tutorials and objectives (XAG 109, 114)
MAUR Note, 2015 Accessibility needs of cutscenes: captions, audio description, transcripts
XAUR Note, 2021 VR and AR games
SSML 1.1 Recommendation, 2010 Markup for text-to-speech narration (XAG 106)
UI Events code values Recommendation, 2025 Layout-independent key names for rebinding prompts
ACT Rules Format 1.1 Recommendation, 2026 A format for writing the checks below as testable rules
WOFF2, PNG 3rd edition Recommendations, 2024, 2025 Compressed fonts for smaller exports; PNG now covers animation (APNG) and HDR

Checks the kit could add

Each is small. Item 2 now exists in doctor; the others do not yet.

  1. Flash limit (2.3.1). The juice runner already has a timestamp for every [juice] feedback flash line: fail any one-second window with more than three. For recorded footage (Movie Maker, a trailer capture), EA's IRIS (github.com/electronicarts/IRIS, BSD 3-Clause, C++ built with CMake and vcpkg, with an example console app) reads a video and writes a per-frame CSV of luminance flashes, red flashes and harmful patterns; recommended by the cognitive accessibility panel at GDC 2024 (docs/gdc/folds-testing-misc.md). Not tried here: it needs a native build.
  2. Gamepad can press and go back (2.1.1), screen readers on (4.1.2). Done: doctor warns when ui_accept or ui_cancel has no joypad button in project.godot, and when accessibility/general/accessibility_support is Disabled or the accessibility driver is dummy.
  3. A UI scan inside Godot (1.1.1, 1.4.3, 1.4.11, 2.4.7, 2.4.11, 2.5.2, 2.5.8). Load each UI scene at the design resolution and walk its controls: icon-only buttons without a name or tooltip, focusable controls under 24 x 24 px, an empty focus stylebox, buttons acting on press, scroll containers that do not follow focus, and the contrast of each label's font colour against a StyleBoxFlat behind it.
  4. Focus in flows (2.1.2, 2.4.3, 3.2.1). A flow step that asserts which control has focus, so "Back returns focus to the button that opened the dialog" becomes a test.
  5. Palette contrast in /look (1.4.3, 1.4.11). Compute the ratio of every text colour against every background in docs/STYLE.md instead of judging it by eye.