crxpay
For engineering

A subscription stack you can actually trust.

Type-safe SDK, signed offline cache, MV3-native service worker, and a state machine that makes invalid subscription states unreachable. No backend to babysit.

Without crxpay

  • Build + maintain your own Stripe webhooks endpoint
  • Hand-roll subscription state caching that survives offline
  • Untyped SDK that throws inside background.js with no stack trace
  • CORS errors the first time you call Stripe from a service worker
  • Race conditions between webhook events and SDK polling

With crxpay

  • Zero backend — webhooks land at our Worker, signed events stream to your SDK
  • AES-GCM encrypted offline cache, derived per extension via PBKDF2
  • Typed SDK that never throws — every public method returns a Result
  • MV3-native, no CORS drama, fetch happens in the background SW
  • XState v5 finite state machine — bad transitions are impossible by construction

Designed by engineers who shipped Chrome extensions, not just SaaS.

Cryptographically signed cache

Subscription state is signed by our Worker. The SDK verifies the signature before trusting it — DevTools can't flip a user to active.

XState state machine

Every subscription transition is modeled as a state. The compiler refuses to let you read paymentMethod from a never-paid customer.

10-line SDK setup

Install the package, paste the publishable key, register one onMessage listener. The rest of your background.js stays yours.

12ms

Subscription check from the offline cache, P99. The user clicks an upgrade-locked feature and sees the paywall before their finger leaves the trackpad.

Measured on 10k installs, MacBook M1, Chrome 120

Wire it up in an afternoon, ship it for years.

Open-source SDK, MIT license, no vendor lock-in. If you outgrow us, your subscription data exports to Stripe one click.