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.
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
- They click Upgrade and pay on your provider's hosted checkout.
- The provider emails them a license key.
- They paste it into your popup. The extension activates it. No API key ships in the extension.
- 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
| Free | Pro | |
|---|---|---|
| Lemon Squeezy license keys, daily re-check, 7-day offline grace | yes | yes |
ProGate, license box, license settings page | yes | yes |
| Tests with mocked network calls | 15 | 28 |
| Polar and Dodo Payments, switched with one line | yes | |
| Free trial counted from install | yes | |
| Daily free uses per feature before the paywall | yes | |
| AGENTS.md for Claude Code and Cursor | yes | |
| License | MIT | your 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.