Charge for your Chrome extension without running a server

Keyturn Kit is a WXT + React starter that checks license keys from Lemon Squeezy, Polar or Dodo Payments straight from the extension. Your payment provider takes the money. The kit handles keys, offline use and locking Pro when a key is disabled.

Free edition on GitHub Read the guide

The free edition is MIT licensed and works with Lemon Squeezy on its own. Keyturn Kit Pro ($59, one-time) goes on sale here shortly.

Why this exists

Google wound down Chrome Web Store payments between 2020 and early 2021. Since then every paid extension has needed its own checkout, its own way of knowing who paid, and some protection against one key being shared with a whole Discord server.

Most guides answer that with user accounts and a backend. For an extension that sells for $5 to $30, that is a database, auth and a privacy policy you didn't need. License keys skip all of it: the provider emails a key, the user pastes it once, the extension checks it against the provider's public API.

What it looks like in your code

// Hide a feature from free users
<ProGate>
  <BulkExport />
</ProGate>

// Or check in code
if (await license.isPro()) { ... }

// Pro edition: 7-day trial, then 3 free exports a day
const r = await access.check('export');
if (!r.allowed) return showUpgrade(r.reason);
await doExport();
await access.use('export');

What happens after someone pays

  1. They click Upgrade and pay on your provider's hosted checkout.
  2. The provider emails them a license key.
  3. They paste it into your popup. The extension activates it. No API key ships in the extension.
  4. Once a day the extension re-checks the key. Keys the provider reports as disabled or expired lock Pro on the next check. If the provider can't be reached, Pro keeps working for 7 days after the last good check.

Keys from other stores are rejected by store, organization or business id. Without that check, any key bought from any seller on the same provider would turn your Pro features on.

Free and Pro

FreePro
Lemon Squeezy license keys, daily re-check, 7-day offline graceyesyes
ProGate, license box, license settings pageyesyes
Tests with mocked network calls1528
Polar and Dodo Payments, switched with one lineyes
Free trial counted from installyes
Daily free uses per feature before the paywallyes
AGENTS.md for Claude Code and Cursoryes
LicenseMITyour own extensions, unlimited

Pro is $59 once, delivered as a zip download with a license key, with every 1.x update. If it doesn't work for you, email within 14 days for a full refund.

Guides

Questions

Can someone crack it?

Yes. Anything checked inside an extension can be patched by a determined person. What the kit stops is a key being shared past the activation limit you set, and a key you've disabled continuing to work. If you need more than that, put the valuable part on a server and gate that.

Does it work in Firefox?

WXT builds a Firefox version with npm run zip:firefox. We have tested Chrome only so far, so treat Firefox as untested.

Why not ExtensionPay?

ExtensionPay is a good hosted service built on Stripe, with its own login and a 5% fee on top of Stripe's. Keyturn Kit is code you own, with no extra fee, and it works with merchant-of-record providers that handle sales tax for you. If you'd rather not touch code, ExtensionPay is the easier choice.

Do I need a backend?

No. Lemon Squeezy, Polar and Dodo all have license endpoints that are meant to be called from client apps without a secret. Creem isn't supported because its license API needs a secret key.

What happens when I refund someone?

Disable their key in your provider's dashboard. The extension locks Pro at its next daily check. We don't promise that a refund disables the key on its own, because not every provider documents that.