Cairn is going open source soon.Star the repo
Continuous testing

Your suite runs on every merge — and never sleeps.

Cairn runs your generated tests on every merge and on a schedule, against your real app, with video and trace for every run. No CI YAML to wire up.

How it runs

Every change kicks off a run — recorded end to end.

A push to your tracked branch, a merge, or the schedule starts the suite. Cairn runs it against your real app and captures video and trace for every run.

Triggers
Push to main
commit a1b2c3d
After merge
touched flows
Scheduled
every day · 09:00
Manual run
from the dashboard
no CI config required
Push to main· commit a1b2c3drunning
video trace
recorded for every run
The problem

Tests only help if they actually run.

A suite only earns its keep if it runs automatically, on every change, without anyone remembering to trigger it. In practice that's where most testing efforts stall: wiring up CI, maintaining a brittle workflow file, keeping browsers installed on the runner, and babysitting the pipeline when it breaks.

So tests get run by hand, or only before a release, or not at all. Regressions slip through the gap between “we have tests” and “the tests actually ran on this change.”

Cairn closes that gap. It runs your suite on every merge, on a schedule, and on demand — against your real deployed app, with no CI to own.

How it works

Continuous, by default.

No pipeline to build, no runner to maintain — Cairn handles the triggers, the browsers, and the recording.

1

It runs on every meaningful event

Push or merge to your tracked branch, or wait for the daily schedule — Cairn runs the relevant tests automatically. After a merge re-generates affected tests, it runs just those.

2

Against your real app

Tests execute against the environment you configure — production, staging, or a per-branch preview — with the right base URL and credentials, so they exercise the real thing rather than a mock.

3

Every run is recorded

Cairn captures a full video and a Playwright trace for each run — DOM snapshots, network, and console. When something fails you watch exactly what happened, you don't reconstruct it.

4

Live, durable results

The dashboard updates live as a run progresses, and a run you start stays in sync across tab switches and refreshes. Transient blips are retried on a fresh worker before anything is reported.

What you get

Coverage that runs itself.

The point of continuous testing is that you stop thinking about it — and it still catches what matters.

On every change, automatically

Pushes and merges to your tracked branch, a daily schedule, and post-merge runs of just the flows you touched — broad coverage and fast feedback, with zero pipeline to maintain.

Video + trace, every run

A recording and a full Playwright trace for every run, stored and linked — so any failure is replayable down to the network call.

Live and flake-resistant

Runs update live in the dashboard and survive a refresh; timeouts and momentary resource blips are retried automatically so a flake never becomes a false alarm.

Because every run is recorded and every failure is replayable, continuous testing in Cairn isn't just a pass/fail gate — it becomes the evidence trail behind every issue Cairn files when something breaks.

FAQ

Frequently asked questions

On every push or merge to your tracked branch — re-running just the flows the change touched — on a schedule you choose, and on demand from the dashboard.

No. There is no GitHub Actions workflow or CI YAML to write and maintain. Cairn runs the suite for you against your deployed app and reports the results back — running end-to-end tests doesn't require you to own a pipeline.

A full video of the browser and a complete Playwright trace — DOM snapshots, network activity, and console output — for every run. You can watch exactly what happened instead of guessing from a pass/fail line.

Yes. The dashboard updates a run's status and output live as it executes, and it stays in sync even if you switch tabs or refresh the page — the run is tracked by id and resumes where it left off.

Transient failures — element timeouts, a momentary resource blip on the runner — are retried once on a fresh worker before anything is reported. A passing retry means no false alarm and no issue filed.

Whichever you configure — production, a staging URL, or a per-branch preview — so the suite exercises the real app with the right base URL and credentials for that environment.

After a merge, Cairn auto-runs just the flows the change touched, so you get fast feedback on what you shipped. Scheduled sweeps run the full suite for broad regression coverage. You get both speed and breadth.

Put your tests on autopilot.

Connect a repo and watch Cairn map your flows, write the tests, and run them on every PR — in minutes.