Engineering · Skill
Writing Expo Modules
Guide for creating and writing Expo native modules and views using the Expo Modules API (Swift, Kotlin, TypeScript). Covers module definition DSL, native views, shared objects, config plugins, lifecycle hooks, autolinking, and type system. Use when building or modifying native modules for Expo. Not for migrating an existing Swift module from the definition DSL to the Expo Modules API 2.0 macros; use expo-migrate-module (from the expo-experiments plugin) for that.
Open in PhởWhat the skill covers
The sections of its instructions, in order.
- 01 When to Use
- 02 References
- 03 Quick Start
- 04 Recommended Workflow
- 05 Practical Scaffolding Rules
- 06 Core File Shapes
- 07 Module Structure Reference
- expo-module.config.json
- 08 Submitting Feedback
Reference files
7 files Phở can open while it uses the skill.
- agents/openai.yaml
- references/config-plugin.md
- references/create-expo-module.md
- references/lifecycle.md
- references/module-config.md
- references/native-module.md
- references/native-view.md
More in Expo app development
- App Store Deployment
Build and submit iOS and Android apps with EAS to TestFlight, the App Store, or Google Play. Supports Expo and other React Native projects, plus existing native apps. Use for…
- EAS Hosting
Deploy Expo websites and Expo Router API routes to EAS Hosting - export the web bundle, run eas deploy for production and PR preview URLs, manage environment secrets and custom…
- EAS Observe
Use for anything related to EAS Observe - adding `expo-observe` to an Expo project (AppMetricsRoot/ObserveRoot HOC, markInteractive and ObserveInteractiveMarker, the useObserve…
- EAS Update
Configure and use EAS Update for over-the-air JavaScript and asset updates with expo-updates and EAS CLI. Use when setting up OTA updates, running eas update:configure or eas…
- EAS Update Insights
Check the health of published EAS Update: crash rates, install/launch counts, unique users, payload size, and the split between embedded and OTA users per channel. Use when the…
- Building Animations in Expo
Build animations in React Native and Expo, making the decisions in the order that determines whether they feel right — should it animate, which thread it runs on, which…
- Add an App Clip to an Expo App
Add an iOS App Clip target to an Expo app. Use when the user mentions App Clip, AASA, apple-app-site-association, appclips, smart app banner, or wants to ship a lightweight iOS…
- Expo Brownfield
Integrate Expo and React Native into an existing native iOS or Android app. Use for brownfield, embedding a React Native screen in SwiftUI/UIKit or Kotlin, or AAR/XCFramework…
- Expo Networking
Use when implementing or debugging ANY network request, API call, or data fetching. Covers fetch API, React Query, SWR, error handling, caching, offline support…
- Expo Design Systems
Build and maintain a design system inside an Expo app - a reusable theme of design tokens (color, spacing, typography, radius, shadow, motion), reusable component structure with…
- iOS (requires Xcode)
Build and distribute Expo development clients locally or via TestFlight for internal testing. For production TestFlight releases and store submission, use the eas-app-stores skill.
- Expo dom
Use Expo DOM components to run web code in a webview on native and as-is on web. Migrate web code to native incrementally. For the end-to-end migration of a whole web app, use…
- Expo Examples
Expo's official example projects - the expo/examples repo of ~70 `with-*` integrations (Stripe, Clerk, Supabase, OpenAI, maps, Reanimated, SQLite, Skia, NativeWind, and more)…
- Expo Native UI Guidelines
Build beautiful, native-feeling Expo screens. Covers Apple HIG styling, semantic colors, native controls, SF Symbols, media, visual effects, gradients, storage, and responsive…
- expo-overview — router & shared rules for Expo / EAS
Entry point and router for every Expo or EAS task. Load this skill first — before writing code and before choosing another expo-* / eas-* skill — when the request, PRD, or spec…
- Expo Project Structure
Folder structure for a new Expo app. Use when scaffolding or laying out a new Expo project with Expo Router, or deciding where a file should live in one. For new projects only —…
- Expo Router Navigation
Navigation and routing for Expo Router. Covers file-based routes, groups and dynamic routes, folder organization, Link with previews and context menus, native Stack, page titles…
- Expo upgrade
Guidelines for upgrading Expo SDK versions and fixing dependency issues
- Web to Native
Migrate an existing web React app to a native iOS/Android app with Expo. Use when the user wants to turn a website into a mobile app, port a Next.js/Vite/CRA React codebase to…
Similar engineering skills
Frequently asked questions
What does Writing Expo Modules do?
Guide for creating and writing Expo native modules and views using the Expo Modules API (Swift, Kotlin, TypeScript). Covers module definition DSL, native views, shared objects, config plugins, lifecycle hooks, autolinking, and type system. Use when building or modifying native modules for Expo. Not for migrating an existing Swift module from the definition DSL to the Expo Modules API 2.0 macros; use expo-migrate-module (from the expo-experiments plugin) for that.
Is Writing Expo Modules free to use?
Yes. Writing Expo Modules is published by Expo under the MIT licence, and you can use it with a free Phở account.
How do I use Writing Expo Modules in Phở?
Press Open in Phở, then Try to apply it to your next message, or add the Expo app development set so Phở loads it whenever a request matches.
Does Writing Expo Modules need other tools?
No. It works in a normal Phở chat with what you type or upload.
Copied unchanged from expo/skills at commit a9e5bd3 and credited to Expo, who is not affiliated with Phở. The full instructions and licence text ship with the skill inside Phở.