ALMOST

A weekend of work, and real gaps remain.

In-app onboarding: tours, tooltips, checklists and announcements placed over your product and published without a deployment.

Promptfree, for everyone, and the only version there is
Build the in-app onboarding I actually need instead of Appcues.

Be clear about the trade: **you are giving up the no-code editor**. A developer will add each tour. If that is unacceptable, keep paying — that constraint is the entire product.

STACK
- Node 20+ with Fastify serving a small script
- SQLite through better-sqlite3, WAL mode
- Vanilla JS on the page, no framework, no dependency on yours
- Caddy in front

THE DATA MODEL
- flows: id, name, kind, steps_json, targeting_json, frequency_json, is_live, version
- step_views: id, flow_id, step_index, person_hash, at, action — seen, advanced, dismissed, completed
- person_state: person_hash, flow_id, status, last_seen_at, times_shown
- Versioned flows, so a change does not rewrite the history of the old one

THE SCRIPT ON THE PAGE
- One request on load returning the flows this person qualifies for, with everything needed to render, so there is no second round trip
- Anchored tooltip, modal, slideout, checklist, banner. That is the whole vocabulary
- **Anchoring is the thing that breaks.** Prefer an explicit data attribute your own code adds; fall back to a structural path; if the element is not there after a short wait, skip the step and record why. Never point at nothing
- Re-anchor on scroll and resize with a ResizeObserver, and keep the tooltip inside the viewport
- Nothing blocks the page: if the script fails, the application is unaffected

TARGETING AND FREQUENCY, WHICH IS WHERE THIS BECOMES ANNOYING
- Rules on plan, signup date, role, a feature flag, and whether an event has happened
- **A global cap: one flow per person per session, and never two at once.** Two tours firing together is the failure everybody ships once and every user notices
- Dismissed means dismissed, permanently, per flow
- A snooze rather than only a close, because 'not now' is the honest answer most of the time

MEASURING IT
- Step-by-step completion per flow, so the step people leave at is obvious
- **The number that matters is not completion, it is whether the people who saw it did the thing afterwards.** Record the target action and compare with people who did not see the flow
- An easy off switch per flow, reachable without a deployment even if authoring needs one

RESPECT
- prefers-reduced-motion honoured, keyboard reachable, escape closes, focus trapped in a modal and returned afterwards. An onboarding overlay that traps a keyboard user is an accessibility failure in the most visible place in your product

WHAT MATTERS MOST
The frequency cap and the skip-if-missing rule. One stops the product feeling hostile; the other stops a frontend change turning every tour into a broken arrow.

What you lose

  • A product manager building a tour without touching the codebase
  • A visual selector picker that works against the live application
  • Targeting and frequency rules already thought through
  • Analytics on each step, so a tour that loses people is visible

If you would rather not build

  • PostHog, which has surveys and simple messages built in
  • A dismissible banner in your own codebase, which covers most announcements

The escape hatch

open source · no votes, no paid placement

Shepherd

$0

Guided product tours with anchored steps, in the browser.

shepherd-pro/shepherdfree · open source

Driver.js

$0

Tiny highlight-and-tour library, no dependencies.

kamranahmedse/driver.jsfree · open source

Why this verdict

our own opinion · changed only by a person

46/100

Verdict kinda at 46: rendering and targeting are a weekend, the no-code editor is not. Worth building when a developer is available and the tours are few.

History

tracked since 14 Aug 2026 · nothing is ever overwritten

Interest · last 30 days

Nothing recorded yet. This chart fills in once the page has visitors, votes or prompt copies — it will not draw a flat line to look busy.

Questions about Appcues

answered from the record above

Is Appcues free?

No — the plan we track is $300 a month. Start plan from around $300/month billed annually, priced by monthly active users.

Can you replace Appcues by building your own?

ALMOST. A weekend of work, and real gaps remain. Replacement score 46 out of 100, build time a weekend. Read what you lose before you decide.

How much does Appcues cost?

$300 a month on Start — $3,600 a year. Recorded 14 Aug 2026.

What do you lose by replacing Appcues?

A product manager building a tour without touching the codebase; A visual selector picker that works against the live application; Targeting and frequency rules already thought through; Analytics on each step, so a tour that loses people is visible. If any of those carry weight for you, keep paying.

Is there an open-source alternative to Appcues?

Yes: Shepherd, Driver.js. The prompt on this page is for when you want it your way instead.

Related entries

same category first, most replaced first

All 36 in Analytics

Not sending yet

Every week, something stops being worth paying for.

New verdicts, prices that moved, entries added. One email a week. Unsubscribe in one click. Nothing is being sent yet — your address is kept here, and the first issue is the first thing it is used for.

free forever · no tracking pixel · stored here, never passed to anyone

Esc