dbtrail
dbtrail EE

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):

  1. $DBTRAIL_LICENSE, an explicit path, if the variable is set.
  2. /etc/dbtrail/license.lic, the standard system location.
  3. ./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 license

DBTRAIL_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:

CodeMeaning
0enterprise features active: status valid, or within the 30-day commercial grace window
1anything 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 $?
0

No 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 $?
1

When 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 found

The status words

StatusEnterprise featuresMeaning
validonSignature good, not yet expired, build within the updates window.
graceonPast 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.
expiredoffPast expiry + grace (a commercial license), or past expires_at (a trial, which has no grace).
updates-lapsedoffThis binary was built after the license's updates_until date. Run an older release, or renew.
invalidoffFile present but the signature/format is bad, an explicit DBTRAIL_LICENSE is unusable, or the claims schema is newer than this build supports.
missingoffNo 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 becomes expired and features switch off.
  • Trial licenses get no grace. A trial goes straight from valid to expired on 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 type is 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:

FieldMeaning
customerThe licensed organization.
typecommercial or trial (drives the grace rule above).
expires_atExpiry date (YYYY-MM-DD).
updates_untilNewest build date this license accepts (YYYY-MM-DD).
featuresEnabled feature names: audit, forensics, rbac, sso (see Enterprise features).
instancesContractual instance count (reported, not enforced).

Renewals and sales

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).

On this page