Cairn maps your app's user flows — automatically.
Connect a repo and Cairn reads your routes, components, and code to surface every critical user journey. No manual test planning, always in sync with your code.
From source code to a living map of journeys.
Cairn reads your repository the way a new engineer would — following routes and components — and surfaces the real flows your users take.
/login·2 files of evidence/checkout·4 files of evidence/settings·3 files of evidence/dashboard·2 files of evidenceYou can't test what you haven't mapped.
Every end-to-end testing effort starts with the same unglamorous question: what are we actually testing?Teams answer it in a planning doc, a spreadsheet, or someone's head — and that answer goes stale the moment the next feature ships.
The journeys that matter — sign-in, checkout, account settings, onboarding — live implicitly in your routes and components, but nobody maintains an explicit, current list of them. New pages launch with zero coverage because no one remembered to add a test. Old specs linger over flows that no longer exist.
The result is coverage you can't trust: a green suite that quietly tests the wrong things while a broken checkout ships to production. The map of what to test has to come from the code itself, and it has to stay current — which is exactly what flow mapping does.
Mapping, in four steps.
No recordings, no test plan, no config file — the map is generated from your source and kept in sync automatically.
Connect the repository
Install the Cairn GitHub App on a repo. It reads your source directly — there's no test code to write, nothing to record, and no configuration file to maintain.
Read the structure
Cairn parses your framework's routing and reads your page and component source, collecting the code evidence — the specific routes and source files — behind every part of the app.
Discover the flows
From that evidence Cairn identifies the real user journeys and groups them by category — Auth, Commerce, Account — each tied to the concrete routes and files it touches, with a priority you can adjust.
Stay in sync
On every merge to your tracked branch, Cairn re-maps what changed, surfaces newly added pages as new flows, and retires flows whose pages are gone — so the map never drifts from your code.
Grounded in your code, not a guess.
Every flow Cairn proposes can be traced back to the source it came from — so you can trust the map and edit it with confidence.
Code evidence, not vibes
Each flow records the exact routes and source files it was derived from, so you can see why Cairn believes a journey exists.
Framework-aware
Cairn understands file-based routing across Next.js, Remix, SvelteKit, Astro and more — resolving flows to real URLs instead of guessing.
Always current
Because the map regenerates on every merge, it tracks your product. Flows are added, updated, and obsoleted automatically as code changes.
Because the map is the foundation everything else builds on, getting it right compounds: the flows Cairn discovers become the tests it writes, the runs it schedules, and the issues it files when something breaks. A map that mirrors your real product means coverage that mirrors your real risk.
Frequently asked questions
Cairn installs as a GitHub App and reads your repository directly — routes, page and component files, and the code evidence that ties them together. It identifies the real journeys a user takes through your product (sign-in, checkout, settings, onboarding) and groups them by category, rather than relying on you to record clicks or write a test plan.
No. There is nothing to record and no config file to maintain. You connect the repo and Cairn produces the map from the source. You can review, rename, prioritize, or remove flows, but the starting point is generated for you.
Cairn understands file-based routing for modern web frameworks — Next.js (App and Pages router), Remix, SvelteKit, Astro, and more — and falls back to component and link analysis for others. It resolves each flow to the concrete routes and source files it touches.
Yes. On every merge to your tracked branch, Cairn diffs what changed, re-maps the affected areas, and surfaces newly added pages as new flows. The map never silently drifts from your code — that is the whole point.
Recorders capture one specific path a human happened to click, frozen in time, and break the moment a selector changes. Cairn derives flows from the code itself, so it covers journeys nobody remembered to record and updates them when the underlying pages change.
Yes. Every discovered flow is editable — you can prioritize the ones that matter, archive ones you don't care about, and adjust the steps. Cairn proposes the map; you stay in control of it.
Cairn reads the repository through the GitHub App permissions you grant. It uses your routes, components, and code evidence to build the map; you can scope which repositories it sees and revoke access at any time.
When a merge removes or replaces a page, Cairn detects that the flow's underlying routes are gone and marks the flow obsolete instead of leaving a test that points at a 404 — keeping the suite honest.
Explore more of Cairn
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.