Stability and migrations
Understand generative-a11y package versions, framework compatibility ranges, deprecation policy, migration notes, and the guarantees available before 1.0.
Public packages follow semantic versioning
Published package versions describe the public exports, event contracts, and documented behavior of that package. Patch releases preserve compatible behavior and minor releases add compatible capability. Before 1.0, a documented minor release may include a breaking public API change; after 1.0, breaking public API changes require a major release.
Internal implementation details, private framework state, and undocumented deep imports are not compatibility surfaces.
Adapter stability includes peer ranges
Framework adapters are supported only with the versions listed in their peer dependency ranges. A new framework version can change the public events an adapter receives even when generative-a11y has not changed.
- Review the compatibility matrix before upgrading a framework peer.
- Pin framework versions when your app depends on exact adapter behavior.
- Send core events directly when a framework does not report an event your app needs.
Package contracts are checked before publication
Release validation inspects package exports, declaration files, provenance-ready metadata, packed contents, dependency boundaries, and installability. Public entry points must resolve from the package users install.
- Every exported API has tests and documentation.
- Package manifests expose only supported public entry points.
- Packed artifacts are inspected instead of trusting the source tree.
- Framework adapters stay within their declared peer ranges.
Each release check answers a different question
A release runs code checks, browser tests, package validation, and a validator for hands-on screen-reader test records. Passing one check does not replace the others.
| Check | What it covers | Limit |
|---|---|---|
| Repository check | Types, builds, unit behavior, rendered docs | Code and runtime behavior |
| Browser matrix | Keyboard, focus, semantics, page updates | Browser behavior only |
| Package validation | Exports, tarballs, installability | Files received by package users |
| Screen-reader test record | A dated, hands-on workflow | One named setup |
Migration checklist
Upgrade one package area at a time. Check runtime output first, then test in browsers and with the screen readers you support.
- Read the package release notes and peer dependency changes.
- Update one generative-a11y package family to a consistent version set.
- Run type checking and adapter translation tests.
- Compare diagnostics for suppression, cancellation, and delivery changes.
- Exercise stop, retry, tool failure, and approval workflows in a browser.
- Repeat the application's documented assistive-technology smoke test.
Deprecations remain documented
When an API is deprecated, its replacement and migration path remain documented until removal. This pre-1.0 naming update makes direct breaking replacements without a deprecation period. Release notes identify changed defaults, event semantics, ownership rules, and peer dependency ranges.
Public API naming update
This release replaces the earlier API names directly. There are no deprecated
aliases. Update imports, type annotations, and runtime configuration together.
The package provides context: createRuntime creates a core runtime,
createAnnouncer creates browser delivery, and A11yProvider owns the React
integration. Lifecycle event names and accessibility behavior are unchanged.
| Previous API | Current API |
|---|---|
createGenerativeA11y | createRuntime |
GenerativeA11yRuntime, GenerativeA11yOptions, GenerativeA11yEvent | Runtime, RuntimeOptions, RuntimeEvent |
englishAnnouncementCatalog from core | en from @generative-a11y/core/messages |
AnnouncementCatalog | Messages from core/messages |
AnnouncementMessages, AnnouncementMessageParameters, AnnouncementMessageId | MessageMap, MessageParams, MessageKey from core/messages |
AdapterAnnouncementCopy, normalizeAdapterAnnouncementCopy | AdapterCopy, normalizeAdapterCopy from core/messages |
announcementCatalog runtime/provider option | messages |
GenerativeA11yProvider | A11yProvider |
useGenerativeA11y, useGenerativeA11yRuntime | useA11y, useRuntime |
useGenerativeA11yAttention, useGenerativeA11yAttentionControl | useAttention, useAttentionControl |
useGenerativeA11yPreferences, useGenerativeA11yBindings | usePreferences, useAttentionRefs |
createDOMAnnouncer, connectRuntimeToDOM, bindAttentionToRuntime | createAnnouncer, bindRuntime, bindAttention |
GenerativeA11yExpect, GenerativeA11yMatchers | A11yExpect, A11yMatchers from core/testing |
createAnnouncementRecorder, createAnnouncementScheduler | createRecorder, createScheduler |
AI SDK createObserver | createChatObserver |
assistant-ui bindThreadRuntime | bindThread |
devtools createDevtoolsStore, mountDevtoolsOverlay | createStore, mountOverlay |
Associated types follow the same names: A11yProviderProps, AnnouncerOptions,
Announcer, RuntimeBinding, SchedulerOptions, ChatObserverOptions,
BindThreadOptions, StoreOptions, and OverlayOptions. The diagnostic
snapshot's announcementCatalog field is now messages; its content-free
{ catalogId, locale } value is unchanged.
English is the default. Import messages only when customizing the copy:
import { createRuntime } from "@generative-a11y/core";
const runtime = createRuntime();import { createRuntime } from "@generative-a11y/core";
import { en, type Messages } from "@generative-a11y/core/messages";
const messages = {
...en,
id: "my-app.en.v1",
messages: {
...en.messages,
"response.completed": "Your answer is ready.",
},
} satisfies Messages;
const runtime = createRuntime({ messages });Messages is the complete configuration with an ID, locale and message map. A
different language supplies every message; use your existing translation system
inside the typed formatters. See
localized announcements.
Additional type replacements
| Previous type | Current type |
|---|---|
GenerativeA11yProviderProps | A11yProviderProps |
GenerativeA11yContextValue | A11yContextValue |
GenerativeA11yDOMOptions | DeliveryOptions |
GenerativeA11yAttentionControlResult | AttentionControl |
GenerativeA11yPreferencesResult | PreferencesResult |
GenerativeA11yComposerProps | AttentionRefs["composerRef"] (callback ref, not a props object) |
GenerativeA11yConversationProps | AttentionRefs["conversationRef"] |
GenerativeA11yNewestResponseProps | AttentionRefs["newestResponseRef"] |
GenerativeA11yBindings | AttentionRefs |
DOMAnnouncer | Announcer |
DOMAnnouncerOptions | AnnouncerOptions |
DOMAnnouncementMode | DeliveryMode |
DOMLiveRegions | LiveRegions |
DOMDeliveryResult | DeliveryResult |
DOMRuntimeBinding | RuntimeBinding |
AttentionRuntimeBindingOptions | AttentionBindingOptions |
AttentionRuntimeBinding | AttentionBinding |
AnnouncementRecorder | Recorder |
AnnouncementScheduler | Scheduler |
AnnouncementSchedulerOptions | SchedulerOptions |
CreateObserverOptions | ChatObserverOptions |
BindThreadRuntimeOptions | BindThreadOptions |
DevtoolsStoreOptions | StoreOptions |
DevtoolsStore | Store |
MountDevtoolsOverlayOptions | OverlayOptions |
MountedDevtoolsOverlay | Overlay |
Integration clarity changes
- Provider
domis nowdelivery; its browser callback isonDelivery. Core and preference-storeonDiagnosticcallbacks retain their separate meaning. useBindingsbecomesuseAttentionRefs, returningcomposerRef,conversationRef, andnewestResponseRefdirectly. Useref={composerRef}; these refs observe attention and add no semantic props. The former props types are removed;AttentionRefsdescribes the callbacks for host HTMLElements.- Each adapter exports
adapterInfoandAdapterInfoinstead ofCHAT_ADAPTER_METADATA/ChatAdapterMetadata,THREAD_ADAPTER_METADATA/ThreadAdapterMetadata, orAGENT_ADAPTER_METADATA/AgentAdapterMetadata. - Requested delivery mode
aria-notifyis removed because it behaved exactly likeauto. Useautofor notification with fallback, orlive-regionto choose that path. The observed result method can still bearia-notify. - Configuration errors name the invalid field or missing documented message key without including supplied values.
See the API reference for the updated imports, options, and usage examples.