LicenseManager

Blog

Notes on selling and licensing software

How to sell a desktop app, protect it with license keys, and keep your customers happy along the way.

A license key sent from a laptop to an activation server, which answers with a signed token

9 min read

Activation licensing service: how software activation works

Your app needs to check a license key against a server, count the computers it's used on, and keep working offline. Here's what an activation licensing service does, step by step.

Read the article
A Rust core checking a license key for a Tauri app's webview

10 min read

How to add license keys to a Tauri app

Where the license check belongs in a Tauri app, how your webview reaches it, how to gate paid commands in Rust, and how to keep the app working offline.

Read the article
The RabbitGUI app next to a license key

5 min read

How RabbitGUI sells its Electron app with license keys

RabbitGUI, a desktop client for RabbitMQ, replaced its in-house license server with LicenseManager.dev. What they moved, how existing keys were migrated, and what they no longer maintain.

Read the article
A license key unlocking a list of entitlements, with features, machines and versions

9 min read

Entitlement management system: what your licenses unlock

A license key says who paid. Entitlements say what they get. Here's how an entitlement management system keeps editions, seats, versions and expiration dates right, from checkout to your app.

Read the article
A license key and a laptop, managed by the customer without contacting support

9 min read

Self-service licensing: let customers manage their own licenses

Lost keys, new computers, refunds and expired cards make up most of the licensing support inbox. Here's how a self-service license portal answers them, and where self-service should stop.

Read the article
The Electron logo, an arrow to a stack of layers, and npm run dev

6 min read

The best Electron boilerplates

Eleven maintained Electron starters compared on stack, features and maintenance, from minimal templates to fullstack kits, plus the popular ones that have fallen behind.

Read the article
An Electron app window asking for a license key

8 min read

How to add license keys to an Electron app

The activation window, the IPC between your windows and the main process, offline checks, and where to store the key. Everything an Electron app needs to ask for a license key.

Read the article
An Electron app next to a checkout page and a license key email

5 min read

How to sell an Electron app

App stores or your own website, Stripe or a merchant of record, one-time or subscription. The decisions to make before you sell your first copy.

Read the article
A macOS Gatekeeper warning and a Windows SmartScreen warning next to each other

5 min read

How to code sign and notarize an Electron app

Developer ID certificates, notarization with notarytool, Windows certificates on hardware tokens and cloud signing services, and the configuration for electron-builder and Electron Forge.

Read the article
An Electron app showing an "Update available" notification

4 min read

Electron auto update, explained

Electron's built-in autoUpdater, electron-updater from electron-builder, update.electronjs.org, and where to host your releases. How each one works, and which one to pick.

Read the article
The electron-builder and Electron Forge logos side by side

4 min read

electron-builder vs Electron Forge

Both package your Electron app into installers. They differ on targets, auto updates, configuration and who maintains them. A side by side comparison, and how to choose.

Read the article
An extracted app.asar archive showing readable JavaScript files

5 min read

How to protect your Electron app's source code

An asar archive isn't encryption, and anyone can read your JavaScript. What obfuscation, V8 bytecode, Electron fuses and asar integrity really protect, and what they don't.

Read the article
An Electron app showing a "12 days left in your trial" banner

5 min read

How to add a free trial to an Electron app

A local timestamp, a trial key by email, or a trial tied to the machine. How each approach works in an Electron app, how easy it is to reset, and how to turn a trial into a sale.

Read the article
Three laptops, each with a different machine id

5 min read

How to get a unique machine id in Electron

IOPlatformUUID, MachineGuid and /etc/machine-id, how to read them from Electron, what makes them change, and how to turn them into a fingerprint for licensing.

Read the article
The macOS Keychain Access app showing an entry stored by an Electron app

4 min read

Electron safeStorage vs keytar

keytar is no longer maintained. What Electron's safeStorage does, how it differs from a real keychain, the Linux pitfall, and what to use for tokens and license keys.

Read the article
An Electron app opening a Stripe Checkout page in the browser

5 min read

How to accept payments in an Electron app with Stripe Checkout

Why Stripe Checkout belongs in the browser, not in a BrowserWindow, how to open it with the customer's email, and how to bring them back to your app with a deep link once they paid.

Read the article
The Electron and Tauri logos side by side

5 min read

Electron vs Tauri

Bundle size, memory, rendering differences between webviews, Rust vs Node.js, the ecosystem, auto updates and licensing. An honest comparison for people shipping a real product.

Read the article

License keys your app can check in one request

LicenseManager creates a key for every Stripe purchase, emails it to your customer, and validates it from your app, online or offline.