Revyl Documentation

Frameworks

Frameworks

Pick your framework for build and dev-loop setup, and see which frameworks hot reload.

Pick your framework to see the exact commands for building and uploading your app.

The dev loop below covers iOS and Android. Web apps run from a bundle or a deployed preview instead; see the Web guide. Web is in alpha. To add it to your organization, email support@revyl.ai.

Hot Reload vs Rebuild

FrameworkDev Loop ModelWhen to Rebuild
ExpoHot reload (JS/TS changes are live)Only when native dependencies change
React Native (bare)Hot reload (JS/TS changes are live)Only when native dependencies change
FlutterRebuild on every changeEvery code change (Dart compiles into the binary)
Swift/iOSRebuild on every changeEvery code change (binary is the app)
Android NativeRebuild on every changeEvery code change (binary is the app)

For Expo and React Native, the uploaded build is a "dev client shell" -- your JS/TS code is served live from your local Metro server via a Revyl relay. For Flutter, Swift, and Android, the binary is the app.

Platform Build Requirements

Every framework's default debug build satisfies Revyl's artifact requirements out of the box. If you're shipping a custom configuration — narrowed abiFilters, release builds, .ipa archives — see Build Artifact Requirements for the full rules and trade-offs.

Hot reload and rebuild configuration

Revyl best-guesses the hot reload and rebuild-loop configuration when running revyl init. If you need more advanced configuration, see the guides below specific to each framework:

FrameworkHot ReloadRebuild Dev LoopProvider Name
ExpoFully supported[r] for native changesexpo
React Native (bare)Fully supported[r] for native changesreact-native
Flutter—[r] rebuild + reinstall—
Swift/iOS—[r] rebuild + reinstallswift
Android Native—[r] rebuild + reinstallandroid
Kotlin Multiplatform—[r] rebuild + reinstall—
Bazel—[r] rebuild + reinstall—

Bazel and Kotlin Multiplatform are detected as build-tool or layout signals, not as supported build.framework values. Configure a mixed native workspace as separate platform-oriented Revyl projects rather than one ambiguous build.

Dev Loop Framework Troubleshooting

SymptomCauseFix
"Detected Swift/iOS instead of Expo"Detection ran outside the Expo app root or expo is absent from its local package.jsonRun revyl init --detect from the app directory; if needed, edit build.framework and the generated profile, then validate
"Detected Android instead of Expo"Detection ran outside the Expo app root or the native directory won an ambiguous matchRun revyl init --detect from the app directory; if needed, edit build.framework and the generated profile, then validate
"No providers detected"Missing package.json, wrong directory, or no framework indicatorscd to the app directory; verify package.json has expo or react-native
"App scheme empty"The Expo app config does not resolve a custom schemeConfigure expo.scheme in the app, rebuild the dev client, and use the new build
"No runnable development recipe"The project config has no usable profile/platform recipeEdit the generated named profile and run revyl config validate
"Port 8081 is already in use"Another Metro instance runninglsof -ti:8081 | xargs kill or --port 8082
"No application is registered to handle this URL scheme"The installed dev client does not register the scheme recorded with the buildCorrect the Expo app's scheme/generated-scheme settings, rebuild, and use the new build
No URL scheme in the appApp only uses universal linksAdd "scheme": "myapp-dev" to app.json, rebuild dev client
No eligible iOS or Android recipeThe selected named profile lacks that platform recipeEdit the profile in .revyl/config.yaml, then run revyl config validate
Deep link fails with LSApplicationWorkspaceErrorDomain error 115The URL scheme in the deep link doesn't match any installed appSame as "No application is registered" above
App closes briefly after tapping "Open" in the dialogNormal: dev client is reloading to connect to Metro via tunnelWait for it to reopen; if it doesn't, check Metro output for JS errors
"Open in [App Name]?" confirmation dialogiOS system prompt for URL scheme handoffsTap "Open" to proceed; this is expected behavior

On this page