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.
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
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
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);
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
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
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
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
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
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
Need to check one of these for your app?
Send us your scenario and we will reply within 48 hours with an integration path.