Your app can explain itself.
Splain adds guided, code-anchored walkthroughs to your Laravel/Filament app — in-app help that can't silently go out of date. It's a self-hosted plugin for Laravel (the PHP web framework) and its Filament admin panels (the popular PHP admin-panel framework), and it spotlights your real UI — through modals, dropdowns, and across pages. Every step is anchored to your code, a command simulates every guide in your test suite before anything ships, and a model you configure drafts the first pass. The guidance your users see runs entirely inside your app.
Free & open (Apache-2.0): the walkthrough player, the guards that keep guides from silently rotting, and uncapped AI generation — everything a solo developer needs. Pro (for teams): the visual editor and the team tools (review, assignment, and completion reports). The specifics are named — and defined — further down.
That tour launches from the small floating dot already live in the corner of this very page — Splain is running on the page you're reading. On a phone? The tour and docs work great here — the live demo is a desktop admin panel, so bookmark it for the big screen.
Same guide. Your clothes.
Splain's launcher and popovers inherit your app's own colors, fonts, and spacing (its CSS variables) — so the walkthrough looks native in every product it lands in; same guide, your clothes. Flip the theme, then play the walkthrough: what re-skins below is the real Splain player that ships in the product, not a mockup, reading the page's CSS variables exactly as it does inside a Filament panel.
Customers
| Name | Plan | Status |
|---|---|---|
| Sable & Co. | Growth | Active |
| Marigold Labs | Starter | Active |
| Fernwood Group | Enterprise | Trial |
No mock popovers, no video: this page loads Splain's shipped free-tier bundle, and the demo app is just HTML wearing three sets of design tokens. The dot in the corner is real too — it tours this very page. Want a real app? Lamplight Supply Co. runs on Laravel Cloud with its onboarding built in — spotlight tours, a branching walkthrough, an onboarding checklist, and Privacy Mode (which masks real records on screen while you record a tutorial — a presentation aid, not a security guarantee).
Every capability below is shipped and demo-able.
Spotlights the real UI
Guides advance when users actually complete the step — not when they click "next" on faith. A failed validation doesn't fool it; a decision branches it.
Follows across pages
Finish a page's steps, click the highlighted nav link, and the guide resumes on arrival. Hand-offs expire quietly instead of ambushing anyone later.
Can't silently rot
splain:check simulates playback on every page before anything
ships — unreachable steps, dead ends, and broken hand-offs fail loudly. Drift is
when your code changes so a guide no longer matches the real UI; the drift gate
fails your CI — the automated checks that run before you merge code — when code
deletes an anchor (how a step points at a specific on-page element) that a guide
depends on.
Drafted by your model
splain:generate reads your code and drafts guides through an
endpoint you configure: you point Splain at your own AI provider — your API key,
your servers, your call — so nothing phones home. Splain ships no key and no
default endpoint. Drafts land unpublished, flagged for review.
Humans sign off before publishing
The Studio — Splain's built-in visual, point-and-click editor for creating and
editing guides inside your app — flags every step the generator wasn't sure about;
you resolve them by clicking the real element on the real page. Publishing requires
zero errors, zero open flags, and a named sign-off that the guide reflects how the
work is really done. The Studio and this attested-publish step ship in
splain/pro (a separate, proprietary package); even on the free tier,
only guides you mark as published are shown to your users.
Onboarding you can see
Tracks — ordered learning paths you assign to users — give new users a checklist with a clear next step; server-side progress (off by default) stores a pointer to your user — never a copy of personal data — and powers an honest completion report.
Watch it catch the rot — guides that quietly stopped matching your UI.
A guide anchors to data-splain="product-name". Someone renames that
field in a refactor and doesn't notice the walkthrough now points at nothing. In a
SaaS overlay, users find out. Here, the build does — this is the
real, unedited output of splain:check --drift after exactly that change:
$ php artisan splain:check --drift
ERROR add-a-product v1 (published): anchor [data-splain="product-name"]
no longer exists in the code (rotted).
INFO help-a-customer v1 (published): OK.
INFO meet-your-customers v1 (published): OK.
INFO welcome-to-lamplight v1 (published): OK.
$ echo $?
1 # non-zero — the CI job fails, the PR goes red, the guide never ships broken
Captured live from the
Lamplight demo's
own source. The --drift gate is free-tier — wire it into any CI in a few lines
(recipe).
Splain says its own limits out loud.
In the product, in the docs, and here. Honesty is the differentiator, so it gets a component:
The whole install, honestly.
composer require splain/splain # release pending — see the note below
php artisan migrate # migrations load automatically — nothing to publish
php artisan filament:assets
# then, on any Filament panel:
# ->plugin(SplainPlugin::make())
php artisan splain:doctor # verifies the install end to end
The Packagist release is pending license finalization — today Splain installs via a private repository for early-access hosts. Ask about early access — it's one GitHub issue: tell us about your app and stack.
The Studio, seen.
The pro tier isn't a roadmap slide. Here's the real publish loop — a flagged guide, an edit on the live page, and the check that won't let it ship until a human signs off — recorded from our own automated test environment:
Planned pricing.
The boundary is real (it's enforced in the package's architecture); the prices are being decided. The posture: everything an individual developer needs is free — teams pay for the organizational layer.
Free
for every host, forever
- The playback engine & launcher
splain:check+ the CI drift gate- Privacy Mode
- Guides-as-code (export / import)
- Tracks & the learner checklist
- Server-side progress recording
- AI generation —
splain:generate, bring-your-own model, uncapped splain:make— deterministic scaffoldsplain:suggest— coverage discoverysplain:doctor+ introspection
Pro
for teams — planned
- The Studio: visual design mode on the live page
- Review inbox & attested publishing sign-off
- Visual track builder & assignment
- Onboarding completion report
Proven where guidance is hardest.
Splain has been a standalone package from day one — and it earns its claims against the makers' own production staffing app: real workflows, real privacy stakes, real users who need the walkthrough to be right. Every feature on this page shipped only after playing end-to-end there. The longer story →
We installed Splain on our own production Filament admin and wrote guides for its core workflows. One guide documented that new records should show a “Prospect” status badge. On review, the live screen showed it blank — and the guide was right: a framework null-state quirk had been silently hiding that status on thousands of records. The guide didn’t just describe the app; it caught the app drifting from what it was built to do. Fixed the same afternoon.
— from using Splain on our own product