Expo app integration with React Native Stallion
Learn how to migrate your Expo app from EAS Updates or Expo Updates to React Native Stallion for faster, affordable OTA updates.
Note:
Full Expo support requires minimum React Native Stallion SDK version 2.3.0.
Introduction
Thinking about switching from Expo Updates or EAS Updates? Whether you're looking for more control, better pricing, or faster Over-the-Air (OTA) updates, React Native Stallion is a lightweight and developer-friendly alternative.
This guide shows how to migrate your Expo app to Stallion using the prebuild approach. If you're currently using Expo Updates, you'll find the transition smooth and well worth the benefits.
Step 1: Run Expo Prebuild
First, generate the native iOS and Android folders using Expo's prebuild command:
npx expo prebuild
This will create the ios/
and android/
directories, converting your project into a prebuild-compatible structure—no full eject required.
Step 2: Follow Native Installation Steps
Now that your native folders are generated, follow the native installation guide to install and configure Stallion SDK in both Android and iOS.
Step 3: Add Custom Metro Configuration
Create a metro.config.js
file at the root of your project to define aliases and ensure custom resolution works correctly:
const { getDefaultConfig } = require("@expo/metro-config");
const path = require("path");
const projectRoot = __dirname;
const config = getDefaultConfig(projectRoot);
config.resolver.alias = {
...config.resolver.alias,
"@": path.resolve(projectRoot),
};
module.exports = config;
Step 4: Add Babel Configuration
Create or update the babel.config.js
file:
module.exports = function (api) {
api.cache(true);
return {
presets: ["babel-preset-expo"],
plugins: [
[
"module-resolver",
{
root: ["./"],
alias: {
"@": "./",
},
},
],
],
};
};
Step 5: Install Required Packages
Install the following packages (use latest versions):
npm install --save-dev \
@react-native-community/cli \
@react-native/metro-config \
babel-plugin-module-resolver \
babel-preset-expo
Or with Yarn:
yarn add -D \
@react-native-community/cli \
@react-native/metro-config \
babel-plugin-module-resolver \
babel-preset-expo
Step 6: Publish Your Bundle with Custom Entry File
If you're using Expo Router, your entry file will likely be:
node_modules/expo-router/entry.js
Use the following command to publish your bundle with Stallion:
npx stallion publish-bundle \
--upload-path=nimbus-apps/nimbus-consumer-app/expo \
--platform=ios \
--release-note="Migrated from Expo Updates" \
--entry-file=<your-custom-entry-file>
For example for Expo router apps the entry file should be node_modules/expo-router/entry.js
Step 7: Proceed with Production Setup
Everything else should work as expected from here. You can continue with the production deployment steps outlined in the production usage guide.
Looking for a fast, affordable, and flexible alternative to Expo Updates? Learn why developers are switching to Stallion and how it unlocks better OTA workflows.