PlugWiki

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. 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. 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

  1. Prerequisite
  2. References
  3. Workflow
  4. 1. Establish the contract
  5. 2. Verify the available 2.0 surface
  6. 3. Apply the migration
  7. When a 2.0 equivalent is missing or a group fails
  8. 4. Verify behavior
  9. Handoff
  10. Submitting Feedback

Key facts

Author
Expo
License
MIT
Repository
expo/skills
Installs on skills.sh
21,108 as of 2026-11-02
Last repo commit
2026-11-01

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 contract

  • Classifies 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 surface

  • Moves 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 migration

  • Asks 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 missing

  • Runs 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 behavior

  • Reports 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 toGitHub issues on expo/expo, only after you confirm
Scopes
  • GitHub CLI login, only if you approve filing an issue

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

expo/skillsskills.sh

Sources

Docs, issue trackers and discussions this page is built from.

Show all 3
  1. SKILL.md · github.com
  2. expo/skills README · github.com
  3. expo-experiments README · github.com

Updated Nov 2, 2026.