Keys, device activations, offline validation, trials, and payment sync with Stripe or Paddle, without building or running a licensing backend. Free up to 250 active licenses. $10/month up to 2,000.
import { License } from "@keygrant/electron";
const license = new License({ product: "my-product", apiBaseUrl, publicJwks,});const result = await license.activate(key);
if (!result.ok) showActivationWindow(result.error); Indie: up to 2,000 active licenses.
Each SDK checks the signed license on the device, so your app keeps working offline. Any other language can use the REST API directly.
@keygrant/electron
npm install @keygrant/electron KeyGrant.Licensing
dotnet add package KeyGrant.Licensing keygrant
cargo add keygrant keygrantdev/keygrant-swift
https://github.com/keygrantdev/keygrant-swift.git keygrantdev/keygrant-cpp
GIT_REPOSITORY https://github.com/keygrantdev/keygrant-cpp.git keygrant
flutter pub add keygrant https://api.keygrant.dev
Any language can call the API directly. Licenses are signed, so your app can verify them offline with a standard JWT library.
Issue and revoke keys, watch devices check in, and see which trials turn into sales, from one dashboard.
Active licenses, new devices, running trials and the sales that need a look, as you sign in.
Every key across every product, by status, with its devices against its limit.
A key with its customer, order and devices, beside the signed lease your app checks offline.
A license model for each way you sell: perpetual, subscription, timed or metered.
Customers, licenses and devices over time, with activations and API traffic by day.
Shown with a demo account. The company, its products and its customers are made up.
Built for software we ship ourselves. KeyGrant isn't licensing infrastructure designed in a vacuum. We use it for our own commercial software.
Add the license check and ship. Use the REST API directly, verify licenses with standard libraries, or use a KeyGrant SDK for the convenient path.
An outage or lost connection shouldn't disable someone's software. Signed licenses and configurable offline days keep legitimate customers running offline.
A license counts only while it's valid. Expired, revoked and test licenses don't count. No revenue share and no rolling active-user formulas.
Licenses are standard signed JWTs, not a proprietary blob. Verify them locally with the KeyGrant SDK or any compatible JWT library using your public key.
Issue, validate, renew, and revoke licenses through the API or dashboard. Turn on Key pickup and an App Store build restores a license with an emailed code, no key to type.
Set device limits, activate and deactivate machines, and control how devices are identified.
Support perpetual, subscription, timed and trial licenses without changing your integration.
Signed licenses and configurable offline days keep your software working without a constant connection.
Connect your Stripe account or link your Paddle account. Purchases can issue licenses automatically; refunds and cancellations can revoke them.
Let customers view their license and deactivate old devices without contacting support.
Find a customer, inspect their licenses and devices, issue replacements, and fix problems quickly.
Use the REST API directly, verify signed licenses with standard libraries, or use a KeyGrant SDK for device handling, storage, offline validation, and activation flows.
Create a product in KeyGrant and get the credentials needed to issue and verify licenses.
Set perpetual, subscription, timed or trial licensing, device limits, and how long licenses run offline.
Verify signed licenses directly or use a KeyGrant SDK to handle activation, storage, device state, and offline behavior for you.
Connect Stripe or link Paddle to issue, renew, and revoke licenses automatically.
Link the processor you already use, and a paid checkout creates a key, each renewal moves its expiry forward, and a refund can revoke it. Payments go straight to your own account, and KeyGrant takes no share. A processor is optional: KeyGrant works without one.
Choose Connect Stripe in Settings > Payments and approve KeyGrant on your Stripe account. Its events arrive through Stripe Connect, so there is no webhook endpoint to add.
Paste an API key from your Paddle Billing account in Settings > Payments and choose Link Paddle. KeyGrant makes the notification destination for you, and a sandbox key links your sandbox for testing.
Issue keys yourself when you bill some other way: from the dashboard, from your own backend through the API, or with the CLI. Or import the keys you already have from a CSV file, each key unchanged.
An active license is one that is still valid, sold or issued by hand. Expired, revoked and test licenses don't count. One plan covers all your tenants, and its limits count across them, including tenants you co-own.
You pay for licenses that are actually valid. Once one expires and its grace period runs out, or it is revoked, it stops counting, so your bill tracks real usage, not a formula you have to decode.
Can't find what you need? Read the docs or email [email protected].
Free up to 250 active licenses. $10/month up to 2,000.