Simulators
Open the Simulator page from the main menu. It appears for mobile apps built with Expo.
Simulators run a development build of your mobile app in a real iOS or Android simulator, right in the browser. The in-browser preview shows your app rendered for the web, so it can’t run native code. A simulator runs the native app, so you can check screens that use the camera, a local database, or other native packages before you publish.
A simulator connects to your app’s running preview. Once it’s built, your edits show up in it the same way they do in the in-browser preview. You only build it again when your app’s native code or configuration changes. See When to build again.
You need edit access to the app to see the Simulator page and start simulator builds.
Choosing how to preview a mobile app
Section titled “Choosing how to preview a mobile app”There are three ways to see a mobile app while you build. Most edits only need the first one.
| Preview | Where | Runs native code | Use it for |
|---|---|---|---|
| In-browser preview | The Preview Panel | No | Layout, styling, navigation, and app logic. It updates as you edit, on every plan. |
| Draftbit Preview app | Your own phone, by scanning the QR code from the Live Preview button in the top bar | Only the native libraries built into the app | Trying your app in your hand. It doesn’t require the Pro plan. |
| Simulators | The Simulator page | Yes, including the native packages your app adds | Screens that need native packages the other two can’t run, and checking your app on iOS and Android before you publish. |
The Draftbit Preview app runs your code with its own fixed set of native libraries. If a screen needs a native package that isn’t in that set, the screen won’t load in the Preview app. Build a simulator to test it.
Building a simulator
Section titled “Building a simulator”Each platform has two simulators, one for each version of your app:
- Saved runs the version from your last save.
- Unsaved runs your working build, including changes you haven’t saved yet.
You can start builds from three places:
- Top bar: click the
Simulators button, then choose Build iOS Simulators or Build Android Simulators. This builds both the saved and unsaved versions for that platform. Once both exist, the button reads Update iOS Simulators or Update Android Simulators. - Simulator page: two build cards sit in the upper-right corner for the selected platform, one for Saved and one for Unsaved. Click a card’s rebuild button to build only that version.
- Publishing page: the Simulators tab has the same Build iOS Simulators and Build Android Simulators buttons, plus the full history of your simulator builds under In Progress and Recent Simulator Builds.
Building one platform doesn’t rebuild the other. A build can take a few minutes. You can keep working while it runs.
Build card status
Section titled “Build card status”Each build card shows when that simulator was last built successfully, such as Built Oct 12, 2026, or Never built if it hasn’t been built yet. While a build runs or after it ends, the card also shows its latest attempt:
| Status | Meaning |
|---|---|
| Starting | Draftbit is starting the build. |
| Queued | The build is waiting to start. |
| Building | The build is running. |
| Latest rebuild failed | The last build didn’t finish. The card still shows the date of the last successful build. |
| Latest rebuild cancelled | The last build was cancelled. |
You can only run one build of each version at a time. If you start another while one is running, Draftbit asks you to wait for it to finish. When you build the saved and unsaved versions together and only one of them starts, the error says which one failed. The other build keeps going, and you can retry the failed one from its build card.
Using the simulator
Section titled “Using the simulator”The bar above the simulator has these controls:
| Control | Description |
|---|---|
| iOS / Android | Switch platforms. Each platform has its own builds. |
| Saved / Unsaved | Switch between the saved and working versions of your app. Simulators don’t have a side-by-side view; use Comparing Builds in the Preview Panel for that. |
| Device | Choose an iPhone or iPad for iOS, or a Pixel or Nexus phone for Android. iOS starts on iPhone 16 Pro and Android on Pixel 8 Pro. |
| Restart preview server | Restart the preview server for the version you’re viewing. Try it when the simulator is stuck or after a dependency change. |
| Theme | Switch the simulator between light and dark mode. |
The simulator has its own toolbar for device actions such as rotating it. Pan and zoom the canvas around the simulator, and use Fit Simulator in the controls at the bottom to center it again. On larger screens, the Logs panel opens next to the simulator so you can see your app’s output while you test.
Simulators are for testing your app as a user would. To select an element and edit it, use the Preview Panel.
If the selected simulator hasn’t been built yet, the page shows a message such as No saved iOS simulator yet. Use that version’s build card to create it.
When to build again
Section titled “When to build again”A simulator keeps the native code it was built with. Code changes reach it through the running preview, but native changes only take effect after a new build.
Build new simulators after you:
- add, remove, or upgrade a package that includes native code
- add or change a config plugin
- change native settings in your app configuration, such as permissions, the bundle ID, or the package name
- upgrade your app’s Expo SDK version
You don’t need a new build for:
- new screens, components, and styles
- app logic, navigation, and data changes
- packages written only in JavaScript
If you’re not sure whether a package includes native code, ask the agent. When a screen works in the in-browser preview but fails in the simulator right after you added a package, a new build usually fixes it.
Environment variables
Section titled “Environment variables”Simulators use the values you set for the Development environment. Staging and Production values are for publishing. If a simulator needs a variable, make sure it’s turned on for Development. After you change a value, reload the simulator to pick it up. You only need a new build when the variable is used by your app’s native configuration, such as app.config.js or a config plugin. See Environment Variables.
Imported and connected apps
Section titled “Imported and connected apps”Imported and connected Expo apps can build simulators too. They need the same setup as publishing to the Apple App Store and Google Play Store. On iOS, the simulator may ask you to confirm opening your app each time it starts.
Limits
Section titled “Limits”- Simulators are for mobile apps built with Expo. Web apps, websites, and API backends don’t have a Simulator page.
- Simulators need the Pro plan or higher, and edit access to the app.
- You can’t select or edit elements in the simulator.
- A simulator build is for previewing in Draftbit only. To install your app on your own device, emulator, or simulator, use Testing Builds. To ship it, publish to TestFlight, the App Store, or Google Play.