Skip to main content

Use case · Desktop & CLI software

Licensing for desktop ISVs — keys, activation, offline files.

Ship a CLI tool, an Electron / Tauri / native desktop app, or embedded software? Licentric gives you the licensing infrastructure you would otherwise spend a quarter building — license keys, machine fingerprinting, Ed25519-signed offline files, trial flows, and Stripe-driven license provisioning.

Free tier covers 100 active licenses with the full API, production-ready. Paid plans start at $5/month. No 500 lines of Stripe webhook glue. No DIY key generator that breaks on the first refund.

Who this is for

  • Indie macOS / Windows / Linux desktop developers shipping native apps, Electron, Tauri, Qt, or .NET software (VISION.md §5 ICP 2).
  • CLI-tool authors who ship binaries via Homebrew, apt, choco, cargo, or a download page and need per-machine activation.
  • Embedded-software vendors shipping firmware or device-side agents that must validate license without round-tripping to the internet on every launch.
  • ArgusTest-class customers — a single Python SDK call plus a server-issued license key is the entire integration (VISION.md §5).
  • ISVs who outgrew DIY licensing (hand-rolled SHA-256 + GitHub Releases) and want CRUD + revoke + suspend + machine caps + audit trail without writing 500 lines of Stripe webhook glue (README §Why Licentric Exists).

The problem desktop ISVs actually have

DIY licensing rots. A hand-rolled key-check works for the first 100 customers, then breaks the moment one customer demands a refund (no revoke), a second customer reinstalls their OS (no machine deactivation), and a third customer goes through Stripe chargeback (no automatic suspension). Every one of those scenarios needs production code you have not written.

Off-the-shelf platforms charge $50–$800/month for things you should not have to pay $50–$800/month for. Keygen CE has no admin UI. Cryptlex starts at $50/month. LicenseSpring starts at $99/month. None ship a free tier suitable for shipping a real product (README §Comparison).

Offline-first is treated as an afterthought everywhere else. Your customers do not always have internet — air-gapped enterprise networks, conference Wi-Fi, planes, locked-down corporate VPNs. A license check that requires a round-trip on every launch is a customer-support ticket waiting to fire (README §Offline Licensing).

How Licentric helps

License keys with a real state machine

Generate, validate, revoke, suspend, ban, rotate. Status transitions enforced server-side: active / suspended / revoked / banned / expired with terminal-state guards on revoked + banned. README §More Endpoints lists every state-transition endpoint shipped under /api/v1/licenses/*. License-key format: {PREFIX}-XXXX-XXXX-XXXX-XXXX with a configurable per-product prefix (CLAUDE.md §License Key Format).

Machine fingerprinting with concurrent-activation caps

Per-license machine slots with platform-aware fingerprinting. Container-aware logical identifiers (not just hardware UUIDs) so Docker / K8s deployments do not break activation (README §Comparison). Customer can deactivate a machine to reclaim a seat — that flow is built into the self-service portal, no support ticket needed.

Offline license files — Ed25519 + AES-256-GCM

Server signs an offline license file (Ed25519, FIPS 186-5) and encrypts the payload (AES-256-GCM). Default 14-day TTL, configurable per license. Verified client-side with the embedded public key — no network round-trip required on every launch. License file is bound to a specific machine fingerprint and includes a server-authoritative expiry timestamp (clock-manipulation defense, README §Anti-Piracy Defenses).

Trial flows via the Trial policy template

One of four production-shipped policy templates: Trial (1 machine, 14-day duration, per-license fingerprint, trial flag enabled). Per README §Policy Templates. Pair with the per-product key prefix to issue trial keys that auto-expire without your code having to track anything.

Stripe auto-sync — zero webhook code

Connect Stripe in two clicks. Map a Stripe product to a Licentric policy in the Stripe Mapper UI. New purchase → license auto-created → key emailed to customer. checkout.session.completed, customer.subscription.updated, invoice.payment_failed, invoice.paid, customer.subscription.deleted are all handled by Licentric — no webhook handler in your codebase (README §Stripe Integration).

End-user self-service portal — magic-link auth

Your customers manage their own devices, transfer machines, and recover lost keys without contacting support. Built and shipped (README §Roadmap). Magic-link auth — no password to lose, no SSO to wire up. This is the difference between 'one license-related support email per week' and 'one per month' for a 1,000-customer ISV.

Python + TypeScript SDKs — 5 lines of code, no Go yet

licentric 0.3.0 on PyPI (Python). @licentric/sdk 0.3.0 on npm (TypeScript). Both ship validate / activate / deactivate / heartbeat / offline-cache / response-signature-verification (README §Roadmap). Go SDK exists in-repo but is NOT yet published — flagged here so you do not write it into your build pipeline expecting `go get` to work today.

Anti-piracy defenses without DRM theater

Server-authoritative timestamps (clock-manipulation defense). Short-TTL offline files (replay-attack defense). Public-key verification only in the SDK — the private signing key never leaves the server (binary-patching defense). Ed25519 keygen-emulation resistance because the SDK only carries the public key (README §Anti-Piracy Defenses). No obfuscated VM. No driver-level anti-debugging. Pragmatic security that does not annoy paying customers.

Capability claims sourced from README.md (Offline Licensing, Anti-Piracy Defenses, Policy Templates, Stripe Integration, Roadmap, Comparison) and VISION.md §5–§6. Phase 2+ items (SDKs beyond Python and TypeScript) are explicitly labeled as not-yet-published where applicable.

Which tier fits a desktop ISV

TierPriceBest for
Free$0Solo desktop ISV launching a paid app. 100 active licenses is enough for a 6-12 month runway on initial paid traffic.
Starter$5/mo1,000 active licenses, 5 products, custom branding on portal + emails. Right tier for an indie shop with one or two shipping products and a few hundred paying users.
Growth$29/mo10,000 active licenses, 25 products. Right tier for a multi-product ISV — different SKUs, different policies, different price points.

An Enterprise plan (custom pricing, sales-assisted) is on the roadmap for ISVs needing custom branding and audit-log retention. See the full pricing table for every feature gate. Pricing tiers verbatim from VISION.md §7.

Ship your first licensed release this week

Free tier is production-ready: 100 active licenses, full API, every SDK feature, no credit card. Paid plans start at $5/month when you outgrow the free limits. Cancel any time — no contract, no minimum.