▲ Cairn

Introduction

Cairn is a state-machine-driven workflow engine for onboarding, product adoption, and user guidance — not another tooltip library.

Cairn

The workflow engine for onboarding, product adoption, and user guidance.

Cairn /kɛrn/ — the stacked stones that mark a trail. You place the markers; your users find the way.

Cairn is not another tooltip or product-tour library. It's a state-machine-driven workflow engine for guiding users through your product: multi-page flows, branching paths, live context, and a first-class event stream for analytics.

The engine is framework-agnostic. React is the first official binding; Vue and Svelte adapters, plus a visual flow builder, are on the roadmap.

Try it

This is a real Cairn flow running right here — press Start, walk the steps, then toggle Team plan and restart to watch the flow branch.

Billing
status: idle

Why not just a tour library?

Tooltip libraries model guidance as a linear list of steps. Real onboarding isn't linear — it branches on who the user is, what they've done, and where they are in your app. Cairn models guidance as a state machine.

Tour libraries (Joyride, Shepherd, Intro.js)Cairn
Mental modelA linear list of tooltipsA state machine of waypoints
Branching✓ context-driven next()
Multi-page flowspainful✓ engine survives navigation
Resume across reloads✓ persistence adapters
Analyticsbolt-on✓ typed event stream, built in
Renderercoupled to the DOMdecoupled core + adapters
TypeScriptpartialTypeScript-first, fully typed

Architecture in one sentence

Cairn separates the engine (a headless state machine in cairn-core) from the renderer (cairn-react and future adapters). The engine owns the logic and never touches the DOM; the renderer observes the engine and draws whatever UI you want.

Next steps

On this page