[ Documentation ]
rnx

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, and what-happened report 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

Fast path

curl -fsSL https://rnxsim.com/install.sh | sh

The installer downloads one Bun-compiled rnx executable. The CLI does not require Node.js, npm, or Bun on the machine where it runs.

terminal
rnx open 8081

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.