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.