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.
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
Type / accepted is the shape the startup check enforces. Integers are decimal digits (no units: 5m is invalid); numbers must be finite (NaN and inf are invalid); a boolean accepts 1, true, yes, on, 0, false, no, off in any case. Range notes such as "[0, 1]" are enforced by clamping unless stated otherwise.
Default is what the server uses when the variable is unset. unset means the feature is off or the value is derived; <data root> is DAKERA_STORAGE_PATH.
Values are trimmed and an empty value (VAR=, compose ${VAR:-}, an empty Helm value) counts as unset.
All settings are read once at startup (a few, such as DAKERA_MEM_HIGH_WATER_FRACTION, on first use and then cached); change them by restarting. The settings of PUT /admin/config (below) change at runtime.
A fresh install refuses the boot on an invalid value or an unknown DAKERA_* name (exit 78); a deployment that already holds data starts with a warning. See Startup configuration checks, and run dakera --check-config to see every finding without starting the server.
DAKERA_* names that belong to other Dakera tools are unknown to the server and are reported: the clients read DAKERA_URL, DAKERA_NAMESPACE (CLI) and DAKERA_API_KEY (SDKs, MCP server, dashboard). If the server shares an environment with them, set DAKERA_CONFIG_LENIENT=1.
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 /healthconfig_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 /healthconfig_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.
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 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 /healthembedding_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).
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.
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 /healthconfig_warnings as env_reading.
v0.11.108 reading
Variables
1 / true turns it on, anything else is off (any case)
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.
Name
Use instead / what happened
DAKERA_STORAGE_BACKEND
DAKERA_STORAGE
DAKERA_L2_CACHE_PATH
DAKERA_DISK_CACHE_DIR
DAKERA_CACHE_REDIS_URL
DAKERA_REDIS_URL
DAKERA_S3_ACCESS_KEY, DAKERA_S3_SECRET_KEY
AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY
DAKERA_LOG_LEVEL
RUST_LOG
DAKERA_API_KEY
Client-side key of SDKs/MCP; the server's is DAKERA_ROOT_API_KEY
Set your variables, mount the data volume and deploy. The deployment guide covers Docker, Docker Compose, Kubernetes and systemd, with an example for each.
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.
Lock in founder pricing
Dakera Cloud — managed hosting, SLA, and team monitoring — is launching soon. Join now to secure early access pricing before public launch.
No spam. Unsubscribe anytime.
✓ You're on the list!We'll reach out when beta slots open.
Lock in founder pricing
Dakera Cloud — managed hosting, SLA, and team monitoring — is launching soon. Join the waitlist now to secure early access pricing before public launch.