Desktop apps
License your Electron and Tauri apps
Lock each license to a machine. A single check when your app launches confirms it is valid. Works with Electron, Tauri, or any desktop framework that can connect to the internet.
// main.ts, validate on app ready
import { app } from 'electron';
import { machineIdSync } from 'node-machine-id';
app.whenReady().then(async () => {
const res = await fetch('https://api.licensr.app/v1/license/validate', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${PLUGIN_API_KEY}`,
},
body: JSON.stringify({
license_key: store.get('licenseKey'),
plugin_slug: 'my-desktop-app',
}),
});
const { valid, seats_in_use, max_seats } = await res.json();
if (!valid) {
showActivationWindow();
}
});Works with any desktop framework
Why Licensr for desktop apps
Machine-locked seats
Each activation binds to a machine identifier (hostname, hardware UUID, or a custom fingerprint you generate). Key sharing across machines hits the seat cap.
Built-in buy page
Your customers purchase at /buy/your-slug. The license key is issued and emailed automatically via Stripe. No manual fulfillment.
Branded customer portal
Users sign in on a branded page with your logo, then view active seats, deactivate old machines, and manage billing, all carrying your accent colour.
Subscription or lifetime
Sell monthly or annual subscriptions or one-time perpetual licenses. The API returns expiry info so your app can show renewal prompts.
Graceful offline fallback
Verify a signed license token locally at startup so the app works with no network. Pair it with the per-plan perpetual-fallback option to keep core features running even after a license lapses.
Official SDK
Official JS/TS SDK: one import for Electron and Tauri
npm install @licensr/sdk. Validation, seat activation, offline EdDSA tokens, and hosted checkout, with dual ESM/CJS and bundled types. Works from the main process or a preload bridge.
import {LicensrClient} from '@licensr/sdk';
const client = new LicensrClient({
apiKey: 'pk_live_...',
pluginSlug: 'my-synth',
});
const {valid, entitlement, featureFlags}
= await client.validate({licenseKey: userKey});
// → { valid: true, entitlement: 'full',
// featureFlags: { auto_backup: true } }Ready to license your desktop app?
Free tier available. From signup to a working validate call in 15 minutes.

