Expo Migrate Module: a skill that moves a Swift Expo module to the 2.0 macro API
Expo's experimental skill makes Claude migrate a Swift Expo module from the 1.0 definition DSL to the 2.0 macro API without changing its JavaScript API.
- Installs
- 21.1K
- on skills.sh
- Stars
- 4K
- on GitHub
- Files
- 4
- besides SKILL.md
- Updated
- Nov 2026
- last repo commit
The skill makes Claude take inventory of every exported function, property, event, record and shared object, check what the installed expo-modules-core supports, then migrate one group at a time. Items 2.0 cannot cover yet stay in the 1.0 DSL (mixed mode) or get reverted, and Claude asks you which.
It triggers when you convert or incrementally adopt @ExpoModule, @JS, @Event, @SharedObject or @Record. It is not for new modules, general Expo SDK upgrades, or Kotlin and Android migrations.
It needs expo 58.0.21 or newer, and SKILL.md calls the macros experimental and undocumented. It tells Claude to say so before a large migration and to prefer mixed mode over converting a module wholesale.
Good for
- Expo module authors with an existing Swift module on the 1.0 DSL
- Teams who want to adopt @ExpoModule, @JS, @Event, @SharedObject or @Record one group at a time
- Maintainers who must keep the JS and TypeScript contract unchanged
Install expo-migrate-module
Claude Code
- 1
Copy this prompt.
Install the expo-migrate-module skill in Claude Code. Run this command: npx skills add https://github.com/expo/skills --skill expo-migrate-module Then check that it loaded and tell me how to use it.
- 2
Paste it into Claude Code. It shows the change and asks before running it.
Requires Node.js.
From its listing on skills.sh. Source.
What's in the skill
When it loads
Migrate an existing Apple/Swift Expo native module from the Expo Modules API 1.0 definition DSL to the 2.0 macro API (sometimes called v2) while preserving its JavaScript and TypeScript contract. Use when converting or incrementally adopting @ExpoModule, @JS, @Event, @SharedObject, or @Record in an existing module. Do not use for creating a new module, general Expo SDK upgrades, or Android/Kotlin migrations.
Sections in SKILL.md
- Prerequisite
- References
- Workflow
- 1. Establish the contract
- 2. Verify the available 2.0 surface
- 3. Apply the migration
- When a 2.0 equivalent is missing or a group fails
- 4. Verify behavior
- Handoff
- Submitting Feedback
Key facts
- Author
- Expo
- License
- MIT
- Repository
- expo/skills
- Installs on skills.sh
- 21,108 as of 2026-11-02
- GitHub stars
- 4,005 as of 2026-11-02
- Last repo commit
- 2026-11-01
- Files in the skill folder
- 5 files including SKILL.md (3 reference guides and 1 agents/openai.yaml)
- skills.sh audits
- Gen Agent Trust Hub pass, Socket pass, Snyk pass
What it includes
Lists every JS-visible name, signature and event
Claude inspects the repo and worktree, then inventories functions, properties, events, records, shared objects, lifecycle hooks and views before editing.
Read ·
1. Establish the contractClassifies each item as Migrate, Keep in DSL or Blocked
Claude checks the macro declarations and core hooks in the installed expo-modules-core instead of assuming they exist.
Read ·
2. Verify the 2.0 surfaceMoves one group at a time
Order: module naming, functions, properties and constants, events, shared objects, then records. Views and a few lifecycle hooks stay on the 1.0 DSL.
Write ·
3. Apply the migrationAsks you to co-exist or revert
Offers mixed mode or reverting that group, and can open a tracking issue on expo/expo with gh issue create after you confirm.
Network ·
When a 2.0 equivalent is missingRuns swift:check, builds, tests, launches the example app
Includes npx --no-install expo-modules swift:check ios, native and JS tests, and checks that autolinking still links every module class.
Runs code ·
4. Verify behaviorReports what moved, what stayed and what was not verified
Lists migrated members, members left on the DSL with reasons, compatibility choices and the commands run.
Handoff
From the official docs
Permissions
Medium risk
Claude rewrites your Swift module and runs your builds and tests, and it may offer to file a public GitHub issue. Work on a clean branch and read any issue text before you approve it.
What it can do
- Read your data
- Create and change things
- Delete things
- Read-only mode
Watch out for
Rewrites your Swift module source
Claude edits module files group by group. Use a clean git branch so you can review or revert.
Can file a public issue on expo/expo
SKILL.md tells Claude to confirm with you before running gh issue create. Read the text first, since it will contain details from your module.
Runs your build and test tooling
The verify step runs swift:check, builds, native and JS tests and may reinstall dependencies and run the CocoaPods workflow. These run code from your project.
Includes a feedback command that reports to Expo
SKILL.md ends with an `npx --yes @expo/agent-cli@latest feedback` command, to be used only for specific, actionable feedback.
Technical details
| Talks to | GitHub issues on expo/expo, only after you confirm |
|---|---|
| Scopes |
|
Questions
What does the Expo Migrate Module skill do?
It makes Claude convert an existing Swift Expo module from the Modules API 1.0 definition DSL to the 2.0 macro API while keeping the JavaScript and TypeScript contract the same. It works one group at a time and keeps anything 2.0 cannot cover yet in the old DSL.
Which Expo version do I need?
expo 58.0.21 or newer, including in the example app. SKILL.md says earlier 58.0.x releases lack tuple conversion and the swift:check and swift:expand commands, and SDK 57 is not a target. Claude is told to stop and ask you to upgrade first if your version is older.
How do I install it in Claude Code, the Claude app or Codex?
Use the install box above. The README says experimental skills ship in the separate expo-experiments plugin, or can be installed one by one with the skills CLI.
Does it migrate Kotlin or Android code?
No. It leaves Kotlin on the 1.0 DSL unless you expand the task, and SKILL.md lists Android and Kotlin migrations as out of scope.
Will it open GitHub issues?
Only after you confirm. When a member has no 2.0 equivalent, SKILL.md has Claude offer to open a tracking issue on expo/expo with gh issue create, and tells it not to post without approval.
Is it safe to install?
It bundles no scripts. Claude edits your Swift module files and runs checks such as swift:check and your builds and tests. Work on a branch and review the diff, because the macros it targets are experimental.
Information
updated Nov 2, 2026
- Repository
- expo/skills
- Folder
plugins/expo-experiments/skills/expo-migrate-module
Sources
Docs, issue trackers and discussions this page is built from.
Show all 3Hide
- SKILL.md · github.com
- expo/skills README · github.com
- expo-experiments README · github.com