File contents Expo React Native Coder Best Practices
Comprehensive feature development guide for Expo React Native applications. Contains 50 rules across 10 categories, covering everything from project setup to testing. Includes production-ready code templates for common features.
When to Apply
Reference these guidelines when:
Setting up a new Expo project with TypeScript
Building navigation with Expo Router (tabs, stacks, drawers, modals)
Creating screens (list, detail, form, settings)
Implementing authentication flows with protected routes
Configuring deep linking and universal links
Rule Categories by Priority
Priority
Category
Impact
Prefix
1
Project Setup & Configuration
CRITICAL
setup-
2
Routing & Navigation
CRITICAL
route-
3
Screen Patterns & Layouts
HIGH
screen-
4
Data Fetching & State
HIGH
data-
5
Authentication & Security
HIGH
auth-
6
Deep Linking & Universal Links
HIGH
link-
7
Native UX Patterns
MEDIUM-HIGH
ux-
8
Forms & User Input
MEDIUM
form-
9
Assets & Theming
MEDIUM
asset-
10
Error Handling & Testing
MEDIUM
test-
Quick Reference
1. Project Setup & Configuration (CRITICAL)
setup-typescript-config - Configure TypeScript with strict mode
setup-app-config-typescript - Use typed app.config.ts
setup-environment-variables - EXPO_PUBLIC_ prefix for client vars
setup-eas-build-profiles - EAS build profiles per environment
setup-development-build - Development builds vs Expo Go
2. Routing & Navigation (CRITICAL)
route-file-based-routing - File-based routing with Expo Router
route-tab-navigator - Tab navigator with route groups
route-dynamic-segments - Dynamic route segments [param]
route-stack-within-tabs - Nested stack in tabs
route-modal-presentation - Modal screen presentation
route-typed-routes - Enable typed routes
route-drawer-navigator - Drawer navigator setup
3. Screen Patterns & Layouts (HIGH)
screen-list-flashlist - FlashList for large lists
screen-detail-params - Pass minimal data via params
screen-loading-state - Loading and error states
screen-pull-to-refresh - Pull-to-refresh pattern
screen-header-options - Configure screen headers
screen-settings-list - Settings screen with SectionList
4. Data Fetching & State (HIGH)
data-api-routes - Server-side API routes
data-secure-store - SecureStore for sensitive data
data-sqlite-local - SQLite for complex local data
data-fetch-on-focus - Refetch on screen focus
data-async-storage-simple - AsyncStorage for preferences
data-abort-controller - Cancel fetch on unmount
5. Authentication & Security (HIGH)
auth-protected-routes - Stack.Protected guards
auth-context-provider - Auth context with session
auth-oauth-flow - OAuth with AuthSession
auth-login-form - Login form with validation
auth-splash-loading - Splash screen during auth check
6. Deep Linking & Universal Links (HIGH)
link-deep-linking-scheme - Custom URL scheme
link-universal-links-ios - iOS Universal Links
link-android-app-links - Android App Links
link-handle-incoming - Handle incoming URLs
7. Native UX Patterns (MEDIUM-HIGH)
ux-safe-area-insets - SafeAreaView for notches
ux-status-bar - Status bar styling
ux-haptic-feedback - Haptic feedback on actions
ux-gesture-handler - Gesture handler for swipes
ux-keyboard-avoiding - KeyboardAvoidingView
8. Forms & User Input (MEDIUM)
form-text-input-config - TextInput keyboard types
form-controlled-inputs - Controlled inputs with useState
form-submit-button-state - Disable button during submit
form-dismiss-keyboard - Dismiss keyboard on tap outside
9. Assets & Theming (MEDIUM)
asset-image-optimization - expo-image for caching
asset-font-loading - Load fonts with useFonts
asset-vector-icons - @expo/vector-icons
asset-splash-screen - Splash screen configuration
10. Error Handling & Testing (MEDIUM)
test-jest-setup - Jest with jest-expo preset
test-component-testing - Testing Library for components
test-error-boundary - Error boundaries
test-e2e-maestro - Maestro E2E testing
Code Templates
Production-ready templates are available in assets/templates/:
Template
Description
layouts/tab-layout.tsx
Bottom tab navigator with icons
layouts/auth-layout.tsx
Root layout with protected routes
screens/list-screen.tsx
List with FlashList, refresh, states
screens/detail-screen.tsx
Detail screen with param handling
screens/form-screen.tsx
Form with validation, keyboard handling
hooks/use-auth.tsx
Auth context with SecureStore
components/error-boundary.tsx
Error boundary component
How to Use
Read individual reference files for detailed explanations and code examples:
Section definitions - Category structure and impact levels
Rule template - Template for adding new rules
Full Compiled Document
For a single comprehensive document with all rules, see AGENTS.md.
Reference Files
File
Description
AGENTS.md
Complete compiled guide with all rules
references/_sections.md
Category definitions and ordering
assets/templates/
Production-ready code templates
metadata.json
Version and reference information
1 --- 2 name: expo-react-native-coder 3 description: Expo React Native Coder Best Practices 4 --- 5 # Expo React Native Coder Best Practices 6 7 Comprehensive feature development guide for Expo React Native applications. Contains 50 rules across 10 categories, covering everything from project setup to testing. Includes production-ready code templates for common features. 8 9 ## When to Apply 10 11 Reference these guidelines when: 12 - Setting up a new Expo project with TypeScript 13 - Building navigation with Expo Router (tabs, stacks, drawers, modals) 14 - Creating screens (list, detail, form, settings) 15 - Implementing authentication flows with protected routes 16 - Configuring deep linking and universal links 17 18 ## Rule Categories by Priority 19 20 | Priority | Category | Impact | Prefix | 21 |----------|----------|--------|--------| 22 | 1 | Project Setup & Configuration | CRITICAL | `setup-` | 23 | 2 | Routing & Navigation | CRITICAL | `route-` | 24 | 3 | Screen Patterns & Layouts | HIGH | `screen-` | 25 | 4 | Data Fetching & State | HIGH | `data-` | 26 | 5 | Authentication & Security | HIGH | `auth-` | 27 | 6 | Deep Linking & Universal Links | HIGH | `link-` | 28 | 7 | Native UX Patterns | MEDIUM-HIGH | `ux-` | 29 | 8 | Forms & User Input | MEDIUM | `form-` | 30 | 9 | Assets & Theming | MEDIUM | `asset-` | 31 | 10 | Error Handling & Testing | MEDIUM | `test-` | 32 33 ## Quick Reference 34 35 ### 1. Project Setup & Configuration (CRITICAL) 36 37 - [`setup-typescript-config`](references/setup-typescript-config.md) - Configure TypeScript with strict mode 38 - [`setup-app-config-typescript`](references/setup-app-config-typescript.md) - Use typed app.config.ts 39 - [`setup-environment-variables`](references/setup-environment-variables.md) - EXPO_PUBLIC_ prefix for client vars 40 - [`setup-eas-build-profiles`](references/setup-eas-build-profiles.md) - EAS build profiles per environment 41 - [`setup-development-build`](references/setup-development-build.md) - Development builds vs Expo Go 42 43 ### 2. Routing & Navigation (CRITICAL) 44 45 - [`route-file-based-routing`](references/route-file-based-routing.md) - File-based routing with Expo Router 46 - [`route-tab-navigator`](references/route-tab-navigator.md) - Tab navigator with route groups 47 - [`route-dynamic-segments`](references/route-dynamic-segments.md) - Dynamic route segments [param] 48 - [`route-stack-within-tabs`](references/route-stack-within-tabs.md) - Nested stack in tabs 49 - [`route-modal-presentation`](references/route-modal-presentation.md) - Modal screen presentation 50 - [`route-typed-routes`](references/route-typed-routes.md) - Enable typed routes 51 - [`route-drawer-navigator`](references/route-drawer-navigator.md) - Drawer navigator setup 52 53 ### 3. Screen Patterns & Layouts (HIGH) 54 55 - [`screen-list-flashlist`](references/screen-list-flashlist.md) - FlashList for large lists 56 - [`screen-detail-params`](references/screen-detail-params.md) - Pass minimal data via params 57 - [`screen-loading-state`](references/screen-loading-state.md) - Loading and error states 58 - [`screen-pull-to-refresh`](references/screen-pull-to-refresh.md) - Pull-to-refresh pattern 59 - [`screen-header-options`](references/screen-header-options.md) - Configure screen headers 60 - [`screen-settings-list`](references/screen-settings-list.md) - Settings screen with SectionList 61 62 ### 4. Data Fetching & State (HIGH) 63 64 - [`data-api-routes`](references/data-api-routes.md) - Server-side API routes 65 - [`data-secure-store`](references/data-secure-store.md) - SecureStore for sensitive data 66 - [`data-sqlite-local`](references/data-sqlite-local.md) - SQLite for complex local data 67 - [`data-fetch-on-focus`](references/data-fetch-on-focus.md) - Refetch on screen focus 68 - [`data-async-storage-simple`](references/data-async-storage-simple.md) - AsyncStorage for preferences 69 - [`data-abort-controller`](references/data-abort-controller.md) - Cancel fetch on unmount 70 71 ### 5. Authentication & Security (HIGH) 72 73 - [`auth-protected-routes`](references/auth-protected-routes.md) - Stack.Protected guards 74 - [`auth-context-provider`](references/auth-context-provider.md) - Auth context with session 75 - [`auth-oauth-flow`](references/auth-oauth-flow.md) - OAuth with AuthSession 76 - [`auth-login-form`](references/auth-login-form.md) - Login form with validation 77 - [`auth-splash-loading`](references/auth-splash-loading.md) - Splash screen during auth check 78 79 ### 6. Deep Linking & Universal Links (HIGH) 80 81 - [`link-deep-linking-scheme`](references/link-deep-linking-scheme.md) - Custom URL scheme 82 - [`link-universal-links-ios`](references/link-universal-links-ios.md) - iOS Universal Links 83 - [`link-android-app-links`](references/link-android-app-links.md) - Android App Links 84 - [`link-handle-incoming`](references/link-handle-incoming.md) - Handle incoming URLs 85 86 ### 7. Native UX Patterns (MEDIUM-HIGH) 87 88 - [`ux-safe-area-insets`](references/ux-safe-area-insets.md) - SafeAreaView for notches 89 - [`ux-status-bar`](references/ux-status-bar.md) - Status bar styling 90 - [`ux-haptic-feedback`](references/ux-haptic-feedback.md) - Haptic feedback on actions 91 - [`ux-gesture-handler`](references/ux-gesture-handler.md) - Gesture handler for swipes 92 - [`ux-keyboard-avoiding`](references/ux-keyboard-avoiding.md) - KeyboardAvoidingView 93 94 ### 8. Forms & User Input (MEDIUM) 95 96 - [`form-text-input-config`](references/form-text-input-config.md) - TextInput keyboard types 97 - [`form-controlled-inputs`](references/form-controlled-inputs.md) - Controlled inputs with useState 98 - [`form-submit-button-state`](references/form-submit-button-state.md) - Disable button during submit 99 - [`form-dismiss-keyboard`](references/form-dismiss-keyboard.md) - Dismiss keyboard on tap outside 100 101 ### 9. Assets & Theming (MEDIUM) 102 103 - [`asset-image-optimization`](references/asset-image-optimization.md) - expo-image for caching 104 - [`asset-font-loading`](references/asset-font-loading.md) - Load fonts with useFonts 105 - [`asset-vector-icons`](references/asset-vector-icons.md) - @expo/vector-icons 106 - [`asset-splash-screen`](references/asset-splash-screen.md) - Splash screen configuration 107 108 ### 10. Error Handling & Testing (MEDIUM) 109 110 - [`test-jest-setup`](references/test-jest-setup.md) - Jest with jest-expo preset 111 - [`test-component-testing`](references/test-component-testing.md) - Testing Library for components 112 - [`test-error-boundary`](references/test-error-boundary.md) - Error boundaries 113 - [`test-e2e-maestro`](references/test-e2e-maestro.md) - Maestro E2E testing 114 115 ## Code Templates 116 117 Production-ready templates are available in `assets/templates/`: 118 119 | Template | Description | 120 |----------|-------------| 121 | `layouts/tab-layout.tsx` | Bottom tab navigator with icons | 122 | `layouts/auth-layout.tsx` | Root layout with protected routes | 123 | `screens/list-screen.tsx` | List with FlashList, refresh, states | 124 | `screens/detail-screen.tsx` | Detail screen with param handling | 125 | `screens/form-screen.tsx` | Form with validation, keyboard handling | 126 | `hooks/use-auth.tsx` | Auth context with SecureStore | 127 | `components/error-boundary.tsx` | Error boundary component | 128 129 ## How to Use 130 131 Read individual reference files for detailed explanations and code examples: 132 133 - [Section definitions](references/_sections.md) - Category structure and impact levels 134 - [Rule template](assets/templates/_template.md) - Template for adding new rules 135 136 ## Full Compiled Document 137 138 For a single comprehensive document with all rules, see [AGENTS.md](AGENTS.md). 139 140 ## Reference Files 141 142 | File | Description | 143 |------|-------------| 144 | [AGENTS.md](AGENTS.md) | Complete compiled guide with all rules | 145 | [references/_sections.md](references/_sections.md) | Category definitions and ordering | 146 | [assets/templates/](assets/templates/) | Production-ready code templates | 147 | [metadata.json](metadata.json) | Version and reference information |
ComeOnOliver/skillshub/tree/main/skills/pproenca/dot-skills/expo-react-native-coder commit 9f7ebf2a38
Frequently asked questions How do I install the Expo React Native Coder skill? Run npx skillmds@latest add comeonoliver/expo-react-native-coder in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
What does the Expo React Native Coder skill do? Expo React Native Coder Best Practices It is listed under Web & Frontend on SkillMD.
Is Expo React Native Coder safe to use? This skill has not completed SkillMD's automated safety review yet. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
Which AI agents work with Expo React Native Coder? This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Is Expo React Native Coder free to use? Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
Who published Expo React Native Coder? ComeOnOliver (@comeonoliver) published this skill. Their other Agent Skills are listed on their SkillMD profile.