Your tests already prove it works. Now show everyone.

Midstream reads the scenes you mark in your E2E tests and makes each one live and shareable — the running app, not a screenshot.

Automatically, on every pull request. No CI plumbing, no preview deploys, no manual coordination.

From a test to a live scene, in three moves

No CI plumbing, no preview deploys, no manual coordination. Midstream lives inside the workflow you already have.

Step 01

Mark a scene.

Add one function call to any E2E test. The line is a no-op locally — it only activates in CI and when Midstream deploys your app.

Step 02

Open a pull request.

Your existing CI runs. Midstream captures the browser state at every scene — DOM, cookies, storage, network — and posts a comment with links.

Step 03

Click. Land. Click around.

Reviewers click a link and land where the test left off. The whole app is live, and everyone gets their own instance to explore.

The linee2e/quote.spec.ts
39await page.goto('/quote/NW-4469');
40await page.click('[data-test=get-rates]');
41+await midstreamScene(page, 'rates-loaded');
42await expect(rates).toHaveCount(3);

Land where the test left off

Other preview tools hand you a fresh app and leave the setup to you. A scene hands it over seeded, signed in, mid-flow.

Midstream captures the entire browser state at your scene — DOM, cookies, local storage, network — and seeds the viewer’s browser with it. This isn’t about saving five minutes of clicking. It’s about removing the friction that quietly stopped you from checking at all, so review actually happens.

Where review already happens

Midstream comments on every pull request with a link for each scene. Reviewers don’t switch apps, and nobody asks for a recording.

github.com/northwind/logistics/pull/482
Mmidstreambotcommented 4 minutes ago

Three scenes changed on this branch. Each link opens a running instance of your app at that moment.

quote-flow / rates-loadedOpen ↗
checkout / coupon-appliedOpen ↗
billing / seat-addedOpen ↗
  • Scene links inline with the diff — no context switch.
  • Changed scenes are flagged, so reviewers know exactly what to look at.
  • Each reviewer gets their own instance to explore safely.

One link your whole team can use

The same scene works for everyone who touches the release — no clone, no build, no login.

Engineers

Review the experience, not just the diff.

Stop approving changes you can’t actually see. Click the scene and land in the running app right where the change lives — logged in, with the right data.

AI agents

Trust, then verify.

You can’t read every line an agent writes, and you shouldn’t have to. Each pull request comes with scenes you can click through in seconds, so you catch UX slop before it merges.

Product & design

Everyone sees it before it ships.

The people who define the work are usually the last to see it running. Hand them a link — no branch, no build, no login — and they weigh in while the pull request is still open.

QA

Repro in one click.

Every scene is a reproducible state. Land in the exact flow, with the exact data, and probe edge cases without rebuilding the setup by hand.

Execs

See it, don’t read about it.

Skip the status update. Click the scene and see what’s actually shipping this week — the real product, not a screenshot in a deck.

Nothing you don’t already have

Midstream is intentionally boring at the integration layer. We’re not asking you to adopt a new test runner, a new CI, or a new deploy pipeline.

E2E tests

Existing or new. If you have any end-to-end coverage today, you’re already set.

A GitHub repo

Midstream installs as a GitHub App. Pull request comments, status checks, the works.

A midstream.json

Three keys: install, start, test. We use these to deploy your app.

Nothing else

No Docker config, no infra changes, no new CI steps to maintain.

Stop describing what you built. Hand it over, running.

Start for free ↗

One line of code. No card.