Floating licenses
Floating licensing (Enterprise tier and up) replaces the organization key file with a pool of concurrent automation sessions served by vericue-license-server - a small standalone daemon you run on your own network. Nothing leaves your LAN: the license server is self-hosted and works entirely offline, like all veriCue licensing.
How it works
┌─────────────────┐ checkout / heartbeat ┌──────────────────────┐
│ App under test │ ─────────────────────▶ │ vericue-license-server │
│ (libvericue- │ ◀───────────────────── │ (your LAN, port 7777)│
│ server) │ lease granted │ license.json (N sessions)│
└─────────────────┘ └──────────────────────┘- The license server loads your RSA-signed key file (which carries the licensed session count) and listens on TCP. Each granted lease is one active session from that pool.
- Each application under test checks out a lease at startup and renews it with a heartbeat every 60 seconds.
- A lease that misses heartbeats for 180 seconds is reclaimed server-side - crashed apps free their session automatically.
- On a clean shutdown the app checks in the lease immediately.
If the license server becomes unreachable, the app keeps its lease through a 5-minute grace period, retrying the connection every 10 seconds. Only after the grace period expires does the automation interface stop.
Running the server
vericue-license-server --license /etc/acme/vericue-floating.json --port 7777| Flag | Meaning |
|---|---|
--license <path> | RSA-signed key file (required in server mode) |
--port <n> | TCP lease port (default: 7777) |
--http-port <n> | Optional HTTP admin API + dashboard |
--http-token <token> | Bearer token protecting the HTTP admin API (recommended) |
--status | Query a running server and exit (with --host, default 127.0.0.1) |
Run it under systemd or your service manager of choice; it is a single binary with no database - leases live in memory.
Application side
Instead of a key file, point the embedded server at the license server:
vericue::VeriCueServer server(&window);
server.setLicenseServer("licenses.acme.lan", 7777);
server.startLocal(); // or server.start(4242) for TCPCall setLicenseServer() before the first start()/startLocal(). The lease is checked out once for the whole application process - starting both transports does not take a second one - and checked back in by stop(). Note that this is about the licence server's TCP port, which is independent of the transport your automation clients use to reach the application.
Admin API & dashboard
With --http-port set, the server also exposes:
| Endpoint | Purpose |
|---|---|
/ or /admin | Auto-refreshing web dashboard with per-lease revoke buttons |
GET /api/status | Session totals (used / licensed), license info |
GET /api/sessions | Active sessions, i.e. current leases (client id, hostname, expiry). /api/seats still works as a deprecated alias and will be removed in a future release |
POST /api/revoke/<lease_id> | Force-release a lease |
Protect the admin port
/api/revoke releases active sessions, so anyone who can reach the HTTP port can disrupt licensing. Always pass --http-token; every request must then send Authorization: Bearer <token>. The server logs a loud warning when it starts without one. Keep both ports LAN-only - the lease protocol is plain TCP, so firewall it to trusted subnets and never expose it to the internet.
curl -H "Authorization: Bearer $TOKEN" http://licenses.acme.lan:8080/api/sessionsMonitoring
Check session usage from a shell:
vericue-license-server --status --host licenses.acme.lan --port 7777or scrape GET /api/status from your monitoring system.
Lease lifecycle reference
| Parameter | Value |
|---|---|
| Heartbeat interval (client) | 60 s |
| Lease timeout (server) | 180 s without a heartbeat |
| Grace period on server outage (client) | 5 min |
| Reconnect attempts during outage | every 10 s |
Troubleshooting
lease denied- all licensed sessions are in use. Check/api/sessionsfor stale clients, or revoke a lease from the dashboard.- App loses automation after ~5 min - the license server is unreachable and the grace period ran out. The app under test keeps running; only the veriCue interface stops. Restore connectivity and restart the app under test to re-checkout.
- Server refuses to start - the key file failed signature verification, or the port is taken. Both are logged on stderr.

