A paywall in the bundle, a hosted Stripe checkout, a licence verified locally. No backend.
Upgrade to get full access to this extension.
Secure checkout opens in a new tab.
Standard onboarding. You get a publishable key.
Sku, price, features. Created on your Stripe account.
requireFeature() opens the paywall when unpaid.
New tab. The webhook lands, the licence unlocks.
import ExtenshiPay from '@extenshi/pay'
const pay = new ExtenshiPay({
publishableKey: 'pk_ext_…',
entitlementPublicKey: '<Ed25519 public key from Payments>',
})
await pay.initialize()
// Opens the paywall when the user has not paid.
const ok = await pay.requireFeature('pdf-export', {
onUnlock: () => enablePdfExport(),
})Light or dark, your accent colour, your strings. Click a render to see it full size.
modalCentered dialog with a backdropinlineA card inside your own pagesidebarSlides in from the rightfullscreenTakes over the pageminimalCompact, for a quick decisionSmall enough for Claude Code, Cursor or any coding agent to add in one pass.
One dependency, one public key, four methods. No secrets in the bundle.
mock: true serves offers offline, so the agent ships the gate and its tests first.
Install the skill or paste the brief. On the MCP server, search_docs finds it.
Add a paywall to this extension with @extenshi/pay (npm install @extenshi/pay):
gate <feature> with pay.requireFeature('<feature>', { onUnlock }).
Keys: dojo.extenshi.io/payments → independent Pay application; bundle publishableKey and entitlementPublicKey. Existing scaffolds may provide PAY_PUBLISHABLE_KEY in extenshi.config.js.
No key yet: build with { mock: true, mockData } and leave a TODO. No remote code, no Stripe secrets.
Docs: https://docs.extenshi.io/developers/pay-sdk$ mkdir -p ~/.claude/skills/extension-paywall $ curl -fsSL https://docs.extenshi.io/skills/extension-paywall/SKILL.md \ -o ~/.claude/skills/extension-paywall/SKILL.md
Templates in the bundle, Shadow DOM, no remote code.
A random installation id is all the SDK needs.
Ed25519-signed entitlement, checked with WebCrypto; valid offline for up to 48 hours.
Refunds, disputes and tax stay in your dashboard.
Several offers per application, customer portal built in.
Choose the full paywall bundle or a lite client for your own UI.
Payment calls identify the installation and offer. Optional recovery also sends session credentials.
Email and verification codes are entered on the hosted recovery page. Include that flow in your privacy disclosure when enabled.
The offer and the paywall are shown to an anonymous installation.
The cached entitlement is verified locally and refreshed hourly while online; offline it stays valid for up to 48 hours from issuance.
It identifies your Pay application. Installation and recovery credentials authorize purchase access.
Payment and optional license recovery:
Not collected by the extension SDK:
Deducted by Stripe as an application fee on each charge, on top of Stripe’s fees, plus VAT where applicable. No minimum.
Per charge
If nobody buys, you pay nothing.
extenshi is not a Merchant of Record and never holds buyer funds. The sale is yours, and so are the taxes on it.
The cross-store catalog and scanner, inside your AI tools.
Scan and predict review outcomes from your terminal.
A guided MV3 manifest that passes store review.
Illustrated steps that get your extension pinned to the toolbar.
A hosted exit survey — find out why users leave.
A store-ready privacy policy from your permissions.
Draw with your agent, verify in real toolbar mockups.
Connect Stripe, add the offer, gate the feature.
2% per charge · no monthly fee · your own Stripe account