LicenseKit

Licensing for desktop apps that keeps working offline

LicenseKit issues signed license tokens your Electron app can verify without a network call, binds each one to a device, and lets customers move to a new machine on their own. It also turns Sentinel EMS orders into activated licenses in one step.

Try it in three steps

  1. Download the demo app

    Loading downloads…

    The app is not code-signed yet. How to open it

    macOS: open the .dmg and drag the app to Applications. The first time, right-click the app and choose Open, or allow it under System Settings → Privacy & Security.

    Windows: if SmartScreen appears, choose More info, then Run anyway.

  2. Get a trial key

    Free for 7 days, works on 2 devices. No sign-up.

  3. Activate, then pull the plug

    Paste the key into the app. Then turn off Wi-Fi: the app keeps working from its signed token. Use Deactivate to free the seat, and watch the device appear and disappear in the console.

How it works

The app sends a device hash and license key to the server, gets back a signed token, and verifies it offline with the public key. Your Electron app SDK in the main process signed token verified offline License server seats, devices, status signs with private key key + device hash Ed25519-signed token Offline: the app trusts the token until its check-in date, plus a grace period.
Can't be forged
Apps ship only the public key. They can check a token, never mint one.
Bound to one device
The token carries a hash of the OS machine id. A copied license file fails on another computer.
Works offline, within limits
The app checks in every few days. Without a connection it runs through a 7-day grace period, then stops.
Customers move machines themselves
Deactivate frees the seat. Reinstalling on the same machine never burns a second seat.
Hardened Electron build
Fuses turn off RunAsNode, NODE_OPTIONS and the inspector, and only a verified app.asar loads.

Sentinel EMS, from order to license in one call

The toolkit wraps the Sentinel EMS v5 REST calls for creating an entitlement and activating it, including Sentinel LDK C2V and key ID locking. Use it from the command line, from code, or from the console's Sentinel EMS screen.

The public demo talks to a bundled mock EMS that returns fake license strings.

$ ems provision --customer "Acme" \
    --email [email protected] \
    --product "Printer-Scanner" --version 1 --seats 10

POST /ems/api/v5/entitlements                201
POST /ems/api/v5/activations/bulkActivate    200