Skip to main content
Cloud development lets your local app run on a cloud iOS simulator or Android emulator. You keep editing code in your normal workspace while Revyl handles the device, install, stream, and network path. Use it when a teammate, cloud agent, or worktree agent needs to inspect the app without setting up Xcode, Android Studio, Simulator, or Emulator locally.

Agent Quick Start

Copy this into your coding agent from the root of your mobile app repo:
Agent prompt
Use Revyl to run this app on a cloud device.

Goal: start a development loop for this app and verify the current local changes.

Steps:
- Install Revyl if needed: `curl -fsSL https://revyl.com/install.sh | sh`.
- Run `revyl init` from the mobile app directory.
- Run `revyl dev`.
- Verify the app launched on the cloud device.
- Report the session URL, what you verified, and any blocker.

How It Works

The loop has three pieces:
  1. A development-capable build installed on the cloud device.
  2. A local dev server or build command running in your workspace.
  3. A Revyl session that connects the device to your local app through the CLI.
For Expo and React Native, most JavaScript and TypeScript changes hot reload through Metro. For other stacks, Revyl uses a rebuild-and-reinstall path when a change needs a new binary.

What You Need

  • A Revyl account with access to your workspace.
  • The Revyl CLI installed and authenticated. See Revyl CLI.
  • A Revyl app with an uploaded development build.
  • A project directory that Revyl can run locally.
For iOS, use a simulator .app or zipped .app, not an .ipa. For Android, use a debuggable APK with x86_64 support. See Artifact Requirements.

1. Upload a Development Build

The uploaded build is the shell Revyl installs on the cloud device. It must be able to load local code or be rebuilt quickly for local changes.
StackWhat to Upload
ExpoA development client build. For iOS, use an EAS profile with developmentClient: true and ios.simulator: true. For Android, use a development APK.
React NativeA debug simulator .app for iOS or debug APK for Android. Metro provides the JavaScript bundle.
FlutterA debug simulator .app or debug APK. Revyl rebuilds and reinstalls when code changes.
Native iOSA Debug build for the iphonesimulator SDK.
Native AndroidA debuggable APK, usually from ./gradlew assembleDebug.
You can upload from the dashboard in Apps, or from the CLI:
revyl init
revyl build upload
For framework-specific build commands, use the build guides.

2. Initialize Your Project

Run this from the app directory, not the monorepo root unless the app itself lives there:
revyl init
revyl init creates .revyl/config.yaml and detects the local provider Revyl should use. If detection picks the native project inside an Expo or React Native app, force the provider:
revyl init --provider expo
revyl init --provider react-native
Expo projects also need a custom URL scheme in the development client so Revyl can open the app on the remote simulator and point it at Metro. See the CLI dev setup guide for monorepos, custom ports, schemes, and provider config.

3. Start the Loop

You can start from the terminal or from a live session in the UI.

Start From the Terminal

revyl dev
Revyl starts the local dev server, creates a relay, installs your development build, and opens the cloud device session. Use platform or build flags when needed:
revyl dev --platform ios
revyl dev --platform android
revyl dev --build-version-id <id>

Start From the UI, Then Attach

If you already launched a session from the dashboard, attach your local dev loop to it:
revyl dev attach active --context checkout
revyl dev --context checkout
This is useful when a teammate or agent already has the right device state open and you want to connect local code to that session instead of starting over.

4. Iterate

For Expo and React Native, save a JavaScript or TypeScript file and wait for Metro to update the cloud device. For other stacks, some code changes need a new build before they appear on the cloud device. Use the rebuild flow in revyl dev when that happens. Use the browser stream for visual checks, or drive the device from another terminal:
revyl device screenshot --out before.png
revyl device tap --target "Sign In button"
revyl device screenshot --out after.png
Work in small observe-act-verify loops: look at the current screen, take one action, then confirm the device did what you expected.

5. Handle Login Early

If the app needs authentication, decide how agents should reach a useful state before they start debugging. Good options are:
  • A stable test account with seeded data.
  • A staging-only demo mode.
  • A test-only auth bypass deep link.
For the deep link pattern, see Auth Bypass Deep Links.

Troubleshooting

SymptomWhat to Check
iOS build will not installConfirm it is a simulator .app, not an .ipa.
Android build will not installConfirm the APK is debuggable and includes x86_64.
Expo opens but does not load local codeCheck the URL scheme, Metro output, and dev client profile.
Revyl detects the wrong frameworkRun from the app directory or re-run revyl init --provider expo / react-native.
Native changes do not appearRebuild and reinstall from revyl dev, then relaunch the session if needed.

CLI Dev Loop Guide

Full command reference for contexts, attach, tests, and rebuilds.

Auth Bypass Deep Links

Start sessions from authenticated app states.