ARIA live regions for generative AI
Understand what ARIA live regions provide, why streaming tokens are a poor announcement unit, and how generative-a11y separates policy from delivery.
Live regions expose changes without moving focus
An ARIA live region lets a browser expose text changes to assistive technology while keyboard focus stays where the user placed it. Polite updates generally wait for a suitable pause; assertive updates are reserved for information that warrants interruption.
A live region is a delivery mechanism, not an announcement policy. It does not know whether a token is meaningful, whether a repeated update is obsolete, or whether a tool failure should outrank routine progress.
Do not use each token as a live-region update
Generative output changes far more frequently than ordinary status text. Sending every token can create partial-word announcements and a backlog of low-value mutations. Replacing the live region with the entire accumulated response can instead repeat content or produce inconsistent results across browser and screen-reader combinations.
- Keep the visible transcript semantic and readable independently of announcements.
- Choose meaningful phrases or sentences as announcement units.
- Use assertive delivery sparingly for confirmed urgent states.
- Cancel queued work when a response fails, stops, retries, or the runtime is disposed.
generative-a11y separates scheduling from live-region delivery
The core package turns lifecycle events into polite or assertive announcement intents after segmentation, prioritization, deduplication, and scheduling. The DOM package owns stable polite and assertive regions, replaces their text for live-region delivery, and can use the emerging ariaNotify API when the browser exposes it in the configured mode.
The application still owns its visible messages, controls, headings, forms, error relationships, keyboard interactions, and focus behavior. The library's live regions are not a substitute for those fundamentals.
Use ordinary semantics for stable content
Do not announce information merely because it rendered. Stable assistant messages should remain ordinary document content that users can navigate. Use lifecycle announcements for changes that would otherwise be easy to miss: a response becoming available, a tool changing state, approval becoming required, a connection being lost, or work ending in failure.