rnx
rnx lets you develop, test, and share React Native iOS and Android apps without a Mac, Xcode, Android Studio, or a native build step in the inner loop.
It works much like the official iOS and Android simulators, except it is a browser tab
instead of a virtualized device: you run rnx open against the Metro,
Expo, or One server you already have, and your app is on screen in seconds.
An optional desktop app gives you an authentic simulator experience all the way
down to the menu items, with pixel-perfect physical sizing.
Built for agents
rnx was designed from the start to be driven by AI coding agents, and it is the fastest surface an agent can drive a React Native app through:
- +10x faster than native simulator tooling or Chrome MCP. No simulator boot, no native build; a test suite that needs minutes of Xcode time elsewhere runs in seconds on your laptop or an ordinary Linux CI box.
- +A browser tab’s worth of memory, not a virtual machine’s. rnx runs anywhere, including low-resource machines and cheap CI runners, and does not stream a VM to do it.
- +React Native-aware inspection.
describe,find, andwhat-happenedreport screens, keyboards, alerts, and responder state, not a raw DOM dump, and every write auto-settles so agents read post-animation state without sleep loops. - +Multi-agent isolation built in. Per-sim claim leases let several agents, a CI run, and a human share one machine without stealing each other’s taps.
See Agents for setup and the agent CLI workflow.
Get started
Installation
Install the CLI, runtime, and background daemon.
Quick Start
Open your app and upload a shareable test run.
Your First Test
Run a Maestro YAML or Detox test.
Fast path
The installer downloads one Bun-compiled rnx executable. The CLI does not
require Node.js, npm, or Bun on the machine where it runs.
Start your app normally, then point rnx at the dev server port. No per-app
rnx install is needed, and no iOS or Android native build is needed; Metro, Expo, or
One serving the bundle is enough. Run rnx open from the app project root
so it can discover custom fonts, the splash screen, and other app configuration.
The installer registers the lightweight local bridge as a background daemon so
later commands can reuse it. The simulator is available at
http://localhost:7668/ by default, and the daemon registration is not needed
in CI.
Use cases
We think rnx can drive a good chunk of your development today, but it’ll take some more time to get to a completely “native simulator free” world for large apps.
We’ve invested heavily in conformance testing, with pixel-diffing tests against real iOS; see the Compatibility page for the breakdown by library.
That said, outside of development, there’s a host of interesting use cases for a browser-based React Native simulator:
- +Fast, cheap shareable preview links: Host live links to your actual interactive app in CI/CD, or record a quick demo to share with teammates or clients.
- +Automatic PR previews: Plug in the Contrast GitHub App and it will learn your repo and generate custom flows with a PR preview and recording for every PR based on the specific git diff.
- +App store screenshots: Pose your app, add text, and choose some colors in Screenshot Mode to get your App Store screens ready in minutes. One plan renders every required canvas size and locale, and pushes the finished frames straight to App Store Connect.
- +3D demos for social media: 3D Mode comes with many settings, pre-scripted movement, and because it runs your real app, you can pose and record gorgeous demos fast.
How it works
We’ve re-implemented React Native’s iOS and Android surfaces in Skia/CanvasKit, the engine Chrome and Flutter pioneered, based on WebAssembly and HTML canvas. There is no VM and no streamed device: your real Metro bundle runs in a worker, lays out through Yoga, and paints through Skia on the GPU, the same pipeline shape as native React Native.
So, does it work?
rnx simulates iOS, Android, React Native, and many React Native libraries. The natural concern is how accurate it is, and how well it runs.
We set out early to build compatibility through automation. We run pixel-diff testing even across animations for a huge amount of React Native, and all the most popular libraries.
We also set out to get the biggest OSS React Native projects in the world “pixel-perfect”, starting with Bluesky, Uniswap, Expensify, Artsy, and Joplin. Today, they all work well, and render nearly every screen within a percent of native.
This means you can post on Bluesky or trade tokens on Uniswap in your browser, with the real native apps, which we show in the home page demo.
But
Rebuilding iOS, Android, React Native, and all the popular React Native native libraries to a level where we’re confident most apps will work without a problem will still take more time.
What we are confident about is the viability. rnx is an idea that wasn’t possible before capable coding agents. With a great harness and CLI, it is. We’ve built the hardest parts, and it’s a matter of iteration.
rnx and Contrast
rnx is its own thing. Install it and you can drive any React Native app with no other setup. It also powers the native preview inside Contrast, a browser-native full-stack app builder we’re building alongside it. See the native preview guide for how the two products fit together.