Source: expo/skills · Maintainer: Expo · License: MIT · Checked: 24 October 2026
What is the expo-module skill?
The expo-module skill is Expo's official Agent Skill for building native modules and native views with the Expo Modules API. It teaches your coding agent to scaffold a module with create-expo-module, write the Swift, Kotlin and TypeScript sides, wire up expo-module.config.json, and add config plugins and lifecycle hooks. Install it with npx skills add https://github.com/expo/skills --skill expo-module.
Its description opens: "Guide for creating and writing Expo native modules and views using the Expo Modules API (Swift, Kotlin, TypeScript)." It sits in the Framework (open source) group of expo/skills, the free skills that don't depend on paid Expo Application Services.
As of 24 October 2026, its skills.sh page listed 44.8K installs (snapshot, 24 October 2026), second among Expo's current skills after expo-dev-client. skills.sh first saw it on 2 April 2026.
What does it do?
The skill is model-invoked: the agent loads it when you ask for native functionality in an Expo app. The SKILL.md (version 1.0.0) lists when it applies:
- Creating a new Expo native module or native view
- Adding native functionality such as camera, sensors or system APIs
- Wrapping platform SDKs for use from React Native
- Building config plugins that change native project files
- Adding Android, Apple or web support to an existing module
- Editing
expo-module.config.json, config plugins or lifecycle hooks
Scaffold first. The core rule: "Prefer create-expo-module over manually creating native module files and directories." The scaffold sets up the folder layout, expo-module.config.json, podspec or Gradle files, TypeScript bindings and the example app. If a module only needs another platform, the agent runs create-expo-module add-platform-support instead of copying native folders.
A five-step workflow.
- Choose a local module (one app) or a standalone module (reuse, monorepos, publishing).
- Decide which features the module needs:
Constant,Function,AsyncFunction,Event,View,ViewEventorSharedObject. - Scaffold with an explicit slug or path, an intentional
--platformchoice and--featuresfor code samples. - Replace the generated example code with the real implementation.
- Use
add-platform-supportwhen adding a platform later.
Scaffolding quirks. The skill records details that trip agents up. Feature samples are opt-in, so a module can start minimal. ViewEvent implies View. Local modules don't get an index.ts barrel unless you pass --barrel. In non-interactive mode, --name changes the native class name, not the folder name, and the reference file warns that leaving out the slug makes the CLI fall back to my-module.
Module shape. It shows the same small module in three languages: a Swift Module subclass with a definition() that declares Name and a Function, the Kotlin equivalent, and a TypeScript wrapper that calls requireNativeModule from expo. It also shows a minimal expo-module.config.json and notes that "iOS uses just the class name; Android uses the fully-qualified class name (package + class)."
Reference files. Six files in references/ load only when needed:
| File | Covers |
|---|---|
create-expo-module.md |
Scaffolding, CLI flags, local vs standalone, add-platform-support |
native-module.md |
The definition DSL: Name, Function, AsyncFunction, Property, Constant, events, types, shared objects |
native-view.md |
Native view components, props, event dispatchers, view lifecycle |
lifecycle.md |
Module, iOS AppDelegate and Android activity and application listeners |
config-plugin.md |
Changing Info.plist and AndroidManifest.xml, reading values in native code |
module-config.md |
expo-module.config.json fields and autolinking |
The folder also has an agents/openai.yaml that gives Codex a display name and default prompt.
How do you install it?
Expo's README recommends the plugin for Claude Code and Codex, and the skills CLI for other agents. The Expo skills docs cover the same routes.
Claude Code plugin (all Expo skills plus the Expo MCP server).
claude plugin install expo@claude-plugins-official
You can also run /plugin install expo@claude-plugins-official inside Claude Code. The plugin comes from Anthropic's official plugin marketplace; see Claude Code plugins.
Codex plugin.
codex plugin add expo@openai-curated
Just this skill, with the skills CLI. The command on skills.sh:
npx skills add https://github.com/expo/skills --skill expo-module
Installed with the skills CLI, it lands in .claude/skills/expo-module/ for Claude Code, or ~/.claude/skills/expo-module/ with -g, the standard Claude Code skill locations. Codex and Cursor read the same SKILL.md format; see Codex skills and Cursor skills. To update it later, the README's single-skill update command takes the skill name: npx skills@latest update expo-module.
How do you use it?
Describe the native capability you need and where it should live. The skill fills in the scaffolding choices.
Example prompts (suggestions, not quotes from the repo):
Create a local Expo module that reads the device's battery temperature on iOS and Android and exposes it as an async function.Wrap this Android SDK in an Expo module so I can call it from TypeScript. Scaffold it first, then implement.Turn this local module into a standalone package I can publish to npm, with an example app.Add web support to our existing Expo module without copying native folders by hand.Write a config plugin that adds a camera usage description to Info.plist and a permission to AndroidManifest.xml.
Expo's Modules API overview and Module API reference are the source of truth the skill builds on; the README says Expo docs, Expo CLI and EAS CLI "remain the source of truth".
Tips and limits
From the SKILL.md, its references and skills.sh, not from testing:
- You still need native toolchains. Building and running a module needs the iOS and Android build tools that native code always needs. The skill covers how to write the module, not your machine setup.
- Pair it with expo-dev-client. Expo's skills list local Expo modules among the cases that need a custom build instead of Expo Go. The Expo skill (expo-dev-client) covers that step.
- Not for API 2.0 macro migrations. Moving a Swift module from the definition DSL to the Expo Modules API 2.0 macros (
@ExpoModule,@JS,@Event) is handled byexpo-migrate-module, which is in the separateexpo-experimentsplugin. - Extra frontmatter field. The SKILL.md includes a
versionfield, which is not one of the six fields (name,description,license,compatibility,metadata,allowed-tools) the Claude Code skills docs list for claude.ai skill uploads. The docs say an upload with any other field fails with an error, so remove that line before uploading it there. - Feedback command. The skill tells the agent it can send feedback to Expo with
npx --yes @expo/agent-cli@latest feedback, only when it has something specific to report, and to file a brief--category evalsreport if an agent repeatedly fails at an Expo task. Watch for it if you don't want anything sent. - Audits. On 24 October 2026, skills.sh showed Pass from Gen Agent Trust Hub, Socket and Snyk, all three audits dated 22 October 2026. Snyk rated it low risk with "No issues detected."
- License. MIT, stated in the SKILL.md frontmatter and in the LICENSE files at the repo root and in
plugins/expo. Copy and change it, keeping the copyright notice.
Save it in your Kipt library
In Kipt, open Skills and paste the skill's GitHub folder link into the import box; it reads the SKILL.md, the six references/ files and agents/openai.yaml. Paste the repo link instead and Kipt shows a list of Expo skills to pick from, so you can add expo-dev-client in the same pass. Your library stays in a private GitHub repo you own and installs into Claude Code or Codex with one command:
npx skills add https://github.com/<you>/<repo>.git --all -g
Kipt is not affiliated with Expo.
Similar skills
- Expo skill (expo-dev-client): Expo's most installed skill, for the development builds a native module needs.
- Expo brownfield skill: Expo's skill for adding React Native to an existing native iOS or Android app.
- Expo UI skill: native SwiftUI and Jetpack Compose components through
@expo/ui, often enough without writing a module. - SwiftUI expert skill: SwiftUI guidance for the iOS side of a native view.
- React Native skill: Vercel's React Native and Expo rules for the JavaScript side.