Solutions

Floating License Management

Sell N concurrent seats, not N installs. A floating license enforces a maximum number of simultaneous active users across any number of installed machines — the model teams actually want when the software runs on shared workstations, lab machines, or a rotating remote workforce.

Node-locked doesn't fit every team

A per-machine (node-locked) license makes sense for a single-user desktop app. It breaks down for a design studio with 5 licenses and 12 workstations where nobody uses the tool constantly — node-locking forces them to either overbuy seats or manage licenses machine-by-machine. Floating licensing sells the actual constraint that matters: how many people are using it right now, not how many machines it's installed on.


How it works

Your app calls a checkout endpoint on launch (consumes one seat) and a checkin endpoint on exit or after an idle timeout (frees the seat). PermitCore enforces the seat cap with PostgreSQL row-level locking on the activation counter, so two simultaneous checkout attempts for the last seat can't both succeed — the seat count is never oversold under real concurrent load, not just in the common case.

// .NET SDK
var session = client.CheckoutFloatingSeat(licenseKey);
// ... user works ...
client.CheckinFloatingSeat(session.SessionId);

Built for the shape floating licensing actually needs

Real seat-limit enforcement
Atomic checkout under row-level locking — the seat cap holds under genuinely concurrent requests, not just in a single-threaded test.
Stale-session cleanup
A crashed client that never checks back in doesn't permanently occupy a seat — idle sessions time out and free the slot automatically.
Visibility into current usage
See exactly who holds which seat, right now, from the admin panel — not just a total count with no attribution.

Sell seats, not installs

Included from the Starter plan. Free tier available for evaluation.