Licensing
Installing and verifying a dbtrail EE license. The status words, expiry, the 30-day grace window, and the perpetual-fallback updates model
dbtrail-ee is the commercial dbtrail binary: the full open-source core
plus enterprise features that activate from a signed license file. One
binary serves every customer: features turn on from the license claims,
not from build flags.
The core is never gated
A missing, expired, or invalid license never stops capture, query, or recovery. Licenses gate enterprise features only. See Enterprise features.
Validation is offline: an Ed25519 signature checked against a public key embedded in the binary. No network call is ever made, so air-gapped installs are fully supported.
Installing a license
You receive a .lic file. Put it where the binary looks, or point at it
explicitly.
Search order (first match wins):
$DBTRAIL_LICENSE, an explicit path, if the variable is set./etc/dbtrail/license.lic, the standard system location../dbtrail.lic, the current working directory (a development convenience).
The simplest install:
sudo install -D -m 0644 acme.lic /etc/dbtrail/license.lic
dbtrail-ee license # verify (see below)Or point at an arbitrary path:
export DBTRAIL_LICENSE=/opt/dbtrail/acme.lic
dbtrail-ee licenseDBTRAIL_LICENSE is authoritative: when it is set, no other path is
consulted. If the file it names is missing, unreadable, or invalid, the
result is invalid at that path: the binary will not silently fall
through to a stale /etc/dbtrail/license.lic. A typo in the variable
must never activate the wrong license. Unset it to use the implicit
chain.
When DBTRAIL_LICENSE is unset, the implicit chain scans past
unreadable or corrupt files to the first license that verifies (a corrupt
higher-priority file cannot shadow a valid lower one). If nothing
verifies but a corrupt file was seen, the status is invalid at that
file, not missing.
Verifying a license
dbtrail-ee license prints the active status, the claims, and a verdict
for every candidate path. It needs no license itself and makes no
changes.
Exit codes:
| Code | Meaning |
|---|---|
0 | enterprise features active: status valid, or within the 30-day commercial grace window |
1 | anything else: grace elapsed, trial expired, updates-lapsed, invalid, or missing |
So dbtrail-ee license || alert catches a lapse from cron.
A healthy commercial license:
$ dbtrail-ee license
status: valid
file: /etc/dbtrail/license.lic
customer: Acme Corp
type: commercial
expires: 2027-07-03 (updates until 2027-07-03)
instances: 5 (contractual — reported, not enforced)
features: audit, forensics
enterprise features: true
candidate paths (priority order):
- /etc/dbtrail/license.lic: valid
- dbtrail.lic: not found
renewals / sales: https://dbtrail.com/pricing — contact@dbtrail.com
$ echo $?
0No license installed:
$ dbtrail-ee license
status: missing
No license found. Search order:
- /etc/dbtrail/license.lic
- dbtrail.lic
Set DBTRAIL_LICENSE or place the file at /etc/dbtrail/license.lic.
enterprise features: false
candidate paths (priority order):
- /etc/dbtrail/license.lic: not found
- dbtrail.lic: not found
renewals / sales: https://dbtrail.com/pricing — contact@dbtrail.com
$ echo $?
1When DBTRAIL_LICENSE is set, its path is listed first, tagged
(DBTRAIL_LICENSE), so a wrong-file-wins mistake is diagnosable at a
glance:
candidate paths (priority order):
- /opt/dbtrail/acme.lic (DBTRAIL_LICENSE): valid
- /etc/dbtrail/license.lic: not found
- dbtrail.lic: not foundThe status words
| Status | Enterprise features | Meaning |
|---|---|---|
valid | on | Signature good, not yet expired, build within the updates window. |
grace | on | Past expires_at but within the 30-day commercial grace window. Features still work; a warning prints on every start. Commercial licenses only: trials never enter grace. |
expired | off | Past expiry + grace (a commercial license), or past expires_at (a trial, which has no grace). |
updates-lapsed | off | This binary was built after the license's updates_until date. Run an older release, or renew. |
invalid | off | File present but the signature/format is bad, an explicit DBTRAIL_LICENSE is unusable, or the claims schema is newer than this build supports. |
missing | off | No license file found anywhere in the search chain. |
expired, updates-lapsed, invalid, and missing all leave the full
OSS core running; only the enterprise features are withheld.
Expiry, grace, and the updates window
Licenses carry three date claims (expires_at, updates_until, and
issued_at) and one schema version. Two independent clocks decide
whether features are on.
1. Expiry (expires_at). Evaluated against the current date (the
license works through the whole expiry day).
- Commercial licenses get a 30-day grace period past
expires_at. During grace, every enterprise feature keeps working and a renewal warning prints on every invocation: a recovery safety net must never hard-stop mid-incident just because a renewal is a few days late. After grace, status becomesexpiredand features switch off. - Trial licenses get no grace. A trial goes straight from
validtoexpiredon its expiry date, and the banner says the trial ended (not the generic "expired") so you are not invited to wait out a grace window that never applies. - A license with an empty/unknown
typeis treated as commercial (the conservative choice for older licenses).
2. The updates window (updates_until). This is the "upgrade
dbtrail-ee" clock, and it is about the binary's build date, not the
calendar. A build produced after updates_until reports
updates-lapsed and disables enterprise features, even if expires_at
is still in the future. The license holder may run any release built
within the window forever (perpetual fallback): pin to an older
dbtrail-ee release and the features come back. To run a newer build,
renew. (Dev builds carry no build date and skip this check.)
Schema compatibility (the "upgrade dbtrail-ee" case). Each license
carries a claims-schema version. A license signed for a newer schema
than the running build understands is rejected as invalid, because
that build cannot know what newer claim semantics grant. The fix is to
upgrade dbtrail-ee to a release that understands the schema; renewing
would only re-issue the same too-new schema. dbtrail-ee license and the
startup banner say exactly this when it happens.
The startup banner
Every dbtrail-ee invocation evaluates the license first and, for any
non-valid, non-missing state, prints a one-line warning to stderr
before the command runs (valid stays silent so it never pollutes
pipelines; missing is silent because unlicensed use is legitimate).
One exception cuts across every status: a candidate license file that
EXISTS but cannot be read (a directory bind-mounted over a missing host
file, a root-owned 0600 read by a non-root process) always warns:
"present but broken" is an operator's declared intent to run licensed
and is never treated as silent unlicensed mode, even when a
lower-priority file verified and the boot is otherwise valid.
Examples:
warning: license for "Acme Corp" expired on 2026-07-01 — enterprise features disable after the 30-day grace period. Renew at https://dbtrail.com/pricing or contact@dbtrail.com.warning: trial ended on 2026-07-01 — enterprise features disabled (trials have no grace period). Core capture/query/recovery continue to work. Purchase at https://dbtrail.com/pricing or contact@dbtrail.com.If your license includes the audit feature but is not currently enabled,
a second unmissable line prints as well. See
when an audit license lapses.
What "instances" means
The instances claim is contractual (honor-system). It is reported by
dbtrail-ee license and named in your agreement, but the binary never
enforces it: dbtrail does not count or cap the number of running
copies. It is there for reconciliation, not as a technical control.
The claim fields
dbtrail-ee license surfaces every claim in the signed file:
| Field | Meaning |
|---|---|
customer | The licensed organization. |
type | commercial or trial (drives the grace rule above). |
expires_at | Expiry date (YYYY-MM-DD). |
updates_until | Newest build date this license accepts (YYYY-MM-DD). |
features | Enabled feature names: audit, forensics, rbac, sso (see Enterprise features). |
instances | Contractual instance count (reported, not enforced). |
Renewals and sales
- Renew / purchase: dbtrail.com/pricing
- Contact: contact@dbtrail.com
These are the single source of truth quoted by every banner and by
dbtrail-ee license.
See also: Enterprise features (what each feature gates) ·
Audit trail (the audit feature in detail).