expo-web-to-native

Migrate an existing web React app to a native iOS/Android app with Expo.

Updated Sep 11, 2026
One-click install
npx skills add https://github.com/CYRUS-pinto/pi-bot --skill expo-web-to-native-cyrus-pinto
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: expo-web-to-native
Source: https://github.com/CYRUS-pinto/pi-bot/tree/main/.agents/skills/expo-web-to-native
Command: npx skills add https://github.com/CYRUS-pinto/pi-bot --skill expo-web-to-native-cyrus-pinto

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes references (resource) components.

What problem does it solve? Converting a web React app (Next.js, Vite, CRA) to a native mobile app has no transpiler — teams either rewrite from scratch or ship a webview that feels wrong. This Skill provides an ordered, incremental migration playbook that keeps the app shippable at every step. ## Core Features & Use Cases - Strangler-fig migration plan: Assess and bucket every screen (port-as-is, nativize-now, nativize-later, hybrid) into a durable migration-progress.md worklist, then nativize screens one at a time by value. - Day-one DOM shell: Run the entire web UI inside native routes via Expo DOM components so the app ships to TestFlight before anything is nativized. - Web-to-native idiom maps: Reference tables translate DOM elements, CSS, React Router, localStorage, cookies, and browser SDKs (Stripe, Maps, OAuth) to their Expo/React Native equivalents, plus a UX-pattern redesign guide using @expo/ui. - Use Case: You have a Next.js SaaS dashboard and want it on the App Store. The Skill scaffolds an Expo Router shell, wraps every page as a DOM component, then redesigns hot screens with native SwiftUI/Compose components while verifying parity against the running web app. ## Quick Start Use the expo-web-to-native skill to assess my Next.js codebase and create a migration worklist for turning it into a native Expo app.

Frequently Asked Questions about expo-web-to-native

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I convert a Next.js app to a native mobile app?

There is no transpiler — you migrate incrementally with Expo. Scaffold an Expo Router shell mirroring your routes, wrap every screen as a DOM component so the app runs on day one, then redesign screens natively in priority order using @expo/ui and Expo Router.

How to reuse web React code in React Native?

Use Expo DOM components ('use dom') to run existing web UI inside native routes as a temporary shell. For permanent screens, port idioms using the false-friends mapping: div becomes View, onClick becomes onPress, localStorage becomes expo-sqlite, and relative fetches need absolute URLs.

Can I use Stripe in an Expo React Native app?

For physical goods and services, use @stripe/stripe-react-native with PaymentSheet. For digital goods or subscriptions, Apple and Google require in-app purchases via RevenueCat — shipping Stripe.js for digital goods gets the app rejected, so decide this at assessment time.

Does Expo Router work like Next.js routing?

Expo Router is file-based like the Next.js App Router, and route trees map almost 1:1 — [id]/page.tsx becomes [id].tsx. Differences: useLocalSearchParams replaces useSearchParams, router.replace replaces redirect(), and layout routes must be native, never DOM components.

Why does my migrated React Native screen render blank despite a clean build?

A green expo export only proves the screen bundles, not that it renders. Verify by running both apps: capture the web original with agent-browser and the native screen with argent or simctl, then compare content and behavior for the same route.

When should I not migrate a web app to native?

If you have no existing web repo and are building native fresh, skip the migration steps entirely — just use expo-router and the false-friends idiom map. Also keep presentational low-value screens in the DOM webview rather than nativizing everything, since each DOM screen carries a ~2 MB web runtime.