Skip to main content
CyborgDB Service is configured through environment variables (or an optional YAML config file). Every value below is settable in both places; environment variables override the file on conflict.
v0.17 storage refactor. The service now exposes a single, flat storage surface: memory, disk (embedded RocksDB), or s3 (AWS S3 or any S3-compatible store). The previous standalone, postgres, and redis backends — and the catch-all CYBORGDB_CONNECTION_STRING — are gone. If you are upgrading from v0.16: switch standalonedisk and replace CYBORGDB_CONNECTION_STRING with the new CYBORGDB_DISK_PATH / CYBORGDB_S3_* variables.

API Key and Tiers

Free tier vs paid. CYBORGDB_API_KEY is the single switch between the two:
  • Unset → free tier. cyborgdb-core enforces a 1M-item-per-index cap. At startup the service logs CYBORGDB_API_KEY not set — the service will run in free tier. For evaluation only.
  • Set to a paid key (from the CyborgDB dashboard) → unlimited items, full feature set.
  • Set to a demo key (from cyborgdb.get_demo_api_key() / getDemoApiKey() / cyborgdb.GetDemoAPIKey(...)) → also free tier, time-limited. Useful for evaluating without dashboard signup.
This key controls licensing only. Request authentication is a separate concern, gated by CYBORGDB_SERVICE_ROOT_KEY (see RBAC / Multi-Tenancy).
Storage configuration is optional — disk is used by default.

RBAC / Multi-Tenancy

CYBORGDB_SERVICE_ROOT_KEY is the single source of truth for request authentication. Leave it unset (the default) and authentication is disabled — every request is accepted, and the service logs a startup warning to that effect. Set it and authentication turns on: routes then accept only the root key or a per-user cdbk_… token minted under it, sent in the X-API-Key header. See the Multi-Tenancy guide for the full operator playbook (key kinds, provisioning users, KMS-backed constraint, revocation).

Storage Backend

Pick one of memory, disk, or s3. If CYBORGDB_DB_TYPE is unset, the service defaults to disk.

Disk (default)

Embedded RocksDB. Persistent local key-value storage with no external dependency.

Memory

In-process storage. Nothing persists across restarts. Use only for tests and ephemeral indexes.

S3

AWS S3 or any S3-compatible store (MinIO, Cloudflare R2, …).

S3 credential resolution

The S3 client resolves credentials independently of any KMS client:
  • On AWS (EC2 / ECS / EKS), real S3. Leave all CYBORGDB_S3_* credential variables unset. The AWS default credential provider chain picks up the instance/task role.
  • Off AWS, real S3. Provide AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY (or a mounted AWS profile). The default chain picks them up.
  • S3-compatible endpoint (MinIO, R2, …). Set CYBORGDB_S3_ENDPOINT plus explicit CYBORGDB_S3_ACCESS_KEY / CYBORGDB_S3_SECRET_KEY. A custom endpoint is not AWS — the AWS chain is never used against it, and startup fails fast if the explicit keys are missing.
The CYBORGDB_S3_* namespace is deliberately separate from AWS_* so storage credentials cannot collide with KMS credentials.

Optional Environment Variables

Request authentication is controlled solely by CYBORGDB_SERVICE_ROOT_KEY (see RBAC / Multi-Tenancy). When it is unset, authentication is disabled and every request is accepted — the service logs a startup warning. When it is set, clients must send the root key or a cdbk_ user token in the X-API-Key header, or the request is rejected with 401. This is independent of the free-tier / paid-tier distinction, which is gated only by CYBORGDB_API_KEY.
HTTPS is enabled automatically when both SSL_CERT_PATH and SSL_KEY_PATH are set and both files exist. Otherwise the service starts on HTTP.
Applied to every newly created index. cyborgdb-core caches nothing by default; opt in here per keystore.
GPU-accelerated query is not yet supported by cyborgdb-core. Passing query in GPU_OPERATIONS is silently ignored.
Per-index KMS (BYOK) is configured exclusively via the YAML file’s kms.registry block — see the KMS / BYOK guide. The related environment variable is documented above under RBAC / Multi-Tenancy (INDEX_KEK_CACHE_TTL_SECONDS).

YAML Configuration File

Every setting above is also expressible in a YAML file. The file is resolved in this order (first hit wins):
  1. CYBORGDB_CONFIG_FILE environment variable
  2. ./cyborgdb.yaml, ./cyborgdb.yml, /etc/cyborgdb/cyborgdb.yaml
A missing file is fine — the service falls back to env-only. An explicit CYBORGDB_CONFIG_FILE path that doesn’t exist is a hard error.
cyborgdb.yaml
Precedence: init args > environment variables > .env > YAML file > file secrets. Env-var substitution. Any string value in the YAML may reference an environment variable as ${VAR} (required — startup fails if unset) or ${VAR:-default} (uses default when unset). This lets you keep BYOK role ARNs / account IDs out of the checked-in file. A variable set to the empty string counts as unset.

Configuration Examples

Docker

Pass any of the variables above to docker run with -e:
Or use an --env-file:

Troubleshooting

Set CYBORGDB_API_KEY. Check for typos. Keys start with cyborg_.
v0.17 only accepts memory, disk, or s3. The legacy standalone, postgres, and redis values are gone. If you were on standalone, switch to disk and set CYBORGDB_DISK_PATH if you used a custom directory.
With CYBORGDB_S3_ENDPOINT set, the AWS default credential chain is bypassed entirely. Provide CYBORGDB_S3_ACCESS_KEY and CYBORGDB_S3_SECRET_KEY explicitly.
Both SSL_CERT_PATH and SSL_KEY_PATH must be set and both files must exist on disk before the service starts. Missing either falls back to HTTP silently.