Build an extension people pay for
A starter kit for browser extensions that charge money: sign-in that survives the popup closing, Stripe billing verified on the server, and a paywall designed to pass Chrome Web Store review. You write your feature. The rest is done and tested.
- 411 unit tests
- 12 e2e specs
- Chrome · Firefox · Edge
- One-time purchase
Sign in
Create account · Forgot password?
Signing in with Google…
Upgrade to Premium
Processing payment…
Stripe Checkout → webhook → entitlements
Subscription active
Welcome to Pro! Premium features are unlocked everywhere.
Pro- React
- WXT
- TypeScript
- Tailwind CSS
- Astro
- Firebase
- Hono
- Chrome Web Store
- Claude Code
- Codex
Features
What your extension can do
Nine subsystems, prebuilt and tested. Click through; every demo mirrors the real components.
Auth
Sign-in that works inside an extension
The flows web tutorials teach fall apart in an extension popup. These are built for it, on a session that survives restarts.
- Google sign-in
- Email and password
- Guest mode with account linking
- Firebase or Supabase, your choice
- Shared website session with better-auth
- Logout everywhere
Google Firebase Supabase Better Auth
Sign in
Using it as a guest so far
Finishing sign-in…
The popup can close. The flow continues.
Signed in. Guest counters and purchases carried over.
Payments
Charge for your extension
Checkout, webhooks, and entitlements wired to the provider you pick. Polar and Paddle handle global sales tax for you.
- Stripe, Polar, or Paddle
- Subscriptions, monthly or yearly
- Lifetime one-time purchases
- 7-day trials, no card required
- Credit packs and monthly allowances
- Customer portal built in
Stripe Polar Paddle
Upgrade to Premium
Opening Stripe checkout…
Subscription active
All features unlocked
ProPaywall
Ask for the upgrade at the right moment
Most kits hand you a paid flag and stop. The gate engine decides when to ask, with strategies from real paid products.
- Five presets for the ask moment
- Skippable or hard, you decide
- Cooldowns after “Maybe later”
- Escalation after repeat dismissals
- Sign-in chains into checkout
- Usage counted on the server
0 of 3 free actions · try the button 3rd action reached first open, day 0 · already visible, no pop-up writing with credits… credits exhausted every Pro feature is on trial over · downgrades to free, nothing breaks no automatic walls your code picked this moment dismissed · quiet for 24 h (cooldown)
gate.open("paywall")
Keep highlighting with Premium
You used 3 free highlights. Everything else keeps working.
Start free trialTry Premium free for 7 days
Skippable by default. Core features work without it.
Start free trialOut of credits
Top up or upgrade for a monthly allowance.
Get more creditsYour Pro trial ended
Keep every feature, or continue on the free plan.
Keep ProExport is a Premium feature
This wall appeared because your code asked for it.
Upgradepaywall({ show: "after-value", freeAllowance: { actions: 3 }, dismissible: true }) paywall({ show: "first-run", dismissible: true }) paywall({ show: "metered" }) // wall raises when credits hit 0 paywall({ show: "reverse-trial", reverseTrialDays: 7 }) gate.open("paywall") // fires only where you call it
Announcements
Message every user without an update
Write a message on your server and it appears as a banner in every installed copy. Release notes, incident notices, launch news.
- Banner in popup and side panel
- Per-user dismissal that sticks
- Schedule with from and until dates
- Minimum-version targeting
no active announcements dismissed, stays dismissed per user
Surfaces
Popup, side panel, and welcome tour, prebuilt
The account hub renders in the popup and the side panel; a first-run tour greets new installs.
- Account and settings hub
- Side panel
- First-run welcome tour
- Dark and light themes
- Optional new tab and devtools surfaces
side panel: stays open while you browse
Welcome to Acme Notes
A three-step first-run tour ships ready: pin, sign in, try the feature.
Get startedpopup side panel first-run welcome tour
On-page UI
Put your UI on any website
Two mounting modes, both demoed: shadow UI the host page cannot restyle, and inline elements that belong to the page's own flow.
- Shadow DOM toolkit, styles isolated
- Inline mode for in-page elements
- Survives SPA navigation
- DOM observer, debounced and safe
- Highlighter demo with persistence
Backend
A backend you do not have to build
One API serves billing and usage. Deploy it to Firebase or Supabase with the same routes.
- One Hono API, deployed in minutes
- Firebase or Supabase, one flag
- Entitlements written only by webhooks
- Usage counters for trials and credits
Hono Firebase Supabase Stripe
listening…
✓ stripe signature verified
→ checkout.session.completed
→ customers/7f3a…c2 paid: true
→ claims mirror paid
the client can read this. it can never write it.
Agent-ready
A codebase your coding agent already knows
AGENTS.md carries the architecture map and the MV3 rules, so agents extend the kit instead of guessing at it.
- AGENTS.md, CLAUDE.md, Cursor rules
- Six tested agent recipes
- chrome-devtools MCP preset: agents verify in a live Chrome
- Docs published as llms.txt and plain markdown
Claude Code OpenAI Codex
- AGENTS.md architecture map, MV3 rules, definition of done
- .claude/commands/ 6 tested recipes: add-feature, add-permission…
- .mcp.json agents debug a live Chrome
- apps/extension/
- entrypoints/background/ one module per concern
- components/ account hub, walls, demo feature
- packages/ auth, billing, gate engine, UI kit
- backend/ the deployed API
Publish
Pass review on Chrome, Firefox, and Edge
A tag push builds store-ready zips for three browsers and audits the output for remote code. Runbooks cover each store's review.
- Chrome, Firefox, and Edge builds
- Remote-code audit on every zip
- Permissions matched to the modules you kept
- Store runbooks and a rejection-code guide
- 411 unit tests and 12 e2e specs in CI
Chrome Web Store
$ git tag v1.0.0 && git push --tags
✓ Built chrome-mv3.zip
✓ Audited the output: no remote code
✓ Permissions match module manifests
→ Staged rollout to the Chrome Web Store
$ git tag v1.0.0 && git push --tags
✓ Built firefox-mv2.zip (browser-specific manifest)
✓ web-ext lint: 0 errors
✓ Chromium-only APIs feature-guarded
→ Submitted to addons.mozilla.org
$ git tag v1.0.0 && git push --tags
✓ Built edge-mv3.zip
✓ Audited the output: no remote code
✓ API keys rotated on schedule (CI reminder)
→ Submitted to Microsoft Partner Center
And the rest of it
E2E testing
- 12 Playwright specs against the real build
- Catches dead-background bugs unit tests miss
Website and docs templates
- Landing, privacy, and terms, store-ready
- A Starlight docs site for your product
The repository
The codebase, not a template
Every subsystem you would otherwise build yourself, and the actual repository it lives in: a pnpm + Turborepo monorepo with framework-free core packages, a real backend, and tests at every layer.
-
Stack
WXT + React 19 + TypeScript strict + Tailwind 4, in a pnpm + Turborepo monorepo.
-
Authentication
Google sign-in that works in MV3, on Firebase or Supabase with anonymous-first account linking, or ride your website's better-auth session.
-
Payments
Stripe, Polar, or Paddle behind one billing port; entitlements are webhook-written. Ready-to-seed models: subscription, lifetime, subscription + credits, and prepaid credit packs.
-
Landing page & docs
A rebrandable Astro landing site plus store-ready legal pages, llms.txt, and markdown docs.
-
AI coding agents
AGENTS.md guardrails and a chrome-devtools MCP preset for live-Chrome debugging.
- extensionstart/
- apps/extension/ WXT + React 19 + Tailwind 4 extension app
- entrypoints/background/ modular service worker: auth, billing, gates, broadcasts
- entrypoints/popup/ · sidepanel/ · welcome/ UI surfaces sharing one design system
- entrypoints/content/ shadow-DOM UI: status bar, gate walls, highlighter demo
- entrypoints/offscreen/ Chromium auth fallback (signInWithPopup)
- utils/ typed messaging, shadow-ui mount, settings store, page bridge
- e2e/ 12 Playwright specs against the real built extension
- packages/core-ext/ MV3 lifecycle primitives: stores, alarms, messaging, migrations
- packages/core-auth/ auth strategies: web-auth-flow, offscreen, anonymous linking
- packages/core-billing/ entitlement snapshots + useEntitlement('paid')
- packages/gate/ monetization gate engine + CWS-policy-safe presets
- packages/ui/ Button / Card / Badge / Toast primitives (CVA + Base UI)
- backend/functions/ one Hono app on Cloud Functions: checkout, webhooks, gate events
- tooling/create/ create-extstart setup wizard
- tooling/cli/ module pruner: strip the features you don't need
- docs/ subsystem guides: auth, billing, gates, security, QA
- AGENTS.md AI-agent instructions (Claude Code / Cursor ready)
Workflow
Setup is one command
The wizard brands the extension, wires sign-in and billing, connects Firebase and Stripe, and a tag push ships store-ready builds.
AI agents
Built for AI coding agents
Point an agent at the repo and it works inside the same guardrails you do.
- One AGENTS.md, every agent Architecture map, verified MV3 pitfalls, the definition of done, and tested prompts for the common jobs. CLAUDE.md and the Cursor rules are symlinks to it.
- Agents verify in a live Chrome A preconfigured chrome-devtools MCP server: read the service worker console, screenshot the popup, click through a gate wall.
- Docs agents can fetch The docs site publishes llms.txt and every guide as plain markdown, readable by URL.
Works with Claude Code Codex Cursor
> Add a summarize-page feature behind the paywall
● Reading AGENTS.md: architecture map, MV3 pitfalls
● Scaffolding components/SummarizePage.tsx
● Wiring the gate: gateFeature("summarize-page")
● Verifying in live Chrome via chrome-devtools MCP
$ pnpm typecheck && pnpm lint && pnpm e2e
✓ All green. Ready for review.
Pricing
Pay once. Ship as many extensions as you like.
A one-time purchase, not a subscription. You get the private repository, every future update, and a 30-day money-back guarantee.
ExtensionStart
Launch pricing$99
Launch price · one-time payment
- 1 developer seat private GitHub repository access
- Unlimited personal projects commercial use allowed
- Lifetime updates pay once, every release included
Frequently asked questions
What exactly do I get when I buy?
Access to the private GitHub repository with the full ExtensionStart monorepo: the WXT + React 19 extension app, the core packages (auth, billing, gate engine, MV3 primitives, UI kit), the Stripe billing backend for Firebase Cloud Functions, the create-extstart setup wizard with a module pruner, the complete test suite (411 unit tests and 12 Playwright e2e specs), CI workflows, and the documentation.
Is this a subscription?
No. ExtensionStart is a one-time purchase. You pay once and keep access to the repository. (Your own extension can charge subscriptions: the Stripe billing that ships in the kit supports monthly, yearly, lifetime, and credit-based plans.)
What is the license?
A per-developer commercial license: build and ship as many extensions as you like, closed-source and for profit. What you cannot do is resell, redistribute, or open-source the boilerplate itself as a starter kit. Read it at extensionstart.com/license/.
How long do I get updates?
Updates land in the same repo you bought, and browser-breakage fixes are prioritized. If the product is ever discontinued, the final source stays yours to keep. Details at extensionstart.com/updates/, and the changelog is the public proof of what has shipped.
What is the refund policy?
A 30-day money-back guarantee, no questions asked. If the kit is not what you expected, email support@extensionstart.com within 30 days of purchase and you get a full refund. The full policy is at extensionstart.com/refunds/.
Which browsers are supported?
Chrome and Edge (MV3), plus Firefox: the build produces per-browser bundles, Chromium-only APIs like the side panel and offscreen documents are feature-guarded, and CI lints the Firefox build with web-ext on every commit.
Do I have to use Firebase?
No. Firebase (Auth + Firestore + Cloud Functions) and Supabase (Auth + Postgres with RLS + an Edge Function) are both fully wired: the setup wizard asks which one you want, sets one flag, and prunes the other stack from your clone. Both run the same API routes and the same security model, and both start on a generous free tier. Beyond those two, the billing core is port-based (gateway, entitlement store, claims writer interfaces), so a custom backend is a contained adaptation rather than a rewrite.
Can I use better-auth or my own website's auth?
Yes, in a specific way: the shared-session strategy lets the extension adopt the sign-in session from your website instead of holding its own, with better-auth as the documented reference server (any cookie-session backend with a get-session endpoint fits). Sign in on the site, and the extension follows in near real time; sign out anywhere, signed out everywhere. better-auth runs on your website, not inside the extension's backend: entitlements and billing stay on the Firebase or Supabase side, where webhooks write them.
How does the billing work under the hood?
Stripe Checkout and the customer portal, driven by one Hono API that deploys to Cloud Functions or a Supabase Edge Function. Webhooks write entitlements server-side; the extension reads a storage-backed snapshot and renders state. Clients can never grant themselves paid features. The server is the authority.
Does it work with AI coding agents?
Yes. The repo is built to be worked on by agents: a single AGENTS.md (symlinked as CLAUDE.md and Cursor rules) encodes the architecture map, the MV3 pitfalls, and the definition of done, six tested agent recipes ship in .claude/commands, and a chrome-devtools-mcp preset lets an agent debug a live Chrome.
What if I get stuck?
Start with the docs at extensionstart.com/docs: every subsystem (auth, billing, gates, content scripts, security) has its own guide. For anything else, email support@extensionstart.com.
Sign-in, billing, and store policy are done. Yours is the product on top.
One-time purchase. 30-day money-back guarantee.