Licensing
FluxDeploy uses an offline license key system. License keys are cryptographically signed (ECDSA P-256) and verified entirely on the Core server - no license server or internet connectivity is required. Relays never hold a license of their own; they follow the Core's license status via heartbeat.
License Lifecycle
FluxDeploy moves through three states:
| State | When | Behavior |
|---|---|---|
| Trial | First 30 days after installation, no license key entered | All features enabled, up to 5 relay sites, unlimited recipes |
| Licensed | A valid license key is active | All features enabled, limits per the key |
| Locked | Trial expired with no license, or the license itself expired | Operational endpoints stop until a valid key is entered |
The trial starts automatically on first run - no sign-up or key required. A banner at the top of every page shows the trial countdown ("Trial mode - N days remaining. All features are enabled.") and switches to a warning style during the final 7 days.
Activating a License
Navigate to Settings > License:
- Paste your license key into the text area (hyphens and whitespace are stripped automatically)
- Click Validate to verify the key without activating (dry-run)
- Click Activate to store and enable the license
The Current License card displays:
- License ID and status badge (Licensed / Trial / Expired / Locked)
- License type (Time-based or Perpetual)
- Expiry date, with a days-remaining countdown for time-based licenses
- Relay site and recipe limits (shown as Unlimited when the key has no limit)
- Enabled features (enterprise licenses show all features enabled)
License Key Format
License keys are compact signed strings (Base32, entered with or without hyphen grouping). The payload carries the license ID, expiry, relay site limit, and recipe limit, followed by an ECDSA P-256 signature that is verified offline against public keys embedded in the server binary. Any tampering invalidates the signature and the key is rejected.
Feature Gating
There are no per-feature license flags. A single Enterprise entitlement unlocks the entire feature set - PXE, multicast, WIM customization, OEM catalogs, Windows Autopilot, and Microsoft Connected Cache - and it is granted by any valid license or an active trial. License-gated UI (the Autopilot and Connected Cache settings tiles, the MCC column and actions on the Relay Sites page) simply appears while the system is operational.
Limits
- Max Relay Sites - Registering a site beyond the limit is rejected with HTTP 403 ("Relay site limit reached. Upgrade your license to add more relay sites."). This applies to both manual site creation and relay auto-registration. Existing sites continue working. The trial allows 5 relay sites.
- Max Active Recipes - Activating a recipe beyond the limit is rejected the same way. Existing active recipes continue working.
A limit of 0 in the key means unlimited. Limits are always enforced - there is no warn-only mode.
Locked State
When the trial expires with no license, or a time-based license passes its expiry date, the Core server locks:
- Browser requests are redirected to Settings > License so a key can be entered
- API and SignalR requests to operational endpoints return 503 with an explanatory error
- Agent check-ins, deployments, relay sync, and PXE HTTP endpoints all stop
- Login, first-run setup, the license page itself, and the
/healthand/readyprobes stay reachable
Entering a valid license key unlocks the system immediately - no restart required. Relays are never locked directly: they cache the Core's last-known license status and keep operating on it if Core becomes unreachable.
Note: The license is evaluated at startup and re-checked hourly. A deployment already in flight is not interrupted mid-run by a status change.
Relay Propagation
License status (not the key itself) is propagated to relay sites via heartbeat as a single Enterprise feature flag. Relays persist the flag locally, so a relay restart or a temporarily unreachable Core does not turn features off.
Expiry Warnings
- The top-of-page banner warns when a time-based license expires within 30 days, and turns red once expired or locked.
- Notification events fire for License Expiring Soon (30 days out) and License Expired, deliverable through any configured notification channel.
Removing a License
Click Remove License in Settings > License (confirmation required). The system returns to the unlicensed state: if the original 30-day trial window is still open, the trial resumes; otherwise the server locks until a new key is entered.