A preview app for every change.

Give every change a running app on a shareable URL. Review it in a browser, run integration tests against it, or let an agent QA its own work. It's a fresh environment per change instead of one shared staging server.

Give every change a URL to click.

Reading a diff only tells you so much. A preview app lets an agent or a reviewer actually click through the change in a real browser before it ever merges. Every change gets its own ephemeral environment, so nobody waits on a shared staging slot.
On open
  • Someone opens the preview URL
  • The app starts on demand~3s
  • Verify the change in a browser
On idle
  • Traffic stops
  • The app shuts down automatically10m idle
  • Restarts on the next request
my-app-pr-482--acme.us.rwx.run
RWX
App Starting

Your app is starting. This page will refresh automatically.

Usually starts in about 3s.

The same platform your build runs on, serving your app.

Preview apps are just another task in your run. They inherit the same content-based caching, the same compute, and the same configuration your CI/CD workflows and Agent Sandboxes already use.

Powered by your existing config.

No new platform to learn and no bespoke preview infrastructure to maintain. Add an app block to a task and give it a port. The same run definition drives CI/CD, sandboxes, and preview apps.

tasks:
  - key: web
    use: [build]
    app:
      endpoint: my-app-pr-${{ init.pull-request-number }}
      port: 3000
    run: pnpm start

A dev environment per change.

Every change gets its own isolated app instead of taking turns on one shared staging environment, with no per-branch namespaces to hand-roll. Each one is ephemeral, booting in about three seconds when someone opens the URL and cleaning itself up once the change is gone.

my-app-pr-482--acme.us.rwx.run
RWX
App Starting

Your app is starting. This page will refresh automatically.

Usually starts in about 3s.

A friendly URL per pull request.

Each endpoint gets a stable, shareable URL that always reflects the latest build for that branch. Drop it in a PR comment for a reviewer, or hand it to an agent to verify its own work. Canonical URLs stay pinned to a specific build when you need a fixed target.

Friendly URL
my-app-pr-482--acme.us.rwx.run
Always the latest build for this PR
Canonical URL
a1b2c3d4--acme.us.rwx.run
Pinned to one specific build

Real apps with real services.

Your app can depend on a database, a cache, or anything else it needs. Run backing services as background processes inside the app task with ready-checks so the app only comes up once they're available. Spinning up your containers is as easy as docker compose up.

clone2s
buildCached
migrateCached
webRunning
servicesdocker compose upRunning

Ship a preview app in three steps.

Serve a running app from the same run that already builds and tests your code.

Install RWX

Add the CLI and install the RWX skill.

 brew install rwx-cloud/tap/rwx
 rwx skill install

Add an app task

Give a task an app block with an endpoint and a port.

app:
  endpoint: my-app
  port: 3000

Open the URL

Trigger a run and open the app URL. It starts on demand.

 rwx run
 open https://my-app--acme.us.rwx.run