PaidExtension
Chrome · Edge · Firefox · Manifest V3

The $0/month stack for paid browser extensions.

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

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

Team or building for clients? Agency, $399 one-time →

Step 1 of 5 · Fresh install This is the popup of an extension built with the kit. Start 7-day trial: the Worker signs a 7-day trial key and the extension verifies it with only the public key.

Live demo: real ES256 keys signed and verified in your browser with a keypair generated for this page. Nothing leaves the tab.

Your browser doesn't support WebCrypto, so the live demo is off.

01 · Why

Three things no other extension kit gives you together

Other boilerplates say "connect Stripe, add Firebase, host a backend" and leave you the hosting bill, the uptime and the VAT.

  1. Paddle checkoutBuyer pays; Paddle handles the tax
  2. Cloudflare WorkerWebhook in, ES256 key signed
  3. License keyEmailed and stored in the extension
  4. Your extensionVerifies offline with the public key
Cost

$0/month, honestly

GitHub Pages hosts the site. Cloudflare Workers + KV run licensing free for roughly a thousand daily-active paying users, then $5/month. Paddle only takes a cut of sales. Your fixed cost is a domain (~$12/year).

Tax

Merchant of record built in

Paddle is legally the seller: it collects VAT, GST and sales tax worldwide, issues invoices and handles refunds and chargebacks. With Stripe those are yours. You never register for or file sales tax. (Income tax on what you earn is still yours.)

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.

02 · The kit

What's inside

One private repository, five packages, one config file. Everything reads from paidextension.config.json. Real code, straight from the repo:

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 — hasFeature('exportData')
  • Firefox manifest variant, Edge-ready packaging
  • Vitest suite, ESLint, strict TypeScript, webpack
extension/src/licensing/features.ts · verify.ts
// Entitlement derives from the signed license, never a stored flag.
export async function isPro(): Promise<boolean> {
  return (await getEntitlementStatus()).tier !== 'free';
}
export async function hasFeature(feature: string): Promise<boolean> {
  const { tier } = await getEntitlementStatus();
  return featuresForTier(tier).has(feature);
}

// verify.ts — offline ES256 check with the embedded PUBLIC key
const pubKey = await crypto.subtle.importKey('jwk', LICENSE_PUBLIC_JWK,
  { name: 'ECDSA', namedCurve: 'P-256' }, false, ['verify']);
return crypto.subtle.verify({ name: 'ECDSA', hash: 'SHA-256' },
  pubKey, signature, data);
Try npm run init: answer a few questions and watch the config, manifest and popup change
More answers
03 · Live proof

Try one before you buy

Marker, a highlighter extension built from the kit

  • Free tier, 7-day trial, and Pro unlocked by a Paddle sandbox checkout (card 4242 4242 4242 4242)
  • Server-verified sharing, and revocation when you cancel
  • Product code is public — about 40 lines of it touch licensing
04 · Your numbers

How it compares

Against extension boilerplates and hosted payment SDKs, including what each leaves you per month at your numbers.

PaidExtension Typical boilerplate
(ExtensionFast, extFast, TurboStarter…)
Hosted payment SDKs
(ExtensionPay, crxpay…)
You keep, per month
on $1,160 of sales
$0$0$0
Fees, infrastructure & tax, per month
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
Refund / chargeback revocationAutomaticDIYYes
Own the code, no vendorYesYesNo — hosted dependency
AI-agent setup/publish/test skillsYesNoNo

Assumptions behind the monthly numbers

Illustrative, from published rates at the time of writing: Paddle 5% + 50¢ per sale (tax included); Stripe 2.9% + 30¢; Stripe Tax 0.5% per transaction; Cloudflare Workers free tier 100k requests/day, then $5/month. Competitor details as published on their sites; check current terms before deciding.

05 · One-time

Pricing

Pay once, build as many extensions as you like. The tier only sets how many developers may use the kit.

Agency

$399

one-time, unlimited developers

  • Any number of developers and contractors at one company
  • Build and hand over products for clients
Buy Agency
  1. Pay on Polar
  2. Connect GitHub in the customer portal
  3. Accept the invite, usually within a minute
  4. Clone and run npm run init
  • Unlimited end products, commercial use
  • Lifetime updates
  • Setup, licensing and publishing guides, plus agent skills
  • Support via GitHub Issues and email

14-day refund on both tiers, no questions asked: email [email protected]. Payments are handled by Polar (merchant of record); you'll get a proper invoice.

06 · FAQ

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. After purchase you connect your GitHub account in the Polar customer portal and the repository invitation arrives within a minute; on Agency, share it with your developers as the license allows. 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 an afternoon for a first run, mostly in the Paddle and Cloudflare dashboards. Paddle's production approval takes a few days; the sandbox covers everything until then.

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?

Unlimited commercial end products, forever, including all updates. The tier sets who may work with the kit's files: Solo is one developer; Agency is any number of developers at one company, including work delivered to clients. You may not redistribute the kit itself or use it to build a competing kit. 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.