NewRelease 0.12.3 is out: Engine v0.12.3, Dashboard 0.5.2, Helm 0.12.3, the four SDKs, CLI 0.8.2 and MCP 0.12.3Release 0.12.3 is outSee what's new →

Configuration

Dakera is configured entirely through environment variables; there is no configuration file. This page is the reference for operators running v0.12.3: every variable the server reads, the values it accepts and its default, where data lives on disk, the settings you can change at runtime, and the variables that were removed or renamed.

If you are upgrading from v0.11.108, read Upgrading to v0.12 as well: it explains how each existing setting is read after the upgrade.

Startup checks (v0.12) — Every DAKERA_* variable that is set is checked at startup against the shape of value it accepts, and unknown names are reported with the closest real name. A fresh install with a bad value or unknown name is refused (exit code 78); a deployment that already holds data starts, logs a CONFIGURATION WARNING and lists it under config_warnings in GET /health. DAKERA_CONFIG_LENIENT=1 starts anyway on any deployment. Run dakera --check-config with the new image against your environment and data volume to see every finding without starting the server. An empty value (VAR=) counts as unset.

Variable reference

Dakera is configured through environment variables only. The server registers every variable it reads (210 names: 203 DAKERA_*, REEMBED_* and the deprecated RATE_LIMIT_* aliases) together with the shape of value each accepts; a test keeps the registry equal to what the code reads, so the tables below are the complete list for v0.12.0; v0.12.2 adds DAKERA_SESSION_IDLE_TIMEOUT_SECS, DAKERA_MAX_MEMORY_CONTENT_BYTES, DAKERA_ROCKSDB_RECORD_FORMAT and DAKERA_VECTOR_CACHE_BYTES, listed below. v0.12.3 adds the variables in Added in v0.12.3. The machine-readable lever list (recall and ranking levers with ranges) ships with the server as .engine-feature-flags.json.

Added in v0.12.3

v0.12.3 adds the variables below, all optional. Set them only with the v0.12.3 image: an older server does not know them. Defaults that change: DAKERA_RERANK_MAX_CANDIDATES unset now caps the reranker at the pool a top_k 10 recall builds (195 pairs with the default settings; 0 = no cap), DAKERA_HNSW_CACHE_MAX defaults to 10000 (was 50) under the new byte budget, and DAKERA_MAX_CONCURRENT_INFERENCES defaults to half the cores, at least 4 (was 4).

Server and network

Variable Type / accepted Default Meaning
DAKERA_HTTP_HEADER_READ_TIMEOUT_SECS integer, clamped to [1, 86400] 30 Seconds a client has, on the REST port, to send a complete request head. An idle keep-alive connection, and an HTTP/2 connection on which no request starts, is closed after the same time. Behind a proxy or load balancer, keep its upstream idle timeout below it.
DAKERA_MAX_CONNECTIONS integer, clamped to [1, 1000000] 10000 Most connections served at once; one more is closed at once.
DAKERA_SHUTDOWN_DRAIN_SECS integer, clamped to [0, 3600] 8 Longest the graceful shutdown waits for connections to finish. Keep it below the orchestrator's grace period (Kubernetes 30 s, docker stop 10 s).
DAKERA_ALLOWED_HOSTS host names, comma-separated (* = any) unset With authentication off only: the dotted host names the server answers besides localhost, IP addresses, single-label names and private names such as *.internal; any other Host gets 421 HOST_NOT_ALLOWED. /health* is always served.
DAKERA_ADMISSION_WAIT_SECS integer >= 0 20 How long a store, batch store or recall waits for capacity before it answers 429 with Retry-After; 0 refuses at once. At most half of DAKERA_REQUEST_TIMEOUT.
DAKERA_INTERACTIVE_MIN_CORES integer > 0 half the cores, at least 1 Cores that ingest leaves to waiting searches; with no search waiting, ingest uses every core.

Document import

Variable Type / accepted Default Meaning
DAKERA_DOCUMENTS boolean on The document import routes; off, they answer 501 FEATURE_DISABLED.
DAKERA_DOCUMENT_MAX_BYTES integer > 0 26214400 (25 MiB) Largest source document (413).
DAKERA_DOCUMENT_MAX_TEXT_BYTES integer > 0 20971520 (20 MiB) Most text one document may produce (413).
DAKERA_DOCUMENT_MAX_CHUNKS integer > 0 5000 Most chunks per document; the job fails with 413 before any write.
DAKERA_DOCUMENT_CHUNK_TOKENS integer, clamped to [32, 8192] 400 Default token budget of a chunk, then clamped to the embedding model's limit; per request chunking.max_tokens.
DAKERA_DOCUMENT_CHUNK_OVERLAP_TOKENS integer, clamped to [0, 1024] 50 Default overlap between chunks (at most a quarter of the budget); per request chunking.overlap_tokens.
DAKERA_DOCUMENT_EXTRACT_TIMEOUT_SECS integer > 0 60 Longest one PDF or DOCX parse may run (504 EXTRACTION_TIMEOUT).
DAKERA_DOCUMENT_EXTRACT_MEMORY_MB integer > 0 1024 Memory limit of the sandboxed parser process.
DAKERA_DOCUMENT_EXTRACT_CONCURRENCY integer > 0 2 PDF or DOCX parses at once. Parsing can use up to this many times DAKERA_DOCUMENT_EXTRACT_MEMORY_MB on top of the server: leave room in the container's memory limit.

Recall and ranking

Variable Type / accepted Default Meaning
DAKERA_NEIGHBORHOOD_MODE inline, separate, off inline Where a recall that does not set neighborhood_mode returns session context: after the ranked results, in context_memories, or not at all.
DAKERA_NEIGHBORHOOD_EVENT_TIME boolean off Neighbourhood window on event time instead of ingest time, nearest neighbours first.
DAKERA_RECALL_RANK_DEPTH integer, clamped to [1, 1000] 10 Ranking depth floor: the first k results of a top_k = k recall are the first k of a top_k = depth recall for every k up to it. 1 restores the v0.12.2 sizing.
DAKERA_RECALL_COLLAPSE_DERIVED boolean off One result per source memory: a sentence sub-memory and its source share one slot, returned as the source with matched_text and matched_ids.
DAKERA_RECALL_EXCLUDE_SUMMARIES boolean off Keep session summaries out of recall unless the request sets include_summaries: true.
DAKERA_RECALL_SESSION_CAP integer >= 0 0 On list and aggregation questions, at most this many results of one session in the first top_k; 0 = no cap.
DAKERA_SENTENCE_DECOMP boolean on Sentence sub-memories at write time. Off: none are derived on any write path.
DAKERA_SUPERSEDES_EVENT_TIME boolean on Order supersession by the two memories' event dates when both carry one, so a dated history imported in one burst still marks its outdated facts.
DAKERA_RERANK_CACHE_ENTRIES integer >= 0 65536 Exact reranker score cache (identical inputs are scored once); 0 = off.
DAKERA_RERANK_PASSAGE_TOKENS integer >= 0 0 Most passage tokens of one reranker pair; 0 = as many as fit. Bounds rerank cost on long memories.
DAKERA_LONG_CONTENT_WINDOWS boolean off A text longer than the embedding model reads also derives overlapping windows, so a fact past the model's limit is reachable by vector search.

Inference and memory

Variable Type / accepted Default Meaning
DAKERA_EMBED_PREPACK boolean (unset = auto) auto Weight prepacking for the CPU embedder: faster inference for more memory. Auto: on under a container memory limit when the copies fit in 20% of it.
DAKERA_RERANK_PREPACK boolean (unset = auto) auto The same for the CPU reranker; scores are unchanged.
DAKERA_HNSW_CACHE_BYTES integer >= 0 (bytes) 40% of the memory limit (or of the host's memory) Memory budget of the vector index cache; indexes that fit are built once.
DAKERA_MEM_TRIM_INTERVAL_SECS integer >= 0 60 How often freed memory is returned to the operating system; 0 = only under memory pressure.

AutoPilot and audit

Variable Type / accepted Default Meaning
DAKERA_AUTOPILOT_DEDUP_MODE off, report, merge off AutoPilot deduplication: none, report duplicate groups only, or merge them (the previous default).
DAKERA_AUTOPILOT_DEDUP_CROSS_SESSION boolean false In merge mode, also merge memories of two different sessions.
DAKERA_AUTOPILOT_CONSOLIDATE_CROSS_SESSION boolean false Let consolidation's own selection group memories of different sessions.
DAKERA_AUTOPILOT_TRASH_RETENTION_HOURS integer, clamped to [0, 8760] 168 (7 days) How long memories removed by deduplication or consolidation stay restorable (GET /v1/memory/deduplicated); 0 = no copy.
DAKERA_AUDIT_SAMPLE_RATE number, clamped to [0, 1] 1.0 Share of successful data-plane writes that get an audit line. Errors, deletions, merges, restores and admin requests are always logged.
DAKERA_AUDIT_READ_SAMPLE_RATE number, clamped to [0, 1] DAKERA_AUDIT_SAMPLE_RATE Share of successful reads that get an audit line.

Reading the tables

One data root

Everything Dakera keeps on local disk lives under DAKERA_STORAGE_PATH (alias DAKERA_DATA_DIR): default ./data, and /data in the container images, where it is declared as the volume. Mount one volume there. Each path below derives from the root unless its own variable pins it.

Path Default Override
filesystem backend <data root>/namespaces/... the root itself
write-ahead log <data root>/wal DAKERA_WAL_DIR
WAL snapshots <data root>/wal-snapshots DAKERA_WAL_SNAPSHOT_DIR
RocksDB hot tier and cold-flush journal <data root>/hot DAKERA_ROCKSDB_PATH
warm tier <data root>/cache/warm DAKERA_CACHE_DIR
knowledge graph under <data root> DAKERA_GRAPH_PATH (:memory: = memory only)
cluster outbox <data root>/cluster-outbox DAKERA_CLUSTER_OUTBOX_DIR
cluster node id <data root>/cluster-node-id none
telemetry instance id <data root>/.instance_id none
L2 disk read cache off DAKERA_DISK_CACHE_DIR
model cache HF_HOME (/app/models in the images) HF_HOME (not under the root)

A server locks its data root (.dakera.lock) while it runs; a second server on it refuses to start. Data found at a pre-0.12 default location while the new place is empty is used where it is, with a warning that names the variable pinning it (data_location in /health config_warnings); nothing is moved. DAKERA_DATA_DIR and DAKERA_STORAGE_PATH set to different directories is an invalid value.

Server and network

Variable Type / accepted Default Meaning
DAKERA_HOST text 0.0.0.0 Address the REST and gRPC listeners bind to.
DAKERA_PORT port (0-65535) 3000 REST API port. Anything that is not a port number refuses a fresh install.
DAKERA_GRPC_ENABLED boolean true gRPC listener switch. Since v0.12 every RPC except Health needs an API key.
DAKERA_GRPC_PORT port (0-65535) 50051 gRPC port; no effect while gRPC is off.
DAKERA_REQUEST_TIMEOUT integer >= 0 300 Request timeout in seconds (0 disables it). It is the outer ceiling for REST and gRPC calls; query_timeout_ms (PUT /admin/config) bounds queries inside it.
DAKERA_MAX_BODY_SIZE integer >= 0 10485760 (10 MiB) Largest request body in bytes. Over it the request is refused with 413 PAYLOAD_TOO_LARGE; uploaded backup bundles may inflate to at most 16 times this value.
DAKERA_MAX_MEMORY_CONTENT_BYTES integer > 0 (a 0 or non-number refuses the boot) 100000 v0.12.2: the longest memory content, in UTF-8 bytes (not characters), that any memory write accepts: store, batch store, update, import, a transcript or image caption (413), the merged text of consolidate and summarize, and a session-end summary. On update, a memory already stored above the limit may be updated to content no larger than it is now. Also bounds serialized memory metadata. Read once at the first write.
DAKERA_SESSION_IDLE_TIMEOUT_SECS integer >= 0 14400 (4 h) v0.12.2: a session whose last activity is at least this long ago is ended by the server, exactly as a client end would, with ended_reason: "idle". 0 = the server ends no session that did not set its own idle_timeout_secs. At most 30 days (larger values are clamped). The reaper runs on the cluster leader, every min(timeout/10, 5 min), ends at most 25 sessions per pass and defers under memory pressure. Changeable at runtime as session_idle_timeout_secs (below).
DAKERA_EVENT_BUS_CAPACITY integer > 0 256 Events buffered for the event streams (SSE). A subscriber that falls further behind misses the oldest and receives a stream_lagged event.
DAKERA_API_ADVERTISE text http://localhost:<DAKERA_PORT> Base URL of this node's API that cluster peers use to reach it (cluster mode). When DAKERA_CLUSTER_BIND_ADDR is unspecified, peers also use its host at the gossip port, so the host must be reachable from the other nodes.
DAKERA_PATTERNS_PATH path to a readable JSON file unset Path of a JSON file that replaces the built-in query-routing pattern sets. An unreadable or unparseable file refuses a fresh install.
DAKERA_INTERNAL boolean false Marks the instance as an internal Dakera deployment in telemetry. Leave it unset.

Configuration checking

Variable Type / accepted Default Meaning
DAKERA_CONFIG_LENIENT boolean unset Start although a variable has a value that cannot be honored or an unknown DAKERA_* name is set (the default is used; each is logged and listed in /health config_warnings). Also turns DAKERA_WAL_SYNC=periodic:0 into everywrite with a warning.

Storage and the data root

Variable Type / accepted Default Meaning
DAKERA_STORAGE memory, segmented, lsm, filesystem, fs, s3, minio memory Storage backend. lsm is an alias of segmented, fs of filesystem, minio of s3.
DAKERA_STORAGE_PATH text ./data (/data in the container images) The one data root: everything Dakera keeps on local disk lives under it (see "One data root").
DAKERA_DATA_DIR text unset Alias of DAKERA_STORAGE_PATH (before v0.12 it named the knowledge-graph directory only). Both set to different directories is an invalid value.
DAKERA_GRAPH_PATH text under <data root> Location of the knowledge graph; :memory: keeps it in memory only. Durable by default since v0.12.
DAKERA_S3_BUCKET text unset Bucket of the object-storage backend (required with DAKERA_STORAGE=s3). Give every cluster node its own bucket.
DAKERA_S3_REGION text AWS_REGION, then AWS_DEFAULT_REGION S3 signing region (MinIO accepts us-east-1).
DAKERA_S3_ENDPOINT text AWS_ENDPOINT_URL, else AWS S3 S3-compatible endpoint URL (requests are path-style, as MinIO needs).
DAKERA_S3_TIMEOUT_SECS integer > 0 30 Per-attempt deadline of S3 control requests, seconds.
DAKERA_S3_IO_TIMEOUT_SECS integer > 0 60 Per-attempt deadline of S3 data calls (a GET, a PUT body, one LIST page), seconds.
DAKERA_S3_MAX_RETRIES integer >= 0 3 Retry attempts on transient S3 errors (the server gives up after the first try plus these).
DAKERA_S3_RETRY_MIN_DELAY_MS integer >= 0 500 Minimum back-off between S3 retries, milliseconds (doubles, with jitter).
DAKERA_S3_RETRY_MAX_DELAY_SECS integer >= 0 60 Maximum back-off between S3 retries, seconds.
DAKERA_S3_CONCURRENT_OPS integer >= 0 16 Concurrent object-store operations issued by the storage layer.
DAKERA_VECTOR_VERSIONING boolean false Keep a delta-encoded history of vector versions.
DAKERA_TTL_SWEEP boolean true Switch of the sweep that deletes expired memories and vectors.
DAKERA_TTL_SWEEP_SECS integer > 0 60 Seconds between two TTL sweeps.
DAKERA_FULLTEXT_FLUSH_SECS integer > 0 5 Seconds between flushes of the full-text index to storage.

Tiered storage and RocksDB

Variable Type / accepted Default Meaning
DAKERA_TIERED_STORAGE boolean false Hot / warm / cold tiered storage (S3 cold tier). Not the same as DAKERA_TIERED.
DAKERA_HOT_TIER rocksdb, rocks, memory, mem (any case) rocksdb Hot tier: rocksdb (alias rocks) or memory (alias mem). The RocksDB hot tier is durable; memory keeps the v0.11 tier.
DAKERA_ROCKSDB_PATH text <data root>/hot Directory of the RocksDB hot tier and the cold-flush journal.
DAKERA_ROCKSDB_SYNC boolean true fsync hot-tier writes before acknowledging them. false restores page-cache acknowledgement (a power loss can drop acknowledged writes).
DAKERA_ROCKSDB_BLOCK_CACHE_MB integer >= 0 64 RocksDB block cache (data, index and filter blocks), MiB.
DAKERA_ROCKSDB_RECORD_FORMAT binary, json (any other value refuses the boot) binary v0.12.2: encoding of new RocksDB hot-tier records. binary stores embeddings as raw floats (about a third of the bytes, several times faster to decode); json restores the previous writer. Both are always read, so it can be changed at any restart. v0.12.0 and v0.12.1 read binary records; before starting v0.11.108 on the data, run dakera downgrade, which rewrites them as JSON.
DAKERA_CACHE_DIR text <data root>/cache/warm Warm tier directory (tiered storage only; not the L2 disk cache).
DAKERA_L1_CACHE_SIZE vector count, or byte size such as 512MB 100000 vectors Hot-tier budget: a vector count (100000) or a byte size with a unit (512MB). A bare number of 10,000,000 or more is read as bytes, with a warning.
DAKERA_HOT_TO_WARM_SECS integer >= 0 3600 Seconds before an idle hot-tier record moves to the warm tier.
DAKERA_WARM_TO_COLD_SECS integer >= 0 86400 Seconds before an idle warm-tier record moves to the cold (S3) tier.
DAKERA_AUTO_TIER boolean true Move records between tiers automatically.
DAKERA_TIER_CHECK_INTERVAL_SECS integer > 0 300 Seconds between tier-placement checks.

Write-ahead log

Variable Type / accepted Default Meaning
DAKERA_WAL boolean true Write-ahead log switch (memory, segmented and filesystem backends).
DAKERA_WAL_DIR text <data root>/wal Log directory. An empty value counts as unset.
DAKERA_WAL_SNAPSHOT_DIR text <data root>/wal-snapshots Snapshot directory of the log.
DAKERA_WAL_CHECKPOINT_SECS integer > 0 300 Seconds between checkpoints. A checkpoint rotates and truncates the active segment.
DAKERA_WAL_SYNC everywrite, manual, periodic, periodic:N (N > 0) everywrite When the log is fsynced: everywrite (aliases every-write, every_write), manual, periodic (every 100 writes) or periodic:N with N > 0. periodic:0 refuses the boot on every deployment unless DAKERA_CONFIG_LENIENT=1.

Caches and Redis

Variable Type / accepted Default Meaning
DAKERA_REDIS_URL text unset Redis URL for the shared cache, cross-node cache invalidation and shared locks. Set and unreachable refuses a fresh install; an upgraded deployment lists redis_cache as degraded.
DAKERA_DISK_CACHE_DIR text unset Directory of the L2 on-disk read cache. Set and unopenable refuses a fresh install.
DAKERA_QUERY_EMBED_CACHE boolean true Cache of query embeddings.
DAKERA_VECTOR_CACHE_BYTES byte size: 268435456, 256MB, 1g (a bare number is bytes) 128MB v0.12.2: size of the in-process L1 vector cache (point reads of recently written or read records) at startup. Not the tiered-storage hot tier (DAKERA_L1_CACHE_SIZE). Also changeable at runtime with cache_max_size_bytes.
DAKERA_HNSW_CACHE_MAX integer >= 0 10000 (v0.12.3; was 50) Most namespace HNSW indexes held in memory at once (LRU), within the byte budget DAKERA_HNSW_CACHE_BYTES.
DAKERA_HNSW_CACHE_TTI_SECS integer >= 0 3600 Idle seconds after which a cached index is evicted. Whisper, the visual model and GLiNER are unloaded after the same idle time.
DAKERA_MEM_BACKPRESSURE boolean true Memory backpressure: batch stores and media jobs are refused with 503 + Retry-After above the high-water mark (fail-open without a readable memory limit).
DAKERA_MEM_HIGH_WATER_FRACTION number in (0, 1] 0.85 Fraction of the memory limit (cgroup limit, else physical memory) that admission and backpressure treat as full.
DAKERA_MEM_RECLAIM_MIN_INTERVAL_SECS integer >= 0 30 Minimum seconds between two allocator-reclaim passes under memory pressure.

Authentication, security and audit

Variable Type / accepted Default Meaning
DAKERA_ROOT_API_KEY text unset Bootstrap root API key (super_admin). The server refuses to start with authentication on and no key configured.
DAKERA_AUTH_ENABLED boolean true API key authentication. With it off and DAKERA_CORS_ORIGINS unset only loopback origins may call the API cross-origin, and a state-changing request from another origin is 403 CROSS_ORIGIN_REQUEST_REFUSED.
DAKERA_AUTH_BYPASS_PATHS text /health,/health/ready,/health/live,/metrics,/ Paths served without an API key (comma-separated). Setting it replaces the list; an entry ending in * is a prefix; a bare * matches nothing.
DAKERA_ENCRYPTION_KEY text unset Encryption at rest (AES-256-GCM): 64 hex characters or a passphrase of at least 8 characters; the same on every node. Rotation does not change it (see Security).
DAKERA_RATE_LIMIT_ENABLED boolean true Server-wide rate limit switch (also rate_limit_enabled in PUT /admin/config).
DAKERA_RATE_LIMIT_RPS integer > 0 100 Requests per second. Authenticated gRPC calls draw on it too.
DAKERA_RATE_LIMIT_BURST integer > 0 50 Burst capacity of the rate limit.
RATE_LIMIT_RPS integer > 0 — Deprecated alias of DAKERA_RATE_LIMIT_RPS (honored, with a warning). Both names set to different values is an invalid value.
RATE_LIMIT_BURST integer > 0 — Deprecated alias of DAKERA_RATE_LIMIT_BURST.
DAKERA_CORS_ORIGINS text unset (all origins; loopback only with authentication off) Allowed CORS origins, comma-separated.
DAKERA_CORS_CREDENTIALS boolean false Allow credentials in CORS. Ignored, with a startup warning, unless origins are named (never with a wildcard origin).
DAKERA_HSTS_ENABLED boolean true Send Strict-Transport-Security.
DAKERA_HSTS_MAX_AGE integer >= 0 31536000 max-age of that header, seconds.
DAKERA_CSP_ENABLED boolean true Send Content-Security-Policy.
DAKERA_CSP_DIRECTIVES text default-src 'none'; frame-ancestors 'none' Value of that header.
DAKERA_FRAME_OPTIONS DENY, SAMEORIGIN DENY X-Frame-Options value: DENY or SAMEORIGIN; empty disables the header.
DAKERA_AUDIT_ENABLED boolean true Emit one audit line per request (REST and gRPC).
DAKERA_AUDIT_FORMAT json, text json json, or text for key=value lines.
DAKERA_AUDIT_REQUEST_BODY boolean false Record request bodies (secrets redacted, capped, never before authentication).
DAKERA_AUDIT_RESPONSE_BODY boolean false Record response bodies.
DAKERA_AUDIT_MAX_BODY_SIZE integer >= 0 4096 Bytes of each body recorded; longer bodies are cut.
DAKERA_AUDIT_EXCLUDE_PATHS text /health,/health/ready,/health/live,/metrics Path prefixes never logged. Setting it replaces the list.
DAKERA_ODE_WEBHOOK_URL text unset Base URL of the dakera-ode sidecar; unset disables the memory-stored webhook.
DAKERA_ODE_WEBHOOK_SECRET text unset HMAC-SHA256 signing secret of those webhook payloads (X-Dakera-Signature).
DAKERA_TRACING_ENABLED boolean false OpenTelemetry tracing (endpoint and service name from the standard OTEL_* variables).

Cluster and election

Variable Type / accepted Default Meaning
DAKERA_CLUSTER_MODE boolean false Multi-node clustering.
DAKERA_CLUSTER_SECRET text unset Shared secret (at least 16 characters, identical on every node) for node-to-node routes and gossip. Required in cluster mode, fresh install or upgraded node (v0.12.1; on v0.12.0 an upgraded node started without it). A node without it exits with code 78; generate one with openssl rand -hex 32.
DAKERA_CLUSTER_NODE_ID text generated once, kept in <data root>/cluster-node-id Stable node id; required in cluster mode on a fresh install.
DAKERA_NODE_ID text unset Legacy alias of DAKERA_CLUSTER_NODE_ID; also this node's name in Redis locks. Warned about when it differs from DAKERA_CLUSTER_NODE_ID.
DAKERA_CLUSTER_ROLE primary, leader, master, replica, secondary, follower, standalone replica Initial role: primary (leader, master), replica (secondary, follower) or standalone. An unknown value runs as standalone on an upgraded deployment.
DAKERA_CLUSTER_SEED_NODES text unset Comma-separated host:port addresses of seed nodes; required in cluster mode (the node cannot discover peers without one).
DAKERA_CLUSTER_SEEDS text unset Legacy alias of DAKERA_CLUSTER_SEED_NODES.
DAKERA_CLUSTER_BIND_ADDR text 0.0.0.0:<DAKERA_GOSSIP_PORT> Gossip bind address.
DAKERA_GOSSIP_BIND text unset Legacy alias of DAKERA_CLUSTER_BIND_ADDR.
DAKERA_GOSSIP_PORT port (0-65535) 7946 Gossip port.
DAKERA_CLUSTER_OUTBOX_DIR text <data root>/cluster-outbox Durable outbox of broadcasts a peer has not acknowledged (bounded at 64 MiB).
DAKERA_CLUSTER_TOMBSTONE_RETENTION_SECS integer > 0 604800 (7 days) How long a delete tombstone is kept; set it above the longest node outage you tolerate without wiping the node.
DAKERA_CLUSTER_MAX_CLOCK_DRIFT_MS integer > 0 60000 A replicated change whose version is further ahead of this node's clock is refused and retried; a node whose own clock is that far ahead refuses writes.
DAKERA_ELECTION_LEASE_MS integer > 0 15000 Leader lease and the one failure-detection timing; every other cluster timing derives from it. Accepted 1000 to 600000.
DAKERA_ELECTION_AUTO_ELECT boolean true false: the node never stands for election; it still votes and follows.

Embedding models and inference

Variable Type / accepted Default Meaning
DAKERA_MODEL bge-large, bge-m3, minilm, bge-small, e5-small, modernbert-embed-base, gte-modernbert-base, colbert-small (plus legacy aliases) bge-large Embedding model. Unset = bge-large; an unrecognized name refuses a fresh install. Ignored under DAKERA_TIERED. The store records the model. From v0.12.1 a start with another model of the registry re-embeds the store in the background, one agent namespace at a time, each answered with its own model until its turn (progress in /health embedding_model_change). Where that cannot run (DAKERA_TIERED=1, late-interaction scoring, the visual lane, or a recorded model this build does not know) the start is refused unless DAKERA_ALLOW_MODEL_CHANGE is set.
DAKERA_ALLOW_MODEL_CHANGE boolean false Acknowledge that the store was embedded by another model; it re-embeds nothing (follow with POST /admin/namespaces/migrate-dimensions). From v0.12.1 needed only where the background model change cannot run (see DAKERA_MODEL).
DAKERA_BACKEND onnx, static, candle onnx Embedding backend. bge-m3 and colbert-small run on onnx only.
DAKERA_TIERED boolean false Tiered embedding engine: a fast static embedding on write, upgraded to the quality model in the background. Always bge-large; not combinable with late interaction. Not the same as DAKERA_TIERED_STORAGE.
DAKERA_MAX_SEQ_LENGTH integer > 0 model maximum (bge-m3: 2048) Truncation length in tokens, clamped to [16, model maximum] (bge-m3 up to 8192). Text models only.
DAKERA_MRL_DIMENSION integer > 0 unset Matryoshka truncation of transformer embeddings to the first N dimensions.
DAKERA_MRL_DIM integer > 0 256 Output dimension of the static (Model2Vec) backend; leave unset with the published images.
DAKERA_BGE_QUERY_INSTRUCTION boolean true Apply the bge query instruction to query embeddings of the bge models.
DAKERA_MODEL_PATH text unset Directory of pre-fetched embedding model files (air-gapped installs).
DAKERA_MODEL_PATH_SKIP_VERIFY boolean false Lift the SHA-256 check of files under DAKERA_MODEL_PATH, for a deliberately different export (logged at WARN).
DAKERA_MODEL2VEC_PATH text unset Path of a Model2Vec vocabulary matrix replacing the one bundled in the binary (static backend).
DAKERA_USE_GPU boolean false Run embedding and reranker inference on the CUDA GPU (GPU image).
DAKERA_GPU_MEM_LIMIT_GB integer >= 0 15 CUDA memory arena limit in GiB; only with DAKERA_USE_GPU.
DAKERA_ONNX_POOL_SIZE integer > 0 4 Sessions of the batched inference pool; the GPU path only (the CPU embedder runs one text per worker).
DAKERA_ONNX_BATCH_SIZE integer > 0 32 Most texts per ONNX run on the batched (GPU) path.
DAKERA_MAX_CONCURRENT_INFERENCES integer > 0 half the cores, at least 4 (v0.12.3; was 4) Concurrent document embeddings (stores, batch ingest, sentence sub-memories). Queries take their own permits.
DAKERA_RERANKER_MODEL bge-reranker-v2-m3, bge-reranker-base bge-reranker-v2-m3 Cross-encoder: bge-reranker-v2-m3 (alias v2-m3) or bge-reranker-base (alias base). An unknown name runs the default, with a warning.
DAKERA_RERANKER_ONNX_FILE text onnx/model_int8.onnx ONNX file inside the reranker repo (an override is not SHA-256 pinned).
DAKERA_RERANK_WARMUP boolean true Load the reranker in the background at boot (off: 0 or false).
DAKERA_RERANK_MAX_CANDIDATES integer >= 0 unset Most candidates any recall or /v1/memory/search sends to the cross-encoder. From v0.12.3, unset = the pool a top_k 10 recall builds (195 with the default settings) and 0 = the whole pool (before v0.12.3, unset meant the whole pool). rerank_candidates per request.
DAKERA_WHISPER_MODEL whisper-base (alias whisper) whisper-base Speech-to-text model: whisper-base (multilingual, default, recommended), whisper-tiny.en (lightest English), whisper-base.en (better English), whisper-tiny (lightest multilingual) or whisper-small (multilingual, quality). Multilingual models detect the language and record it as the memory's lang. See Multimodal memory.
DAKERA_WHISPER_MODEL_PATH text unset Directory of local whisper files (encoder_model.onnx, decoder_model.onnx, tokenizer.json).
DAKERA_VISION_MODEL colmodernvbert (alias vision) colmodernvbert Visual model (the registry's only row).
DAKERA_VISION_MODEL_PATH text unset Directory of local visual-model files (model.onnx, tokenizer.json).
DAKERA_EXTRACTOR_PROVIDER none, gliner, openai, openrouter, ollama, anthropic unset Server-default entity-extraction provider. Unset = per namespace (GLiNER when extract_entities). An invalid configuration is 501.
DAKERA_EXTRACTOR_MODEL text unset Model name sent to the provider.
DAKERA_EXTRACTOR_BASE_URL text unset Provider base URL.
DAKERA_EXTRACTOR_TIMEOUT_SECS integer >= 0 30 Provider timeout, clamped to 1-300 seconds.
DAKERA_EXTRACTOR_ALLOW_PRIVATE_URLS boolean false Allow private address ranges as extractor base URLs (the SSRF guard refuses them otherwise).

Search, indexes and languages

Variable Type / accepted Default Meaning
DAKERA_SEARCH_MODE hybrid, binary, float, scalar (alias sq), rabitq hybrid How HNSW searches. rabitq walks RaBitQ codes and re-ranks with exact distances (a latency feature, not a memory saving).
DAKERA_RABITQ_BITS integer >= 0 1 Bits per dimension for rabitq, 1-8 (out of range is clamped with a warning).
DAKERA_SCORING_STRATEGY single-vector, late-interaction single-vector late-interaction reranks with MaxSim; needs DAKERA_MODEL=colbert-small (or the visual lane) and cannot be combined with DAKERA_TIERED.
DAKERA_ANN_THRESHOLD integer >= 0 1000 Smallest namespace served by an ANN index; below it, exact scan.
DAKERA_HNSW_EF_SEARCH integer > 0 100 HNSW query exploration width.
DAKERA_HNSW_MAX_ELEMENTS integer > 0 unset Optional cap on elements in one HNSW index.
DAKERA_HNSW_SEED integer >= 0 unset Seed for deterministic graph construction (benchmarks; omit in production).
DAKERA_HNSW_INCREMENTAL_INSERT boolean true Writes update the cached index in place instead of discarding it.
DAKERA_HYBRID_MIN_VECTORS integer >= 0 100000 Index size below which hybrid mode searches the graph exactly.
DAKERA_FULLTEXT_LANGUAGE a supported language code or name; zh/ja/ko/th/none/multilingual for no stemming en BM25 analyzer (stemmer and stop words): an ISO 639-1 code, a name or a region form (de, french, pt-BR); zh, ja, ko, th, none, multilingual for no stemming. The analyzer is stored with each index; from v0.12.1 an existing index built with another one is re-analysed in the background at the next start (served as built until then). On v0.12.0, switch an existing namespace with POST /admin/fulltext/reindex.
DAKERA_FULLTEXT_CJK_BIGRAMS boolean off for en, on otherwise Index unsegmented scripts (Chinese, Japanese, Korean, Thai, ...) as character bigrams.
DAKERA_QUERY_LANG en, de, fr, es, it, pt, nl, auto en, or DAKERA_FULLTEXT_LANGUAGE when that is supported Language of query-routing patterns, temporal expressions and date extraction. A per-request lang overrides it.
DAKERA_BM25_K1 finite number 1.2 BM25 term-frequency saturation.
DAKERA_BM25_B finite number 0.75 BM25 length normalization.
DAKERA_BM25_DELTA finite number 1.0 BM25+ lower-bound delta.
DAKERA_FUSION_STRATEGY rrf (reciprocal, reciprocal_rank_fusion) or minmax (min_max, min-max) unset (MinMax) Global override of the hybrid fusion strategy.
DAKERA_RRF_K finite number 60 RRF smoothing constant, clamped to [1, 1000].
DAKERA_HYBRID_FETCH_MULT integer > 0 unset (built-in 5) Candidate multiplier of hybrid + rerank recall.
DAKERA_CROSS_SESSION_FETCH_MULT integer > 0 unset Extra pool-depth multiplier for cross-session and session-less recall.
DAKERA_ROUTE_SAMPLE_SIZE integer >= 0 20 Semantic namespace router: memories sampled per namespace to build its centroid.
DAKERA_ROUTE_REFRESH_SECS integer > 0 1800 Semantic namespace router: seconds between centroid refreshes.

Recall, ranking and ingest levers

Variable Type / accepted Default Meaning
DAKERA_SCORE_W_VEC finite number per-route default Global override of the relevance weight of the smart score.
DAKERA_SCORE_W_IMP finite number per-route default Global override of the importance weight.
DAKERA_SCORE_W_REC finite number 0.13 Recency weight, [0, 1].
DAKERA_SCORE_RECENCY_TAU_HOURS finite number 168 Recency decay constant in hours, [1, 87600].
DAKERA_ABSTAIN_MIN_SMART_SCORE finite number unset (disabled) Minimum smart_score for a result to be returned. Re-check any cut calibrated on v0.11: the score scale changed.
DAKERA_NORMALIZE_RELEVANCE boolean false Min-max normalize relevance before the linear blend.
DAKERA_NAME_BOOST finite number 0.3 Boost for memories matching proper nouns of the query, [0, 1].
DAKERA_TEMPORAL_BOOST finite number 0.0 Temporal proximity boost, [0, 1] (0 = off).
DAKERA_TEMPORAL_WINDOW_DAYS finite number 365 Temporal window of the proximity scorer, [30, 3650].
DAKERA_TEMPORAL_INFERENCE boolean true Temporal-inference detection by the ML classifier.
DAKERA_TEMPORAL_REFERENCE_DETECTION boolean false Detect queries naming a month, season or year and widen their pool.
DAKERA_BARE_YEAR_PROXIMITY_FLOOR finite number 0.65 Proximity floor for queries that name only a year, [0, 1].
DAKERA_INFERENCE_TEMPORAL_MULT_BETA finite number 0.65 Multiplicative temporal boost after the rerank for temporal-inference queries, [0, 1].
DAKERA_ML_CLASSIFIER boolean false Embedding-based query classifier. Set explicitly and failing to initialize refuses a fresh install.
DAKERA_ML_TEMPORAL_BOOST finite number 0.3 Per-query temporal blend of the ML classifier, [0, 1].
DAKERA_ENTITY_VECTOR_SEARCH boolean true Entity-filtered vector search as an extra retrieval pass.
DAKERA_ENTITY_LINK_BOOST boolean false Entity-linked additive boost.
DAKERA_ENTITY_LINK_WEIGHT finite number 0.5 Per-entity boost weight, [0, 2].
DAKERA_ENTITY_LINK_K finite number 0.001 Popularity-decay coefficient of that boost, [0, 1].
DAKERA_PPR_FUSION boolean true PersonalizedPageRank graph fusion.
DAKERA_PPR_WEIGHT finite number 0.10 Weight of graph proximity in the smart score.
DAKERA_SUPERSEDE_DEMOTE boolean true Demote superseded knowledge at recall.
DAKERA_BITEMPORAL_INGEST boolean false Stamp valid_from = created_at on ingest for bi-temporal scoring.
DAKERA_BITEMPORAL_WEIGHT finite number 0.10 Weight of the bi-temporal validity signal.
DAKERA_PRECISION_RERANK_ALPHA finite number 0.7 Weight of the cross-encoder score in the second-stage precision rerank, [0, 1] (0 = off).
DAKERA_PRECISION_RERANK_POOL_MULT finite number 3.5 Top top_k x this are re-sorted by the precision formula, [1, 5] (1 = off).
DAKERA_CE_GATE_THRESHOLD finite number 0.1 Cross-encoder confidence gap below which a temporal query keeps its pre-rerank order, [0, 1].
DAKERA_TEMPORAL_RERANK_GAMMA finite number 0.30 Temporal proximity weight in the precision rerank, [0, 1].
DAKERA_ADAPTIVE_WVEC_BOOST finite number 0.65 Adaptive relevance-weight boost when the cross-encoder is confident, [0, 1].
DAKERA_ADAPTIVE_WVEC_THRESHOLD finite number 0.15 Cross-encoder confidence spread that triggers it, [0, 1].
DAKERA_CURATED_SPECIFICITY_DELTA finite number 0.05 Precision-rerank boost for curated sentence sub-memories, [0, 0.5].
DAKERA_SESSION_COHESION_EPSILON finite number 0.10 Precision boost for candidates near a top-k anchor in event time, [0, 0.5].
DAKERA_SESSION_COHESION_WINDOW_S integer >= 0 60 That window, seconds, [0, 3600].
DAKERA_TEMPORAL_SUPPLEMENT_CAP integer >= 0 15 Most candidates a temporal query's supplementary pass adds, [0, 30].
DAKERA_TEMPORAL_SUPPLEMENT_WINDOW_DAYS integer 180 Window of that pass in days around the anchor, [30, 730].
DAKERA_LIST_AGGREGATION_DETECTION boolean true Detect list and aggregation questions and widen their pool.
DAKERA_BATCH_SENTENCE_DECOMP boolean true Sentence decomposition on batch ingest.
DAKERA_CE31_MAX_SENTENCES integer >= 0 200 Most sentence sub-memories per batch item (0 = no cap).
DAKERA_BATCH_GRAPH_EDGES boolean true Build knowledge-graph edges for batch-ingested memories in the background.
DAKERA_RANK_FEATURE_LOG boolean false Log each candidate's ranking features as tracing events.

Decay, auto-pilot and re-embedding

Variable Type / accepted Default Meaning
DAKERA_DECAY_STRATEGY exponential, linear, step (stepfunction, step_function) exponential Importance decay curve.
DAKERA_DECAY_HALF_LIFE_HOURS finite number > 0 168 Decay half-life in hours; finite and > 0.
DAKERA_DECAY_MIN_IMPORTANCE finite number 0.01 Importance floor of decay.
DAKERA_DECAY_INTERVAL_SECS integer > 0 3600 Seconds between decay sweeps (leader only in a cluster).
DAKERA_DECAY_PAGE_SIZE integer > 0 1000 Memories per page of a decay sweep.
DAKERA_AUTOPILOT_ENABLED boolean true Master switch of the auto-pilot (dedup and consolidation).
DAKERA_AUTOPILOT_DEDUP_THRESHOLD finite number 0.93 Similarity above which candidates are examined as duplicates (only true duplicates are merged).
DAKERA_AUTOPILOT_DEDUP_INTERVAL_HOURS integer >= 0 6 Hours between dedup cycles.
DAKERA_AUTOPILOT_CONSOLIDATION_INTERVAL_HOURS integer >= 0 12 Hours between consolidation cycles.
DAKERA_DBSCAN_MAX_INPUT integer >= 0 5000 Most memories fed to one consolidation clustering run.
REEMBED_BATCH_SIZE integer >= 0 50 Memories upgraded per cycle by the tiered re-embed worker (0 idles).
REEMBED_INTERVAL_SECS integer > 0 300 Seconds between cycles.
REEMBED_MIN_IMPORTANCE finite number 0.0 Minimum importance of a vector to upgrade (0.0 upgrades every vector).
REEMBED_FAIL_ESCALATE_THRESHOLD integer > 0 3 Consecutive engine-init failures before the log escalates to ERROR.
REEMBED_MAX_BACKOFF_SECS integer >= 0 3600 Cap of the retry back-off.

Multimodal and records

Variable Type / accepted Default Meaning
DAKERA_ATTACHMENTS boolean false Attachment storage, attachment_ref on memories and speech to text.
DAKERA_ATTACHMENT_MAX_BYTES integer > 0 26214400 (25 MiB) Largest upload; over it 413.
DAKERA_VISION boolean false Image indexing and the visual recall lane (also needs DAKERA_ATTACHMENTS). Use a dedicated data root.
DAKERA_RECORDS boolean false The record routes.
DAKERA_RECORD_MAX_VECTORS integer > 0 4096 Most vectors in one record's extra representations.
DAKERA_RECORD_MAX_BYTES integer > 0 8388608 (8 MiB) Most bytes in one record's extra representations.

Telemetry

Variable Type / accepted Default Meaning
DAKERA_TELEMETRY boolean true Product telemetry (see Telemetry). DO_NOT_TRACK=1 also turns it off.
DAKERA_TELEMETRY_KEY text built in Write-only PostHog project key.
DAKERA_TELEMETRY_HOST text https://eu.i.posthog.com PostHog ingestion host.
DAKERA_TELEMETRY_DEBUG boolean false Log every telemetry batch as JSON before it is sent.
DAKERA_DEPLOYMENT text detected: k8s, docker or binary Deployment kind reported in the heartbeat (free text is sent as custom).
DAKERA_DEPLOYMENT_TYPE text detected: ci, development or production Deployment purpose reported in the heartbeat.

Build-time

Variable Type / accepted Default Meaning
DAKERA_VOCAB_BUNDLE_PATH build time — Read by the build script only; never read by the running server.

Variables of other tools the server also reads

Variable Used for
AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN S3 / MinIO credentials (both keys or neither; neither = the default AWS credential chain). There is no DAKERA_S3_* key variable.
AWS_REGION, AWS_DEFAULT_REGION, AWS_ENDPOINT_URL Fallbacks of DAKERA_S3_REGION / DAKERA_S3_ENDPOINT
RUST_LOG Log filter (default info)
OTEL_EXPORTER_OTLP_ENDPOINT, OTEL_SERVICE_NAME OTLP endpoint (default http://localhost:4317) and service name (default dakera) when DAKERA_TRACING_ENABLED is on
SLOW_QUERY_THRESHOLD_MS, SLOW_QUERY_LOG_ENABLED, SLOW_QUERY_BUFFER_SIZE, SLOW_QUERY_LOG_STDOUT Slow-query log: threshold in ms (default 100), switch (true), entries kept (1000), also log to stdout (true)
HF_HOME, HF_ENDPOINT, HF_HUB_OFFLINE, HF_TOKEN Model cache directory, a Hugging Face mirror, offline mode, and an access token for model downloads
HTTPS_PROXY, HTTP_PROXY, ALL_PROXY (HTTP and SOCKS), NO_PROXY (CIDR included) Proxies for model downloads
DO_NOT_TRACK 1 turns telemetry off

Booleans that v0.11.108 read differently

On a fresh install every boolean uses the grammar above. A deployment that already holds data keeps v0.11.108's reading of these variables for this release, so nothing it runs with changes meaning on upgrade, and lists each such value in /health config_warnings as env_reading.

v0.11.108 reading Variables
1 / true turns it on, anything else is off (any case) DAKERA_ALLOW_MODEL_CHANGE, DAKERA_TIERED, DAKERA_ENTITY_LINK_BOOST, DAKERA_RANK_FEATURE_LOG, DAKERA_BITEMPORAL_INGEST, DAKERA_NORMALIZE_RELEVANCE
1 / true turns it on, exact case DAKERA_ML_CLASSIFIER
only 0 / false turns it off, any case DAKERA_AUTH_ENABLED, DAKERA_BATCH_GRAPH_EDGES, DAKERA_BATCH_SENTENCE_DECOMP, DAKERA_BGE_QUERY_INSTRUCTION, DAKERA_HNSW_INCREMENTAL_INSERT, DAKERA_MEM_BACKPRESSURE, DAKERA_PPR_FUSION, DAKERA_SUPERSEDE_DEMOTE
only 0 / false turns it off, exact case DAKERA_ENTITY_VECTOR_SEARCH, DAKERA_LIST_AGGREGATION_DETECTION, DAKERA_QUERY_EMBED_CACHE, DAKERA_RERANK_WARMUP, DAKERA_TEMPORAL_INFERENCE
any value except 0 / false turns it on (off when unset), exact case DAKERA_TEMPORAL_REFERENCE_DETECTION
exactly 1 or 0 DAKERA_CONFIG_LENIENT, DAKERA_MODEL_PATH_SKIP_VERIFY, DAKERA_USE_GPU
exactly true or false DAKERA_AUTOPILOT_ENABLED

Other booleans (for example DAKERA_GRPC_ENABLED, DAKERA_WAL, DAKERA_CLUSTER_MODE) were read with their own v0.11.108 rules (DAKERA_GRPC_ENABLED=yes was off, DAKERA_WAL=off left the log on); the per-variable reading is in Upgrading to v0.12.

Runtime configuration (PUT /admin/config)

GET /admin/config (Admin scope) reports the effective values and PUT /admin/config changes them without a restart. The PUT body is a flat JSON object of the keys to change, for example {"query_timeout_ms": 2000, "rate_limit_rps": 500}. An invalid value, or one this server cannot apply, is a 400 naming the key and the reason; nothing in that request is applied.

Key Startup value Accepted Effect
max_vectors_per_namespace the default quota's max_vectors (unlimited) integer >= 1, or null Sets max_vectors of the default namespace quota (the same setting as PUT /admin/quotas/default), enforced on every write path with 413 QUOTA_EXCEEDED. Replicated and persisted.
default_index_type hnsw the reported value only Read-only in practice: any other value is a 400
cache_enabled true boolean In-process L1 vector cache on or off (turning it off clears it)
cache_max_size_bytes DAKERA_VECTOR_CACHE_BYTES (128 MB) integer > 0 L1 byte budget; the change swaps in a new, empty cache
rate_limit_enabled DAKERA_RATE_LIMIT_ENABLED boolean Server-wide rate limit on or off
rate_limit_rps DAKERA_RATE_LIMIT_RPS integer 1 - 4294967295 Requests per second; the burst is kept
query_timeout_ms 0 (no deadline) integer >= 0 Deadline on queries, recall and search routes and gRPC Query; past it 504 QUERY_TIMEOUT (gRPC DEADLINE_EXCEEDED)
session_idle_timeout_secs DAKERA_SESSION_IDLE_TIMEOUT_SECS (14400) integer 0 - 2592000 v0.12.2: server-wide session idle timeout (0 = off for sessions without their own); takes effect at the reaper's next tick

A value changed through PUT is listed in runtime_overrides and re-applied at startup over its environment variable. {"runtime_overrides": []} clears them all. Settings other than max_vectors_per_namespace are per node: in a cluster, send the PUT to every node. The decay keys of the same endpoint reach the decay task immediately.

Backups

Backups are managed through the admin API (POST /admin/backups, /admin/backups/schedule) — there are no DAKERA_BACKUP_* environment variables. "compression": "zstd" compresses the files and "encrypt": true seals each with AES-256-GCM (it needs DAKERA_ENCRYPTION_KEY; lz4 is refused); both are off unless requested. In v0.12 a stored, enabled backup schedule actually runs (v0.11 stored it and never took a backup): disable it with POST /admin/backups/schedule and {"enabled": false} before upgrading if you do not want that. Backup download, upload and restore need a global super_admin key. See Deployment → Backup & restore.

Removed and renamed variables

Some v0.11 deployments set these names, but v0.12.0 does not read them (several were never read by any release). On a deployment that already holds data each one is a warning; on a fresh install it refuses the boot.

NameUse instead / what happened
DAKERA_STORAGE_BACKENDDAKERA_STORAGE
DAKERA_L2_CACHE_PATHDAKERA_DISK_CACHE_DIR
DAKERA_CACHE_REDIS_URLDAKERA_REDIS_URL
DAKERA_S3_ACCESS_KEY, DAKERA_S3_SECRET_KEYAWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY
DAKERA_LOG_LEVELRUST_LOG
DAKERA_API_KEYClient-side key of SDKs/MCP; the server's is DAKERA_ROOT_API_KEY
DAKERA_RELEVANCE_NORMDAKERA_NORMALIZE_RELEVANCE
DAKERA_INSTANCE_IDDAKERA_CLUSTER_NODE_ID
DAKERA_AUTO_INDEX_SELECTIONRemoved: every namespace uses HNSW
DAKERA_RANKER, DAKERA_RANKER_INPUT, DAKERA_RANKER_MODELRemoved with the opt-in GBDT ranker; the linear ranker is the only one
DAKERA_TOKEN_BUDGETRemoved; DAKERA_MAX_SEQ_LENGTH bounds a text
DAKERA_QUERY_DECOMP, DAKERA_QUANT_LEVEL, DAKERA_CLASSIFIER_PATH, DAKERA_CE141_EVENT_TIME_FILTERAlready removed during v0.11
DAKERA_VOCAB_BUNDLE_REPORead by the v0.11 build script only, never by the server; DAKERA_VOCAB_BUNDLE_PATH overrides the bundled vocabulary at build time
DAKERA_DEV_MODE, DAKERA_INFERENCE_ENABLED, DAKERA_DECAY_ENABLEDNever read

Next: deploy

Set your variables, mount the data volume and deploy. The deployment guide covers Docker, Docker Compose, Kubernetes and systemd, with an example for each.

Deployment Guide → Security Hardening →
Stay sharp on agent memory
Benchmark results, SDK releases, and production patterns. Under 500 words per issue.
✓ You're in. First issue lands soon — watch for Dakera in your inbox.