Skip to content
extensionstart

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
example.com/article

Signing in with Google…

Upgrade to Premium

Processing payment…

Stripe Checkout → webhook → entitlements

Subscription active

Welcome to Pro! Premium features are unlocked everywhere.

Pro

Run the actual extension to see all features live →

  • 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
Read the auth guide

Google Firebase Supabase Better Auth

example.com/article

Sign in

Using it as a guest so far

Finishing sign-in…

The popup can close. The flow continues.

Alex Chen alex@example.com

Signed in. Guest counters and purchases carried over.

guestgoogle · uid 7f3a…c2
accounts.google.com
Choose an account

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
Read the billing guide

Stripe Polar Paddle

example.com/article

Upgrade to Premium

Monthly $4.99
Lifetime $99
Start 7-Day Free Trial

Opening Stripe checkout…

Subscription active

All features unlocked

Pro

Paywall

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
Read the paywall guide
example.com/article

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)

credits 50 / 50
Pro trial · day 1 of 7

gate.open("paywall")

Keep highlighting with Premium

You used 3 free highlights. Everything else keeps working.

Start free trial

Try Premium free for 7 days

Skippable by default. Core features work without it.

Start free trial

Out of credits

Top up or upgrade for a monthly allowance.

Get more credits

Your Pro trial ended

Keep every feature, or continue on the free plan.

Keep Pro

Export is a Premium feature

This wall appeared because your code asked for it.

Upgrade

paywall({ 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
Read the broadcasts guide
example.com/article

CSV export is live. Try it from the toolbar.

no active announcements written on your server, live everywhere 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
Read the theming guide
example.com/article
A Alex Chen Premium: Active
Account Settings
A Alex Chen Premium: Active
Account Settings

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 started

popup 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
Read the content-scripts guide
blog.example/deep-work
Highlight savedRestored after reload shadow

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
See the tech stack

Hono Firebase Supabase Stripe

your backend · one Hono API /billing/webhook

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
Read the AI-agents guide

Claude Code OpenAI Codex

~/your-extension
  • 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
Read the first-submission runbook

Chrome Web Store

release · CI

$ 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

Setup wizard

  • Brands, wires, and prunes in one command
  • Ship only the modules you use
Learn more

Website and docs templates

  • Landing, privacy, and terms, store-ready
  • A Starlight docs site for your product

Theming

  • Token scales, dark and light
  • One file to rebrand
Learn more

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.

~/acme-notes
$ pnpm create extstart
? Extension name Acme Notes
? Sign-in Google + email
? Billing Subscription, 7-day trial
? Paywall preset after-value
Pruning the modules you skipped
Applying your branding
Running 411 unit tests
$ pnpm create extstart --firebase
Creating the Firebase project
Seeding Stripe products + webhook
doctor: verifying the wiring end to end
$ git tag v1.0.0 && git push --tags
Building Chrome, Firefox, and Edge zips
Auditing the built output for remote code
Staged rollout to the Chrome Web Store

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

claude · ~/acme-notes

> 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
Get the kit

30-day money-back guarantee

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.