---
name: accessibility
description: Review React Native code for screen-reader support, labels and roles, touch targets, focus order, colour contrast, and dynamic type. Use when building UI, reviewing components, or auditing a screen for accessibility.
version: 1.1.0
platforms: [ios, android]
react-native-version: 0.76+
tags: [react-native, accessibility, a11y, screen-reader]
---
# Accessibility Skill
## Applicability
- **Platforms:** iOS and Android
- **React Native:** 0.76+ (New Architecture interop assumed unless a checklist item says otherwise)
## When to Use
- Building or reviewing any interactive UI
- Auditing a screen for screen-reader and assistive-technology support
- Verifying an app meets accessibility expectations before release
## Severity
- **Merge-blocking:** an interactive control this diff adds has no accessible name.
- **Should-fix:** target size, contrast, dynamic type, and focus order.
## Guidance
### Labels & Roles
- [ ] An interactive control has an accessible name: its visible text, or an `accessibilityLabel` when the visible content is only an icon
- [ ] Do not repeat the visible text in `accessibilityLabel`
- [ ] Every interactive element has an `accessibilityRole` (button, link, header, etc.)
- [ ] State changes use `accessibilityState` (disabled, selected, expanded)
- [ ] Images have an `accessibilityLabel`, or are marked `accessibilityElementsHidden` if decorative
- [ ] Dynamic content changes are announced (`AccessibilityInfo.announceForAccessibility`)
**Incorrect:**
```tsx
```
**Correct:**
```tsx
```
### Touch & Focus
- [ ] Touch targets are at least 44×44pt on iOS and 48×48dp on Android
- [ ] Focus order follows reading order. In an RTL layout that order starts at the trailing edge (see [i18n-and-localization](../i18n-and-localization/SKILL.md))
### Visual
- [ ] Colour is not the only indicator of state (add icon, text, or pattern)
- [ ] Text scales with the system font-size preference
### Verification
- [ ] Tested with VoiceOver (iOS) and TalkBack (Android)
## Pitfalls
- Labels that describe the element type ("button") instead of its purpose ("Delete item") give screen-reader users no useful information.
- Forgetting `accessibilityState={{ disabled: true }}` on a disabled control means the screen reader still announces it as an active button.
- Relying on colour alone (e.g. red for error) excludes colour-blind users; pair it with an icon or text.
- Fixed font sizes break layouts when users increase system text size — test at large dynamic type settings.