Licensing & Tiers

RelataDB ships as a single binary with three deployment profiles — free, server, and cluster. The engine is identical on every profile: every protocol door, at-rest encryption, disk-first paging, columnar Arrow, bi-temporal, identity, provenance, governance, MCP, and hybrid search are available everywhere.

A license controls exactly two numbers:

ParameterTypeMeaning
storage_max_gbu64Storage cap in GB. 0 = unlimited.
max_tenantsu32Maximum tenant count. 0 = unlimited.
free (no license)servercluster
Engine / doors / governancefullfullfull
Storage (storage_max_gb)10 GB (fixed)license value (0 = unlimited)license value (0 = unlimited)
Tenants (max_tenants)1 ("default")1 (enforced)license value (0 = unlimited)
Tenancy modesinglesinglesingle (1) or multi (>1)
Nodes11many (multi-node)

Multi-tenancy is a cluster-only capability. RELATA_TENANCY_MODE=multi is rejected at startup on free / server (which are fixed at 1 tenant); it is accepted on cluster when max_tenants > 1. Bind address, TLS, and rate-limit defaults are profile-scoped overridable defaults, not license gates — every door honors RELATA_*_BIND on every profile.


How the storage cap is enforced

Every POST /ingest measures total_stored_bytes — the sum of RAM-resident row payload bytes plus disk-spilled Parquet segment bytes. On free the cap is 10 GB; on a licensed node it is the license's storage_max_gb (0 = unlimited). Double-counting is not possible: rows move atomically from RAM to disk when the RAM cap is hit.

ThresholdBehaviour
< 90% of capWrite accepted silently
≥ 90%Write accepted; server logs a soft-warn
≥ 100%Write rejected — HTTP 402 Payment Required

The Prometheus gauge relata_store_total_stored_bytes tracks current consumption so you can alert before hitting the wall.


Activating a license

When you purchase or renew a RelataDB license, you receive an activation blob from Relata. Install it on the node that will run the server:

relata init --config-data <blob>

The binary verifies the license, writes it to ~/.relata/node.dat, and reads it at startup. Run relata init before relata serve on a fresh node, or restart the server to pick up a renewed/changed license.

You can inspect the active license at any time:

relata config --print-template     # shows the resolved NodeConfig
curl localhost:9090/platform/license    # the server's reported tier + caps

To obtain a license, renew, or change tier (storage, tenant count, region count), contact Relata support — licenses are issued and signed by Relata and cannot be self-generated.


Grace, expiry, and tamper protection

  • Expiry. A license carries an expiry timestamp. Past expiry, the server continues running under a short grace window (loud startup warning), then refuses new writes while keeping reads available so you can export your data.
  • Grace tokens. Relata may issue short grace extensions for renewals in flight; the operator applies them with relata init exactly like a full license.
  • Tamper protection. Licenses are cryptographically signed by Relata and verified at startup. A modified, forged, or downgraded license is rejected; the engine never silently falls back to a higher tier than the signed license allows. Anti-escalation is enforced server-side — a trial/free-tier signature cannot unlock server or cluster caps.

Capabilities by tier

The engine is full on every tier. The license numbers (storage_max_gb, max_tenants) and the cluster-only multi-tenant capability are the only things that differ.

Capabilityfreeservercluster
Relational · graph · vector · full-text · hybrid search
Bi-temporal · identity · provenance · governance · MCP
All protocol doors (S3, ClickHouse, Neo4j, Redis, Mongo, Bolt, Flight, pgwire)
At-rest encryption · disk-first paging · columnar Arrow
Agent memory · cognitive verbs · framework adapters
Multi-tenant (strict isolation)✓ (max_tenants > 1)
Multi-region · sharding · hot-standby
Storage cap10 GBstorage_max_gbstorage_max_gb
Tenant cap11max_tenants

Prometheus monitoring

MetricTypeDescription
relata_store_total_stored_bytesgaugeTotal stored bytes (hot + spilled) — metered against storage_max_gb
relata_store_disk_segment_bytesgaugeBytes spilled to disk segments
relata_store_disk_segment_countgaugeNumber of on-disk segments