Remote Simulators
Remote Simulators are in early access. Access is switched on per customer while we learn how people use it. Email sales@contrast.dev and we will turn it on for your account.
A remote simulator runs your React Native app on our servers and lets you watch and drive the authoritative instance from anywhere. You hand Peach a Metro JavaScript bundle and it opens a browser-hosted iOS simulator. There is no Mac in the loop, no Xcode, and no local simulator process.
Launch one
The command prints and opens the simulator viewer.
The CLI has no default endpoint: set PEACH_BOX_ENDPOINT or pass --endpoint.
How it actually works
peach ios --remote produces a self-contained artifact, splits it into bounded
parts, and creates a hosted session. Its control plane keeps the files,
revisions, identity, and lifecycle in Durable Objects and R2. A
Cloudflare Browser Run page joins the parts, boots the app in Peach’s headless CPU
renderer, and remains the one authoritative simulator.
The hosted page exposes that simulator through Remote Viewing. Viewer browsers receive scene commits and compose them locally, while input travels back to the same hosted instance. Browser Run does not expose WebGPU, so the hosted renderer uses the CPU tier.
What you give it
- +A JavaScript bundle. One local
.jsfile or one HTTPS URL. HTTP URLs are refused. Hermes bytecode is refused, so supply the JavaScript bundle produced before Hermes compilation. - +Your assets. Peach finds Metro’s compiled asset directory on its own and embeds the declared scales into the artifact. See bundles and assets below.
- +Nothing else. No Xcode project, no native build, no provisioning profile.
Production bundles built through withPeach(config)
from peachsim/metro carry exact module identity. A plain unannotated Metro
production bundle also works; Peach infers its module identity from the published
fingerprint registry.
Bundles and assets
Peach locates the compiled asset directory Metro wrote, rather than asking you to name it. It reads the asset graph out of your bundle first, then checks the handful of places Metro actually writes to and picks the directory that resolves the most declared asset scales. The directory it chose is printed when the simulator starts.
If an image is declared by the bundle but missing from every candidate directory, Peach embeds a magenta checker in its place at every declared scale, and prints one warning naming each substituted asset and every directory it searched. The descriptor keeps Metro’s own width and height, which is what React Native lays an image out from, so the stand-in changes the pixels without moving your layout. A missing image will not stop a session from starting, and you will always be told it happened.
Fonts, video, and audio still refuse, because there is no stand-in a viewer would read as missing.
Peach never recompresses your images. Embedded bytes are the bytes you built.
Remote viewing
Remote Viewing opens the running simulator in a browser and paints the authoritative hosted instance with the viewer’s local Peach compositor. A person and an agent therefore see the same app state. Pointer, scrolling, keyboard, text editing, and the agent cursor travel over the same leased connection.
The viewer is private to members of the account running the simulator and uses a short-lived display grant without exposing the command credential. The first connected viewer currently receives the input lease.
Remote Viewing is Peach’s simulator-only experience. Cloudflare Live View is a separate vendor feature that exposes a complete Browser Run tab and is used to debug hosted pages.
Session lifecycle and cost
Remote simulator time costs $0.005 per minute while running. Server-side builds cost $0.005 per minute of bundling. Build minutes prepare your app; simulator minutes run it.
peach remote close ends the active session and stops the simulator charge.
Closing its viewer tab does not stop the hosted session. See
Remote simulator pricing for rates and account limits.
What it can and cannot do
The remote simulator supports:
- +Remote Viewing with live pointer, scrolling, keyboard, and text input
- +people and agents driving the same authoritative simulator
- +hot reload from edits to its hosted files
- +a private local-copy mode with the Peach inspector
- +stable member URLs that survive Browser Run generation replacement
The hosted renderer uses the CPU tier. Access and account limits remain part of the early-access program.
Next
- +Remote simulator pricing explains session costs and account limits.
- +CLI reference lists the remote launch and close commands.