Chapter 1: Why Expo and what you can build
Expo is React Native’s officially recommended framework. That sentence would have surprised people five years ago - Expo was the “easy mode” sandbox you outgrew on the way to a real project. It is no longer that thing. In 2026, Expo is the production path: a managed build service, a curated set of native libraries, over-the-air updates, file-based routing, and a native module API that lets you write Swift and Kotlin without leaving your JavaScript project.
This handbook is the complete pipeline from
npx create-expo-app to an app live on both stores with
widgets, in-app purchases, push notifications, and a CI/CD pipeline that
builds while you sleep. If you have shipped a React app and want your
next product on the App Store, you are in the right place.
Learning objectives
After this chapter you will be able to:
- Explain where Expo fits in the React Native ecosystem and why it became the recommended starting point
- Distinguish between Expo Go, development builds, and EAS Build - and when to use each
- Assess whether Expo is the right choice for a given product idea
- Understand what SDK 57 ships with and what new problems it solves
- Scan the full handbook chapter map and know what each section covers
Why this matters
Most Expo content stops at the demo. You build a thing in Expo Go, it works on your phone, and the tutorial ends. You are left with a folder of code and no path to TestFlight, to payments, to widgets on the home screen, to an update you can ship without a two-day app review.
The gap between “my app runs on my device” and “my app takes payments and updates itself” is real, it is documented nowhere end to end, and it costs builders weeks of scattered documentation and Stack Overflow searches to close. This handbook closes it in one place.
What Expo is (and what it stopped being)
Expo is an open-source framework built on React Native. It provides three things that raw React Native does not:
A managed build service (EAS). You run
eas build, Expo compiles your app on cloud infrastructure - Linux VMs for Android, Mac mini hosts for iOS - and returns a store-ready binary. No local Xcode or Android Studio required for release builds.A curated set of native libraries. Camera, notifications, haptics, secure storage, maps, audio, video, and two dozen more. All tested together, versioned together as an SDK release, and guaranteed compatible. When you use Expo’s libraries, you skip the dependency hell that raw React Native projects accumulate.
A native module system (Expo Modules API). When you need custom native code, you write it in Swift and Kotlin using Expo’s DSL. No Objective-C, no Java, no bridging headers. The Modules API uses JSI - JavaScript Interface - the same high-performance C++ layer that React Native’s New Architecture uses.
The mental model shift: Expo is not a starter kit you graduate from. It is the framework you build on, with optional escape hatches when you need them.
The framework React Native picked
In late 2024, the React Native documentation began directing
newcomers to Expo. The reactnative.dev getting-started page
now says: start with Expo. This was not a corporate acquisition - Expo
and the React Native core team are separate organizations. It was a
recognition that the managed workflow solves real problems that most
developers hit within weeks of starting a bare React Native project.
What changed? Three things:
EAS Build replaced the need for local Xcode. Before EAS, Expo apps could only be published through Expo’s legacy build service, which was slow and limited. EAS gives you cloud builds on real macOS and Linux infrastructure with configurable profiles.
Development builds replaced Expo Go as the standard. Expo Go is a sandbox app with a fixed set of native modules. Development builds are your app binary with your custom native code included, connecting to your local Metro server. You get the fast refresh cycle of Expo Go with the full native surface of a custom build.
Config plugins made native configuration programmable. Instead of editing Xcode project files and Android manifests by hand, you write a JavaScript function that mutates them. The generated files stay out of version control. The plugin is the source of truth.
As of SDK 57 (June 2026), Expo ships with React Native 0.86, React 19.2.3, Node.js 22.13 minimum, iOS 16.4+ target, and Android 7+ target. The release cadence is roughly three SDKs per year, tracking React Native’s own release schedule.
What you can ship
Expo powers real, revenue-generating products. The fitness app you use to track workouts. The content app where you read articles offline. The commerce app where you buy concert tickets. The productivity tool with home screen widgets and Live Activities.
Some of these are built by solo developers. Some by small teams. All of them share one codebase across iOS and Android.
The question is not “can Expo handle a real app.” The question is whether your app’s specific needs match what Expo makes straightforward vs. what it makes harder. Here is the honest assessment:
Expo works well when your app:
- Has standard UI (navigation, forms, lists, media playback)
- Uses platform features that Expo wraps (camera, location, haptics, notifications)
- Needs in-app purchases (RevenueCat + StoreKit 2)
- Wants home screen widgets and Live Activities (new in SDK 57 via expo-widgets)
- Ships over-the-air updates without app review
- Has a server-side component that handles business logic
Expo is not the right choice when your app:
- Requires raw Bluetooth or BLE peripheral mode (the expo-bluetooth package is emerging but limited)
- Needs advanced AR features tied to ARKit-specific APIs beyond basic 3D rendering
- Demands heavy native UI customization that fights the managed workflow at every turn
- Must integrate deeply with platform-specific frameworks that have no Expo module or community package
For 80 percent of the apps solo developers and small teams build, Expo is the right starting point. For the 20 percent that need more, you can eject to bare React Native at any point - but most builders who think they are in the 20 percent discover they are actually in the 80 percent once they understand what Expo can do.
SDK 57: what is new
SDK 57 (released June 30, 2026) is a small, focused release - primarily the React Native 0.86 bump, which itself was a “no breaking changes” release. But it builds on the larger SDK 55 and 56 releases that introduced features now central to the production pipeline:
| Feature | Introduced | What it does |
|---|---|---|
| expo-widgets | SDK 55 | iOS home screen widgets and Live Activities from JS/TS |
| expo/ui Jetpack Compose | SDK 56 | Native Android UI components via Material Design 3 |
| EAS Workflows | 2025 | YAML CI/CD pipelines that build, submit, and update |
| Expo MCP server | 2026 | AI coding assistant integration (Cursor, Claude Code) |
| Edge-to-edge Android | SDK 57 | System bars and navigation insets handled natively |
The headline: you can now build iOS widgets and Live Activities without writing Swift. You write JSX with expo/ui’s SwiftUI components, and Expo’s native layer compiles them to real SwiftUI views. The same pattern - write once, render natively - applies to Android via Jetpack Compose.
Expo Go vs. development builds: the distinction that matters
New Expo users typically start with Expo Go: download the app from the store, scan the QR code from your terminal, and your project appears on your phone. This is the right first step. It works for learning, prototyping, and testing Expo’s built-in modules.
Expo Go ships with a fixed set of native libraries - camera, maps, notifications, SecureStore, and others. Any third-party library with native code that is not in Expo Go’s bundle - RevenueCat, Firebase, custom widgets, Bluetooth, native payment SDKs - will not work.
Development builds are the answer. You create a custom build of your
app that includes all your native dependencies. The
expo-dev-client library adds a launcher UI that connects to
your local Metro server, giving you the same fast-refresh cycle as Expo
Go with the full native surface of a custom build.
The workflow shift:
Expo Go: npx expo start → scan QR → app runs in Expo Go
Development build: npx expo install expo-dev-client → eas build --profile development → install on device → npx expo start → app connects
The extra step (building the dev client) costs about 15 minutes the first time and pays for itself the first time you need a library Expo Go does not include. Every chapter after Chapter 2 assumes you are using a development build.
The handbook stack
This handbook targets one stack and explains it deeply:
| Layer | Choice |
|---|---|
| Framework | Expo SDK 57 + React Native 0.86 |
| Language | TypeScript (strict mode) |
| Routing | Expo Router (file-based, typed routes) |
| Client state | Zustand |
| Server state | TanStack Query |
| Local storage | MMKV (via expo-modules-core) |
| Payments | RevenueCat + StoreKit 2 / Google Play Billing |
| Builds | EAS Build (cloud) |
| CI/CD | EAS Workflows |
| Updates | EAS Update (OTA) |
| Monitoring | Sentry |
| Analytics | PostHog |
You do not need to know all of these tools before starting. Each is introduced in its relevant chapter with setup instructions and a worked example. By the end, you will have configured every one of them in your own project.
The chapter map
Thirteen chapters, roughly 30 to 45 minutes per chapter:
| Chapter | Focus | What changes by the end |
|---|---|---|
| 1 | Orientation and ecosystem | You understand where Expo fits and what you can ship |
| 2 | Environment setup | A working development build running on your device |
| 3 | Architecture and structure | A production-grade project scaffold you understand line by line |
| 4 | Navigation | Multi-screen app with deep linking and typed routes |
| 5 | Styling and theming | A design system with dark mode and platform-native components |
| 6 | Data and state | Offline-ready data layer with caching, persistence, and sync |
| 7 | Native modules | A custom native feature written in Swift and Kotlin |
| 8 | iOS widgets | Home screen widgets and Live Activities from JSX |
| 9 | In-app purchases | Working purchase flow with ReceiptCat, server validation |
| 10 | Push notifications | Notification delivery across foreground, background, and killed states |
| 11 | Build, sign, TestFlight | Signed store binaries on TestFlight and Play Internal Testing |
| 12 | Store submission | An app submitted to both stores, ready for review |
| 13 | Production operations | CI/CD pipeline, OTA updates, crash reporting, go-live checklist |
Chapters 1 and 2 are your first session. Set up the environment, verify everything works, and build the mental model for what follows. The rest of the handbook is sequential - each chapter builds on the one before it.
Key takeaways
- Expo is React Native’s recommended framework. It is a production path, not a starter kit you outgrow.
- Development builds replace Expo Go for production development. They include your custom native code and give you the same fast-refresh cycle.
- SDK 57 ships with React Native 0.86, React 19.2.3, and the now-mature expo-widgets and expo/ui packages.
- Most apps that solo developers and small teams build fit comfortably inside Expo’s managed workflow. The 20 percent that do not can eject to bare React Native at any point.
- This handbook covers the full pipeline: setup, architecture, navigation, styling, data, native modules, widgets, payments, push notifications, build/signing, store submission, and production CI/CD.
Common pitfalls
- Treating Expo Go as the production development environment. It works for the first hour of learning. The moment you add a library with native code, switch to a development build. Delaying the switch means debugging environment issues when you should be building features.
- Overestimating how “native” your needs are. Builders coming from native iOS/Android backgrounds often assume Expo cannot handle their app. Test the assumption: try building a prototype with the specific native feature you think you need. You might find a config plugin or community package already handles it.
- Underestimating the Apple Developer Program setup. The technical part (Xcode, simulators, certificates) takes an afternoon. The bureaucratic part (Apple Developer enrollment, agreement signing, banking/tax forms) can take days. Start it early.
Further reading
- Expo documentation: https://docs.expo.dev
- React Native getting started (recommends Expo): https://reactnative.dev/docs/getting-started
- SDK 57 changelog: https://expo.dev/changelog/sdk-57
- Development builds guide: https://docs.expo.dev/develop/development-builds/introduction/
- Expo Go to dev build migration: https://docs.expo.dev/develop/development-builds/expo-go-to-dev-build/
Checkpoint exercise
Open https://expo.dev and browse the documentation. Find the SDK 57 reference page. Note three packages you did not know Expo offered. Check their API surfaces - are they relevant to an app you want to build? Write down one product idea that could ship using Expo, and note which native feature (camera, payments, notifications, widgets) would be the hardest part.