Target | Runtime path | Native accessibility API exposure | Screen-reader expectation | Status |
|---|---|---|---|---|
macOS | winit native shell | Yes, through AccessKit and the macOS accessibility stack | VoiceOver, Switch Control, Accessibility Inspector | Supported; product apps still need manual QA. |
Windows | winit native shell | Yes, through AccessKit and the Windows accessibility stack | Narrator, NVDA, JAWS, Inspect | Supported; validate on target Windows versions. |
Linux | winit native shell | Yes, through AccessKit and AT-SPI where available | Orca and AT-SPI tooling | Supported with desktop/session dependency; validate on the distribution and desktop environment you ship for. |
iOS | winit mobile/native shell | Yes, through AccessKit's iOS adapter | VoiceOver, Switch Control, Full Keyboard Access | Supported by the native bridge; validate on simulator and device. |
Android | winit mobile shell using NativeActivity | No native TalkBack bridge today | TalkBack, Switch Access, Voice Access | Semantics exist for runtime/tests, but native TalkBack control is not complete because the current AccessKit Android adapter expects winit GameActivity. |
Web canvas | winit/Web canvas shell | No DOM accessibility tree for the canvas-rendered app today | Browser screen readers only see surrounding host DOM | Not complete for screen-reader control of the canvas app. Prefer Static site or SSR for accessible document-like pages today. |
Static site | static HTML renderer | Yes, through semantic HTML and browser accessibility tree | Browser screen readers and browser accessibility inspectors | Supported for rendered HTML semantics, native form controls, links, headings, labels, and ARIA/data attributes produced by the static renderer. |
SSR | server HTML renderer | Yes, through semantic HTML and browser accessibility tree | Browser screen readers and browser accessibility inspectors | Supported for server-rendered HTML semantics and forms, with progressive enhancement preserving semantic targets. |
Terminal | terminal shell | No OS accessibility tree owned by Fission | Terminal emulator plus screen reader, for example VoiceOver terminal navigation or Orca terminal use | Partial; Fission semantics inform rendering and tests, but full selector command semantics are not exposed by the terminal backend yet. |
Fission role | AccessKit/native role |
|---|---|
Role::Button | Button |
Role::Text | Label |
Role::TextInput | Text input, password input, multiline text input, email input, number input, phone input, or URL input depending on text-input metadata |
Role::Image | Image |
Role::Checkbox | Checkbox |
Role::Radio | Radio button |
Role::Switch | Switch |
Role::Dialog | Dialog |
Role::Slider | Slider |
Role::Input | Text input |
Role::List | List |
Role::ListItem | List item |
Role::Generic | Generic container, only emitted when other metadata makes the node meaningful |
Fission field or derived data | Native bridge behavior |
|---|---|
Semantics::identifier | Exposed as AccessKit author id and as data-fission-semantics in HTML renderers. Used by LiveTest selectors. |
Semantics::label | Exposed as accessible label. If absent, some controls derive a label from descendant text. |
Semantics::value | Exposed as node value. Text inputs can fall back to retained runtime text-edit state when lowered semantics do not carry a value. |
Semantics::focusable | Adds focus and blur actions when the node is enabled. |
Runtime focused node | Mirrored into the AccessKit tree focus field. |
Semantics::disabled | Exposed as disabled; native action dispatch rejects disabled targets. |
Semantics::read_only | Exposed for text inputs and native HTML inputs. |
Semantics::checked | Exposed as toggled/checked state for checkbox, radio, and switch controls. |
Semantics::masked | Maps text input to password input. The platform accessibility stack decides how to present the value; app code should not place raw secrets in custom semantic values. |
Semantics::multiline and text_input_type | Selects multiline, email, number, phone, URL, password, or generic text input role/type. |
Semantics::text_selection | Exposed as AccessKit text selection using character indices derived from byte offsets. |
Semantics::min_value, max_value, current_value | Exposed as numeric range metadata and supports increment, decrement, and set value. |
Semantics::scrollable_x, scrollable_y | Exposes scroll actions and current scroll offsets where layout has scroll geometry. |
Action entries | Default, focus, blur, change, cursor change, and related action triggers connect platform actions back to Fission reducers. |
Platform accessibility action | Fission behavior |
|---|---|
Click | Dispatches the semantic node's default action if present and enabled. |
Focus | Sets Fission runtime focus and dispatches the focus trigger. |
Blur | Clears or moves Fission runtime focus and dispatches the blur trigger. |
Replace selected text | Focuses the text input and commits replacement text through the IME/text-edit pipeline. |
Set value | Updates text input text or numeric range value, then dispatches the relevant change action. |
Set text selection | Converts character indices to byte offsets, updates Fission text selection, and dispatches cursor change. |
Scroll up/down/left/right | Finds the relevant scroll node, updates runtime scroll offset, and schedules a new frame. |
Increment/decrement | Adjusts numeric range values for sliders and similar controls. |
Platform | Tools worth testing |
|---|---|
macOS | VoiceOver, Switch Control, Accessibility Inspector, Keyboard navigation. |
Windows | Narrator, NVDA, JAWS, Windows Magnifier, Inspect. |
Linux | Orca, AT-SPI inspection tools, high-contrast desktop themes, keyboard-only navigation. |
iOS | VoiceOver, Switch Control, Dynamic Type, Full Keyboard Access. |
Android | TalkBack, Switch Access, Voice Access, large font scale. Native TalkBack control is not complete yet. |
Browser for Static site/SSR | VoiceOver with Safari, VoiceOver with Chrome, NVDA with Firefox/Chrome, JAWS with Chrome/Edge, browser accessibility tree inspectors. |
Gap | Impact | Current workaround |
|---|---|---|
Android native TalkBack bridge | Android users cannot rely on a complete native screen-reader tree from Fission apps yet. | Keep semantics correct, test with LiveTest, and track Android accessibility bridge work separately. |
Web canvas accessibility tree | Browser screen readers cannot inspect the canvas-rendered app as native DOM controls. | Use Static site or SSR for document-like accessible experiences where possible. |
Advanced native announcements | Apps may need explicit status announcements for async completion, validation errors, or live regions. | Render visible and semantic status text; add a platform announcement API when needed. |
Rich text navigation | Basic text labels and editable selection are exposed, but advanced rich text navigation is not complete. | Keep important prose in normal Text/RichText nodes and validate with target screen readers. |
Custom rotors/landmarks | Platform-specific navigation affordances beyond current roles are not fully modeled. | Use clear region labels and roles today; propose additional semantic roles when product needs prove them. |
Terminal semantic command tree | Terminal backend does not expose the same selector command semantics as winit LiveTest today. | Use terminal-focused tests and manual terminal/screen-reader QA. |