PaidExtension
Chrome · Edge · Firefox · Manifest V3

The $0/month stack for paid browser extensions.

A complete, production-tested launch kit: MV3 extension with offline-verifiable licensing, a Cloudflare Worker that turns Paddle payments into signed license keys, and a static checkout site. No servers. No database bill. No sales-tax filings.

One-time purchase · lifetime updates · unlimited products · 14-day refund

# from clone to a rebranded, fully tested paid extension
git clone <your copy> my-extension && cd my-extension
npm run init          # name, company, prices, seats, trial length
npm run install:all
npm run check         # lint, types, 120+ tests, builds — all green
$0monthly infrastructure until you have customers
0tax returns you file — Paddle is the merchant of record
~1 hourfrom clone to sandbox purchase, following the setup guide
3browsers from one codebase: Chrome, Edge, Firefox

Three things no other extension kit gives you together

Every other boilerplate is "connect Stripe, add a Firebase project, host a backend". You are then on the hook for hosting bills, uptime and VAT.

Cost

$0/month, honestly

GitHub Pages hosts the site. Cloudflare Workers + KV run licensing on the free tier (100k requests/day — tens of thousands of users). Paddle only takes a cut of sales. Your fixed cost is a domain.

Tax

Merchant of record built in

Paddle sells to your customer, collects VAT/GST/sales tax worldwide, issues invoices and handles refunds and chargebacks. The kit turns Paddle webhooks into license keys — you never touch a tax form.

Reliability

Pro works when your server doesn't

License keys are ES256-signed JWTs verified inside the extension with an embedded public key. No "ask the server if the user is Pro" — and no one-star reviews when a backend hiccups.

What's inside

One private repository, five packages, one config file. Everything reads from paidextension.config.json.

extension/

TypeScript MV3 extension

  • Popup, settings, upgrade flow, sample content script
  • licensing/ module: offline key verification, device seats, trials, checkout polling, offline grace
  • Config-driven feature gates — isEnabled('export')
  • Firefox manifest variant, Edge-ready packaging
  • Vitest suite, ESLint, strict TypeScript, webpack
worker/

Cloudflare Worker licensing backend

  • Verifies Paddle webhooks, issues signed keys for monthly, yearly and lifetime plans
  • Seat registry in KV, short-lived install-bound entitlement tokens
  • Revokes on refund, chargeback and cancellation
  • Abuse-limited free trials, per-route rate limits
  • License-key emails via Resend, idempotent on retries
  • 65 tests, no framework, deploys with wrangler deploy
site/

Static checkout & customer site

  • Landing, Paddle overlay checkout, license-key page, device management
  • Privacy, terms, support pages with refund policy
  • Strict per-page CSP, HTML validation, link and CSP checkers
  • Deploys to GitHub Pages on push
scripts/

Rebrand, validate, generate

  • npm run init rewrites the entire repo for your product from a few answers
  • validate:config keeps manifests, Worker and site consistent
  • generate:listing drafts store copy, permission justifications and a privacy policy
.agents/skills/

Agent-native

  • Step-by-step skills for Devin, Claude Code, Cursor and Codex: setup, publish, test
  • AGENTS.md with the invariants an agent must not break
  • Hand the repo to your agent: "rename to X, set prices, deploy, submit"
.github/workflows/

CI and releases

  • CI for every package on every PR
  • Tag-triggered release: version check, production build, store zips, GitHub release
  • Pages deploy for the site, Wrangler deploy for the Worker

How licensing works

Keys are portable, offline-verifiable and revocable — the three things that are hard to get at once.

Extension

1. Checkout

POST /checkout {plan} creates a Paddle transaction; the extension opens your checkout page with the overlay.

Paddle → Worker

2. Webhook

transaction.completed is signature-checked, the Worker signs an ES256 key {sub, plan, exp} and emails it.

Extension

3. Activate

Polls GET /license?txn=, then POST /activate claims a seat and gets an install-bound entitlement token.

Offline

4. Verify

Key and token verify locally with the embedded public key. Tokens renew every 3 days, so refunds reach the device within days.

Plans

Monthly and yearly subscriptions key off the Paddle subscription id; lifetime purchases key off the transaction id. Unknown prices are rejected, never silently mapped to a plan.

Seats

A key activates on up to maxSeats browsers. Users release devices from the extension settings or the devices page, using the key itself as the credential.

Trials

POST /trial issues a time-boxed key per visitor id with per-IP limits. Set trialDays: 0 to turn trials off entirely.

Extracted from a real product, not a demo

PaidExtension is the exact stack behind Manila Mail Manager, a paid Gmail extension live on the Chrome Web Store — Paddle checkout, Cloudflare licensing, seat limits, trials and refunds have all been exercised by paying customers. The kit is the generic version, with lifetime plans, Edge/Firefox packaging and the agent skills added.

How it compares

Against the popular extension boilerplates and the hosted "payments SDK" services.

PaidExtension Typical boilerplate
(ExtensionFast, extFast, TurboStarter…)
Hosted payment SDKs
(ExtensionPay, crxpay…)
Price$99 once$99–$499 once3–5% of every sale, forever
Monthly infra at 0 customers$0Firebase / Supabase / hosting tiers$0
Sales tax / VAT handledYes — Paddle MoRNo — Stripe, you fileNo — Stripe, you file
Works when backend is downYes — offline ES256 keysNoNo
Device seat limitsYes, self-serve releaseNoNo
Lifetime + subscription plansBothUsually subscriptionBoth
User accounts requiredNo — key-basedGoogle / email authNo
Refund / chargeback revocationAutomaticDIYYes
Own the code, no vendorYesYesNo — hosted dependency
AI-agent setup/publish/test skillsYesNoNo
Firefox + Edge packagingYesSometimesChrome-first

Competitor details as published on their sites at the time of writing; check current terms before deciding.

Pricing

Pay once. Build as many extensions as you like.

Launch price

PaidExtension Kit

$149$99

one-time, per developer

  • Private GitHub repo access, instantly
  • Unlimited end products, commercial use
  • Lifetime updates
  • Setup, licensing and publishing guides
  • Agent skills: setup, publish, test
  • Support via GitHub Issues and email
Buy the kit

14-day refund if it's not what you expected. Payments handled by Polar (merchant of record); you'll get a proper invoice.

Questions

What exactly do I receive?

Access to a private GitHub repository containing the full source: extension/, worker/, site/, scripts/, docs/, .agents/skills/ and the GitHub Actions workflows. Polar grants the repo access to your GitHub account right after purchase; updates arrive as commits.

Do I need to know Cloudflare or Paddle already?

No. The setup guide (and the setup agent skill) walks through creating the Paddle prices and webhook, deploying the Worker and pointing your domain at GitHub Pages. Budget about an hour for a first run.

Why Paddle rather than Stripe?

Paddle is a merchant of record: it is legally the seller, so it collects and remits sales tax in every jurisdiction and handles invoices, refunds and chargebacks. With Stripe those obligations are yours. For a solo developer selling globally that difference is the whole ballgame.

Is it really $0/month?

Until you outgrow the free tiers, yes: GitHub Pages is free, Cloudflare Workers gives 100,000 requests/day and KV 1,000 writes/day, Resend gives 3,000 emails/month. Paddle charges 5% + 50¢ per sale and nothing otherwise. You pay for a domain (~$12/year).

Can I use React / WXT / Plasmo?

The extension scaffold is plain TypeScript + webpack so there's nothing to fight. The licensing/ module has no UI dependencies and drops into any MV3 project; the Worker and site are independent of the extension framework.

What does the license allow?

One developer, unlimited commercial end products, forever, including all updates. You may not redistribute the kit itself or use it to build a competing kit. Each developer who edits the kit's files needs their own license. Full text on the license page.

How is this "agent-native"?

The repo ships an AGENTS.md plus three skills in .agents/skills/ — setup, publish and test — written as checklists an AI coding agent can execute. They encode the things that usually go wrong: service-worker constraints, CSP rules, Paddle sandbox quirks, store-review requirements.

Refunds?

14 days, no questions asked — email hello@paidextension.dev. We'll revoke repo access and refund through Polar.