Your tests already prove it works. Now show everyone.

Add one line to your Playwright tests and turn every important moment into a live, shareable demo. No infrastructure changes, no new CI steps.

Checkpoints: one line of code

You already write E2E tests that navigate to important states in your app. A checkpoint is a single line that says “this moment matters — make it demoable.” One function call in your test, and that moment becomes a live, shareable demo.

// your-app.spec.ts
test('new booking flow', async ({ page }) => {
  await page.goto('/bookings/new');
  await page.fill('[name="title"]', 'Team standup');
  await page.click('text=Next');

  await midstreamCheckpoint(page, 'booking-form');
});

Seeded state, not just a running app

Other tools give you a running app and say “go find what changed.” Midstream captures the full browser state at your checkpoint — cookies, local storage, DOM, everything — and seeds the viewer’s browser with it.

It’s not about saving 5 minutes of navigation. It’s about removing the friction that stopped you from checking at all. Like a home gym — you’re not buying equipment to save a 10-minute drive. You’re buying it because that drive stopped you almost every time.

Before/after: navigating from scratch vs seeded state

The workflow

  1. 01Add midstreamCheckpoint() in your Playwright test
  2. 02Push your PR
  3. 03Midstream runs your tests and captures state at each checkpoint
  4. 04PR gets a comment with demo links and screenshots
  5. 05Anyone clicks a link and lands in the live app at that exact moment
  6. 06Demo machines suspend after idle, spin back up in seconds

What you need

  • Playwright tests (existing or new)
  • A GitHub repo
  • A midstream.json with your install, start, and test commands
  • That’s it. No Docker config, no infrastructure changes, no new CI steps.

Built for how you work

Three lines of code.
Infinite demos.