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.
Storage surface. The service exposes a single, flat storage surface: disk or s3 (AWS S3 or any S3-compatible store). Configure it with CYBORGDB_DB_TYPE plus the matching 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, SDK-supplied indexes, revocation).

Embedding Model Cache

Text embedding_model indexes resolve and download their model on first use. These variables control where the model is cached and whether a cache miss is allowed to reach the model hub. When a model is unavailable — the hub is unreachable, or CYBORGDB_EMBED_OFFLINE=1 and the model is not in the cache — upsert and query calls that embed contents/query_contents return HTTP 503 with a Retry-After: 30 header. Calls on pre-computed vectors are unaffected.
List the models the service currently supports with GET /v1/embedding-models.

Storage Backend

Pick either disk or s3. If CYBORGDB_DB_TYPE is unset, the service defaults to disk.

Disk (default)

Persistent local key-value storage with no external dependency.

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: environment variables > .env > YAML file. 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_.
CyborgDB accepts disk or s3. Set CYBORGDB_DISK_PATH if you use a custom directory for the disk store.
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.