react-native-accessibility
Automatically applies accessibility best practices to React Native and Expo projects. Use when working on mobile apps that need VoiceOver (iOS) or TalkBack (Android) support, WCAG compliance, or accessibility audits. Triggers on React Native accessibility tasks, a11y improvements, or when the user mentions accessibility, VoiceOver, TalkBack, or screen reader support.
Best use case
react-native-accessibility is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Automatically applies accessibility best practices to React Native and Expo projects. Use when working on mobile apps that need VoiceOver (iOS) or TalkBack (Android) support, WCAG compliance, or accessibility audits. Triggers on React Native accessibility tasks, a11y improvements, or when the user mentions accessibility, VoiceOver, TalkBack, or screen reader support.
Teams using react-native-accessibility should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/react-native-accessibility/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How react-native-accessibility Compares
| Feature / Agent | react-native-accessibility | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Automatically applies accessibility best practices to React Native and Expo projects. Use when working on mobile apps that need VoiceOver (iOS) or TalkBack (Android) support, WCAG compliance, or accessibility audits. Triggers on React Native accessibility tasks, a11y improvements, or when the user mentions accessibility, VoiceOver, TalkBack, or screen reader support.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# React Native Accessibility
Scan, fix, and audit accessibility in React Native and Expo projects. Detects missing screen reader labels, roles, hints, font scaling issues, WCAG violations, and generates Jest test code. Supports both iOS (VoiceOver) and Android (TalkBack) with platform-specific considerations per rule.
## When to Apply
Reference these guidelines when:
- Working on React Native or Expo projects that need accessibility support
- Adding VoiceOver (iOS) or TalkBack (Android) support
- Running an accessibility audit or a11y review
- Fixing font scaling, contrast, or WCAG compliance issues
- Preparing a mobile app for accessibility compliance
## Rule Categories by Priority
| Priority | Category | Impact | Prefix |
|----------|----------|--------|--------|
| 1 | Missing Screen Reader Labels | CRITICAL | `p0-` |
| 2 | Missing Context and Discoverability | HIGH | `p1-` |
| 3 | Visual, Interaction, and System Setting Compliance | MEDIUM | `p2-` |
## Quick Reference
### 1. Missing Screen Reader Labels (CRITICAL)
- `p0-images-without-labels` — Images, ExpoImage, and SVG icons without `accessibilityLabel`
- `p0-icon-only-pressables` — Pressable/TouchableOpacity wrapping only an icon with no label
### 2. Missing Context and Discoverability (HIGH)
- `p1-missing-hints` — Interactive elements without `accessibilityHint`
- `p1-missing-roles` — Pressable/Touchable without `accessibilityRole`
- `p1-missing-input-labels` — `TextInput` without `accessibilityLabel`
- `p1-small-touch-targets` — Interactive elements below 48x48 dp minimum
- `p1-color-only-information` — Color as the sole means of conveying information
### 3. Visual, Interaction, and System Setting Compliance (MEDIUM)
- `p2-font-scaling-disabled` — `allowFontScaling={false}` or low `maxFontSizeMultiplier`
- `p2-ungrouped-elements` — Related elements (icon + text) not grouped for screen readers
- `p2-missing-header-roles` — Section titles without `accessibilityRole="header"`
- `p2-decorative-elements-exposed` — Decorative images/separators in the accessibility tree
- `p2-contrast-insufficient` — Colors that fail WCAG AA contrast ratios
- `p2-reduce-motion-ignored` — Animations without reduce-motion check
- `p2-custom-actions-missing` — Swipe/long-press gestures without `accessibilityActions`
- `p2-live-region-missing` — Dynamic content updates not announced to screen readers
- `p2-modal-focus-management` — Custom modals without focus trapping or background hiding
## WCAG AA Coverage
| WCAG Criterion | Rules Covering It |
|---------------|-------------------|
| 1.1.1 Non-text Content | p0-images-without-labels, p0-icon-only-pressables, p2-decorative-elements-exposed |
| 1.3.1 Info and Relationships | p2-ungrouped-elements, p2-missing-header-roles |
| 1.4.1 Use of Color | p1-color-only-information |
| 1.4.3 Contrast (Minimum) | p2-contrast-insufficient |
| 1.4.4 Resize Text | p2-font-scaling-disabled |
| 2.5.5 Target Size | p1-small-touch-targets |
| 4.1.2 Name, Role, Value | p1-missing-roles, p1-missing-hints, p1-missing-input-labels |
| 4.1.3 Status Messages | p2-live-region-missing |
## Workflow
Execute these 5 phases in order. Load rule files on-demand — only read a rule when its content is needed for the current phase.
### Phase 1: Project Discovery
1. Check for `app.json` or `app.config.js`/`app.config.ts` to determine if this is an Expo project
2. Glob for `**/*.{tsx,jsx,ts,js}` to find all React Native source files
3. Identify navigation library: `@react-navigation/*`, `expo-router`, etc.
4. Grep for existing accessibility usage to understand current coverage:
- `accessibilityLabel`, `accessibilityHint`, `accessibilityRole`
- `accessibilityState`, `accessibilityValue`, `accessibilityActions`
- `accessibilityLiveRegion`, `accessibilityViewIsModal`
- `accessible={false}`, `importantForAccessibility`
5. Report: total files, Expo vs bare RN, navigation library, current accessibility coverage percentage
### Phase 2: Issue Detection
Scan files for anti-patterns. Read rules from `rules/` directory for detection patterns.
For each issue found, record: file path, line number, priority, description, and suggested fix.
### Phase 3: Automated Fixes
Apply fixes using Edit tool, following these rules:
1. **Never overwrite** existing accessibility code — only add missing properties
2. **Add `[VERIFY]` comment markers** on generated labels where semantic accuracy needs human review:
```tsx
accessibilityLabel="Settings icon" // [VERIFY] confirm label matches intent
```
3. **Preserve formatting** — match the indentation and style of surrounding code
4. **Group related fixes** — apply all fixes to a single element together
Fix application order:
1. P0 Critical fixes first
2. P1 High fixes
3. P2 Medium fixes (comprehensive mode only)
### Phase 4: Test Generation
Load `assets/jest-a11y-test-template.tsx` and generate a Jest test file for the project.
1. Create `accessibility.test.tsx` in the project's test directory
2. Add a test case for each screen/component that was modified
3. Use `@testing-library/react-native` with accessibility queries
4. Include setup for navigation context if needed
Match the project's existing test framework and patterns.
### Phase 5: Report
Output a structured summary:
```
## Accessibility Audit Report
### Issues Found
| Priority | Category | Count |
|----------|----------|-------|
| P0 Critical | ... | ... |
| P1 High | ... | ... |
| P2 Medium | ... | ... |
### Changes Applied
- **Files modified**: [list]
- **Issues fixed**: [count] of [total]
- **Test file generated**: [path]
### Platform Coverage
| Feature | iOS (VoiceOver) | Android (TalkBack) |
|---------|-----------------|-------------------|
| Screen reader labels | Ready / Needs Work | Ready / Needs Work |
| Roles and hints | Ready / Needs Work | Ready / Needs Work |
| Touch targets | Ready / Needs Work | Ready / Needs Work |
| Font scaling | Ready / Needs Work | Ready / Needs Work |
| Reduce motion | Ready / Needs Work | Ready / Needs Work |
### Manual Review Required
Items marked with [VERIFY] that need human confirmation:
- [list of VERIFY items with file:line references]
### Next Steps
- [ ] Run VoiceOver testing on iOS (see assets/checklist.md)
- [ ] Run TalkBack testing on Android (see assets/checklist.md)
- [ ] Review [VERIFY] markers and update labels
- [ ] Run generated accessibility tests
- [ ] Test with maximum system font size on both platforms
- [ ] Test with Reduce Motion enabled on both platforms
- [ ] Verify color contrast with a contrast checker tool
```
## Configuration
- **Standard mode** (default): Fixes P0 and P1 issues, reports P2
- **Comprehensive mode**: Fixes all priority levels — invoke with "comprehensive" or "full audit"
## Supporting Files
Loaded on-demand during execution:
- `rules/` — Individual detection and fix rules per issue category (16 rules)
- `references/react-native-a11y-api.md` — Full React Native accessibility API catalog
- `references/platform-differences.md` — iOS vs Android accessibility behavior differences
- `references/wcag-guidelines.md` — WCAG AA and platform guideline reference
- `assets/jest-a11y-test-template.tsx` — Jest accessibility test template
- `assets/checklist.md` — Manual verification checklist for both platformsRelated Skills
swift-accessibility
Automatically applies accessibility best practices to Swift projects (SwiftUI and UIKit). Use when working on iOS/macOS projects that need VoiceOver support, Dynamic Type, WCAG compliance, or accessibility audits. Triggers on Swift accessibility tasks, a11y improvements, or when the user mentions accessibility, VoiceOver, or Dynamic Type.
react-native-skia-shaders
Comprehensive SKSL (Skia Shading Language) shader techniques for react-native-skia — ray marching, SDF modeling, procedural noise, lighting, post-processing, image filters, BackdropFilter, child shaders, gesture- and Reanimated-driven uniforms. Triggers on tasks involving Shader, RuntimeEffect, SKSL, custom visual effects, animated backgrounds, image distortion, blur, glow, glass / liquid effects, or any request to "write a shader" in a React Native or Expo app using @shopify/react-native-skia.
react-native-animations
Encodes motion design and animation engineering philosophy for React Native apps using Reanimated, Gesture Handler, and Skia. Use when building or reviewing mobile animations, gestures, transitions, or interactive UI polish. Triggers on animation tasks, micro-interactions, gesture handling, or when the user mentions Reanimated, worklets, shared values, Skia, or mobile motion.
skill-creator
Create new skills, modify and improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, update or optimize an existing skill, run evals to test a skill, benchmark skill performance with variance analysis, or optimize a skill's description for better triggering accuracy.
md-to-pdf
Converts markdown files into professionally styled PDF documents. Use this skill whenever the user asks to generate a PDF, export markdown as PDF, convert .md to .pdf, or create a printable version of a document. Also triggers when the user wants status-colored tables, styled documentation export, or says things like "make this a PDF", "I need a PDF version", "export this doc". Supports auto orientation, optional keyword-based cell coloring, and graceful engine fallback.
native-data-fetching
Use when implementing or debugging ANY network request, API call, or data fetching. Covers fetch API, React Query, SWR, error handling, caching, offline support, and Expo Router data loaders (useLoaderData).
fp-ts-react
Practical patterns for using fp-ts with React - hooks, state, forms, data fetching. Use when building React apps with functional programming patterns. Works with React 18/19, Next.js 14/15.
fp-react
Practical patterns for using fp-ts with React - hooks, state, forms, data fetching. Works with React 18/19, Next.js 14/15.
fixing-accessibility
Audit and fix HTML accessibility issues including ARIA labels, keyboard navigation, focus management, color contrast, and form errors. Use when adding interactive controls, forms, dialogs, or reviewing WCAG compliance.
competitor-alternatives
You are an expert in creating competitor comparison and alternative pages. Your goal is to build pages that rank for competitive search terms, provide genuine value to evaluators, and position your product effectively.
building-native-ui
Complete guide for building beautiful apps with Expo Router. Covers fundamentals, styling, components, navigation, animations, patterns, and native tabs.
Accessibility Engineering Engine
You are the Accessibility Engineering Engine — a complete WCAG compliance, inclusive design, and digital accessibility system. You help teams build products that work for everyone, pass audits, and meet legal requirements.