One platform across the desktop licensing lifecycle

From the first key to auto-updates, every module maps to a real API and screen. Here is what each part does and where its boundaries are.

01

Licensing & activation

Subscriptions, perpetual, perpetual + maintenance, trials and floating licenses in one model.

  • Activate, verify, deactivate, suspend, reinstate and revoke — all audited
  • Per-device or per-user slots, atomically enforced at the database layer
  • Grace period, check-in interval and license expiry are separate knobs
  • Idempotency-Key support so retries never consume a second slot
Licenses3 plans
WB-8F2K-••••-M4Q9Active
WB-2C7N-••••-T8R1Trialing
WB-9Q4V-••••-K2L6Expired
WB-5H1D-••••-P7X3Revoked
02

Offline Ed25519 verification

The private key never leaves the server; the client pins a public key and verifies locally.

  • The token carries device binding, plan, entitlements and expiry; tampering breaks it
  • exp is the check-in interval, vun is license expiry — two different clocks
  • Works offline, on private networks and in air-gapped environments
  • Entitlements ride in the ftr field and the client reads them directly
offline-verify.tsEd25519
const payload = JSON.parse(
  Buffer.from(token.split('.')[0], 'base64url')
);
assert(payload.did === deviceId);
assert(payload.fpr === fingerprint);
assert(payload.exp > Date.now() / 1000);
assert(payload.ftr.publish !== false);
03

Trials & self-signup

Email-OTP signup issues a trial immediately — no manual step.

  • Enable self-signup on a free plan; each plan gets a hosted claim page
  • One trial per email per product, with a configurable daily cap
  • An address with a usable paid license signs in without minting another trial
  • When the trial lapses it falls back to the free plan; data and keys stay
/signup/••••31-day trial
Email OTPSent
Create accountOK
Issue trial licenseWB-2C7N
Send emailDone
04

Payments & subscriptions

Collect money and issue the license in the same flow.

  • Stripe Checkout for subscriptions, perpetual, trials and one-off payments
  • Webhook + success page + scheduled reconciliation recover missed events
  • Prorated upgrades and downgrades; refunds roll back license state
  • Self-serve billing portal, invoices and expiry reminders
Stripepaid
Pro · Yearly$290.00
Prorated upgrade+$12.40
RefundRolled back
webhook + reconcile3/3
05

Seats & entitlements

Owners and members get their own keys; over-limit seats pause instead of failing loudly.

  • Owner and member keys are independent; members manage only their own devices
  • When seats shrink, last-joined members pause and resume as soon as a seat frees
  • Boolean, numeric and quota entitlements, plus paid add-ons
  • Invites, removals and device ownership are explicit and audited
Team seats3 / 3
owner@studio.devOwner
dev@studio.devMember
qa@studio.devPaused
Auto-resume when a seat freeswait
06

Update distribution

Licensing and releases share one feed, so expiry, revocation and maintenance periods apply.

  • Sparkle, Velopack and Tauri consume the same release feed
  • Atomic publishing and yank; every artifact is signed separately
  • S3-compatible storage with license-gated downloads
  • Maintenance periods and minimum versions control who gets what
appcast.xmlv2.8.1
UnionUser-2.8.1.dmgsigned
UnionUser-2.8.0.exeyanked
Maintenance2027-11-05
License gateon
07

Usage & quotas

Atomic consumption that concurrent requests cannot overdraw.

  • Hourly, daily, monthly and yearly windows
  • Quota deduction shares the licensing source of truth
  • Threshold webhooks warn before the limit, not after
  • Clients can query remaining quota in real time
Quota this month8,420 / 10,000
Today312
Threshold alert80%
webhookdelivered
08

Admin & customer portal

Both the operator console and the customer self-service portal ship ready.

  • Products, plans, licenses, customers, API keys, webhooks, analytics, audit and roles
  • Email templates and branding, including custom domains
  • Portal: release devices, manage seats, switch plans, invoices and renewal
  • Full audit log of who changed what and when
Customer portalportal
My licenses3
Active devices2 / 3
Next invoice2026-12-05
Download invoicePDF

Need to check one of these for your app?

Send us your scenario and we will reply within 48 hours with an integration path.