License¶
On-premise installations prove their calServer subscription with a license key. It is entered under Administration → Subscription & Modules and checked automatically once a day. The same key decides which optional modules run on the system.
Not to be confused with Administration → Diagnostics → Licenses
Those are the open source licenses of the bundled libraries. That is a legal notice, not a contract.
Entering the key¶
- Open Administration → Subscription & Modules.
- In the Subscription card, enter the key you received from calHelp and click Save.
- The key is checked immediately; on success the status changes to Licensed.
The key is stored encrypted and is never shown in clear text again — the card only displays the last four characters. A lost key is not recovered, it is entered again.
Nothing happens without a configured license service
If no license service is configured on the system (LICENSE_SERVER_URL,
LICENSE_PUBLIC_KEY), the subscription card does not appear at all and
every module counts as licensed. The whole mechanism stays inactive:
installing this version takes nothing away from a running site.
Systems without internet access¶
If the installation cannot reach the license service — an isolated lab segment, a restrictive firewall — calHelp issues the license confirmation directly. It goes into the same field as a key; calServer recognises from the format which one it is.
The confirmation goes through exactly the same checks as a response from the license service: signature and instance ID must match. It is valid only for the installation it was issued for.
For that, calHelp needs the system's instance ID. It is shown under Administration → Subscription & Modules in the subscription card once a license service is configured. On the command line:
The command prints the instance ID and then stops — only calHelp can issue confirmations.
After the term ends the confirmation is renewed and pasted again; the system keeps running in the grace period meanwhile.
Optional modules¶
Three areas can be booked separately. They came after V1, are self-contained and need continuous maintenance — which is why they hang on the subscription rather than on the base scope:
| Module | What it covers |
|---|---|
| Seal | Electronic sealing of reports under eIDAS (separate service). |
| Completion check | The plausibility and specification areas before release. |
| Measurement history and trend | History and trend per measuring point across a device's calibrations. |
Which modules apply is stated in the signed confirmation from the license service. It cannot be changed on the system — not through role management and not through the SQL console either.
Release stays complete
Without Completion check, only those two areas are gone. The completeness check — customer, date, measured values, procedure — keeps running and keeps blocking. A missing module never makes an incomplete certificate releasable.
Why a function is greyed out¶
The Optional modules table names a reason per function. There are exactly three, and they lead to three different places:
| Reason | Meaning | Who changes it |
|---|---|---|
| Not in the subscription | The confirmation does not list the module. | calHelp. Adding it takes effect without an update. |
| Not in the subscription tier | This site's SUBSCRIPTION excludes the operation. |
The operator, under Administration → Plans. |
| Role missing | Subscription and tier allow it, the user's role does not carry it. | The operator, under Administration → Roles. |
The Available to me and Reason columns refer to the signed-in user. Looking something up for someone else means checking their role, not your own.
A suspended subscription does not revoke modules
When the license reads Not licensed, only updates are blocked. Booked modules keep running. A module is withdrawn solely by the license service issuing a confirmation without it.
What the states mean¶
| State | Meaning | Effect |
|---|---|---|
| Inactive | No license service configured on this system. | None. |
| Not checked | No key entered, or no confirmation received yet. | Notice for administrators. Updates remain possible. |
| Licensed | Valid subscription. | None. |
| Check outdated | The license service was unreachable recently. | Notice on this page. The license remains valid. |
| Grace period | The subscription term has expired, the grace period is running. | Warning with the remaining days. Updates remain possible. |
| Not licensed | Subscription cancelled/suspended, or grace period expired. | Warning for all users. Updates are blocked. |
| Read-only without license | From 1 February 2027: no valid key, or subscription cancelled/suspended, or grace period expired. | Warning for all users. Read-only mode and no optional modules, see below. |
The running system keeps working normally in every one of these states except Read-only without license. Administration → Updates repeats the same state, but read-only: it explains why an update is blocked. The key itself is only maintained under Subscription & Modules.
In the other states only updates are blocked. A rollback to a previously installed version always stays available.
Grace period¶
After the subscription term ends, a grace period of 21 days by default
(LICENSE_GRACE_DAYS) runs before the status changes to Not licensed. It
covers exactly the cases that are not payment problems: a renewal in progress,
a maintenance window, a firewall change.
A failed check attempt — license service unreachable, network error — does not change the status. It is recorded as Last error on the page, and the last confirmation received stays valid.
Read-only without license¶
From 1 February 2027, a system without a valid license is read-only. This applies when no key is entered, when the license service never confirmed the key, and when a subscription is cancelled or suspended or its grace period has expired. Until that day the system runs fully; administrators see a notice with the date at the top.
After that, viewing, searching, printing (including calibration certificates) and exports keep working, with no end date. Creating, changing and deleting are blocked, as are updates and the optional modules. No data is lost.
The grace period and a license service that is temporarily unreachable are not affected: as long as the subscription runs, the system keeps working without a fresh confirmation.
As soon as a valid license is entered and confirmed under Subscription & Modules, the write protection is lifted immediately, without reinstalling.
Automatic check¶
The scheduled license:check run checks once a day. The exact time is derived
from the installation itself so that not all systems check at once.
Trigger a check manually:
Without --force the command exits if the last check is still current. In the
UI, Check now does the same.
Data transmitted¶
Each check sends exactly four values to the license service:
| Field | Content |
|---|---|
license_key |
The stored license key |
instance_id |
Random ID of this installation (generated once) |
product_version |
Running calServer version |
image_tag |
Active Docker image tag |
No customer, device, calibration or usage data. The instance_id is a
random UUID unrelated to customer data; it prevents a license confirmation
from being copied from one system to others.
Environment variables (host .env)¶
| Variable | Meaning | Default |
|---|---|---|
LICENSE_SERVER_URL |
Base URL of the license service | — (empty = disabled) |
LICENSE_PUBLIC_KEY |
Ed25519 public key of the service (hex or Base64) | — (empty = disabled) |
LICENSE_GRACE_DAYS |
Grace period in days after the term ends | 21 |
LICENSE_CHECK_INTERVAL_HOURS |
Interval between two checks | 24 |
LICENSE_HTTP_TIMEOUT |
Timeout against the license service, in seconds | 15 |
Both mandatory values must be set, otherwise the license check stays inactive. The public key is not a secret; the matching private key lives exclusively in the license service.
Troubleshooting¶
Status stays Not checked although a key is entered
The license service is unreachable or rejects the key. The reason is shown on
the page under Last error. Check outbound HTTPS connectivity to the address
in LICENSE_SERVER_URL.
Status Not licensed although the subscription is active
Trigger Check now first. If it persists, contact calHelp — the block then comes from a signed response of the license service, not from the system.
After restoring a backup onto a different server
The instance_id comes along with the backup; the confirmation stays valid. If
the system is set up from scratch instead, a new instance_id is generated and
the key has to be entered once more.
Key was encrypted with a different APP_KEY
After an APP_KEY change the stored key can no longer be read. Simply enter it
again.