NewRelease 0.12.2 is out: Engine v0.12.2, Dashboard 0.5.1, Helm 0.12.2, the four SDKs, CLI 0.8.1 and MCP 0.12.2Release 0.12.2 is outSee what's new →

What's new in v0.12

Dakera v0.12.0, released on 2026-10-01, adds multilingual search, multimodal memory, multi-vector records and late interaction; makes recall faster and leaner; hardens security and cluster replication; and goes back to v0.11.108 with one command. This page summarizes the release for developers and operators deciding what to use and how to upgrade.

Every new feature is opt-in. An unchanged v0.11.108 deployment upgrades in place: stop v0.11.108, start v0.12 on the same data and environment (a cluster also needs DAKERA_CLUSTER_SECRET from v0.12.1). The operator guide is Upgrading to v0.12, and every change is listed in the Changelog.

Current versions

v0.12 ships as release trains: every component below is released together with the engine. The changelog lists what changed in each component, release by release.

Current versions — release train 0.12.2 (Oct 8, 2026)
ComponentVersionReleasedInstallLinks
Enginedakera 0.12.2 docker pull ghcr.io/dakera-ai/dakera:0.12.2
Dashboarddakera-dashboard 0.5.1 docker pull ghcr.io/dakera-ai/dakera-dashboard:0.5.1
Helm chartdakera-helm 0.12.2 helm install dakera oci://ghcr.io/dakera-ai/dakera-helm/dakera --version 0.12.2
Python SDKdakera 0.14.0 pip install dakera==0.14.0
TypeScript SDK@dakera-ai/dakera 0.12.2 npm install @dakera-ai/[email protected]
Go SDKgithub.com/dakera-ai/dakera-go v0.12.2 go get github.com/dakera-ai/[email protected]
Rust SDKdakera-client 0.12.2 cargo add [email protected]
CLIdakera-cli 0.8.1 brew install dakera-ai/tap/dk
MCP server@dakera-ai/dakera-mcp 0.12.2 npm install -g @dakera-ai/[email protected]

v0.12.2

v0.12.2, released on 2026-10-08, is a patch release that upgrades in place from v0.12.1, v0.12.0 and v0.11.108: back up, then replace the image or binary. See Upgrading from v0.12.1 to v0.12.2 and the Changelog.

Changes that need attention:

  1. Sessions end after 4 hours of inactivity by default. Set DAKERA_SESSION_IDLE_TIMEOUT_SECS=0, or start sessions with idle_timeout_secs: 0, to keep the old behavior. Long-open orphan sessions are closed, with their summaries, on the first passes after the upgrade.
  2. Stricter validation. Memory metadata, the content limit (now in bytes, DAKERA_MAX_MEMORY_CONTENT_BYTES, and enforced on update too), reserved markers and ids, key namespace lists and imports are validated on every write path; the raw vector routes no longer write memory records into agent namespaces.
  3. Authorization tightened. Sessions are authorized by their agent (no _dakera_sessions grant needed), ending a session checks Write scope first, open event streams re-check scope, and agent ids are at most 241 bytes. A foo* entry on a key created before v0.12.2 stays a literal name until the key is saved again.
  4. Listings leave derived records out: include_derived=true restores them on GET /v1/agents/{id}/memories and /wake-up.

Released with it: Python SDK 0.14.0, TypeScript SDK 0.12.2, Go SDK v0.12.2, Rust SDK 0.12.2, CLI 0.8.1 and MCP server 0.12.2 add the new routes (agent creation, key edits, rotation grace, whoami, session touch, content previews) and keep working against v0.12.0 and v0.12.1 (release 0.12.2 →).

Dashboard 0.5.1 ships with v0.12.2: Add agent, key edits with prefix patterns, rotation grace, session auto-end labels and lighter memory lists.

v0.12.1

v0.12.1, released on 2026-10-05, is a patch release on v0.12.0. Stop v0.12.0 and start v0.12.1 on the same data and environment; the formats are unchanged. See Upgrading from v0.12.0 to v0.12.1 and the Changelog.

The rest of this page describes v0.12.0.

v0.12.0 highlights

Multilingual search

Four independent, opt-in layers. A server that sets none of them behaves as v0.11.108 did (English).

Details: Multilingual search.

Multimodal memory

Off by default; each feature turns on with one variable.

Every media job reserves the memory it needs before it starts, and waits or answers 503 with Retry-After instead of risking an out-of-memory kill. With every model loaded, the process heap measured 530 MiB (memory-mapped model files are not counted). Details: Multimodal memory.

Multi-vector records

DAKERA_RECORDS turns on POST /v1/namespaces/{ns}/records and GET /v1/namespaces/{ns}/records/{id}. A record is one indexed vector plus named extra representations (dense, token_multivector, patch_multivector, stored as f32, f16 or i8), kept atomically beside it by every storage backend, snapshots, export/import and replication. Use records when you compute multi-vector embeddings yourself and want Dakera to keep them with the document. Details: Records and multi-vector.

Late interaction and search controls

Details: Search and ranking.

Performance

Every figure is a measurement; "Before" is the same measurement without the change (v0.11.108's behavior unless noted). More in Performance.

What Before v0.12.0 Measured on
Vector search p50 / p95 at recall@10 0.998 1.07 / 1.44 ms 0.87 / 1.17 ms BEIR Quora, 50k vectors, CPU only
Reranked recall, top_k 16 baseline about 2× faster on the same CPU, no GPU 4 vCPU / 8 GiB container, bge-reranker-v2-m3
Container memory after reranking 4.98 GB 0.65 GB, flat across top_k 1 to 32 same
Reranker load 4.6 s 0.6 s same
HNSW memory per 1024-d vector 4.81 KB 2.76 KB (−43 %), same recall@10 (0.998) BEIR Quora, 50k vectors
Ingest speed / memory baseline / 2.4 GB 2.7× faster / 0.97 GB Same workload on v0.11.108 and v0.12.0, same machine
CPU Docker image (amd64) n/a 783 MB; ready 4.4 s after start, with no download in air-gapped or read-only starts Docker run of the release image
Release binary (x64) n/a 106,228,848 bytes (about 101 MB) Release build

Also: every CPU model runs on one memory-mapped copy with no idle arena; stored vectors no longer depend on what else was in the batch; ANN indexes are saved and reloaded instead of rebuilt; an expired memory no longer forces an index rebuild; concurrent writes into one namespace share the write-ahead log's fsync.

Security hardening

Details: Security and Upgrading: security and access.

One-command rollback

dakera downgrade ships in the v0.12.0 binary. Run it once on the stopped deployment, with the server's environment and volumes, and it converts the data back to what v0.11.108 reads: encrypted values, full-text indexes, the write-ahead log, tiered writes, caches and re-embedded models included. No v0.11 patch release is needed.

stop v0.12.0  ->  dakera downgrade  ->  start v0.11.108

Details: Rolling back to v0.11.

Reliability and operations

Telemetry disclosure

When telemetry is on, v0.12.0 sends lifecycle events and a 6-hourly heartbeat. The machine's hostname is sent, and PostHog keeps the connecting IP address and derives a coarse location from it (GeoIP). Opt out with DAKERA_TELEMETRY=0 or DO_NOT_TRACK=1. See Telemetry.

What changes for existing deployments

Read these before upgrading. Each is explained, with what to do, in Upgrading to v0.12.

  1. gRPC clients need an API key in the call metadata (x-api-key or authorization: Bearer) when authentication is on.
  2. Permissions: keys pinned to namespaces get 403 on node-wide routes; backup download, upload and restore need global super_admin.
  3. Namespace quotas are enforced. Quotas set on v0.11 were never checked; writes over a hard quota now get 413.
  4. Ranking follows the query more closely. A recall no longer raises the importance of what it returns, the access count is no longer a score term, and recency counts from when a memory was created. smart_score values change scale.
  5. A stored, enabled backup schedule starts running at its next slot (v0.11 stored it and never ran it).
  6. Health checks: the port answers while models load; point readiness at /health/ready and liveness at /health/live.
  7. Configuration: an upgraded deployment starts with warnings, never refusals (/health config_warnings); a fresh install with the same mistakes is refused. Run dakera --check-config first.
  8. Stored memories are re-embedded once in the background (they were embedded with the query instruction): about 35 minutes per 10,000 memories on bge-large; recall is served throughout.
  9. Clusters: from v0.12.1 every cluster node needs DAKERA_CLUSTER_SECRET. Set the same secret on every node and upgrade them in one window (Cluster secret), and give each node its own S3 bucket.
  10. Statistics totals (v0.12.1): memory counts drop (sentence sub-memories are no longer counted as memories) and session counts rise (ended sessions are counted). Warn the owners of dashboards and reports.
  11. Sessions auto-end (v0.12.2): a session idle for DAKERA_SESSION_IDLE_TIMEOUT_SECS (default 4 h) is ended by the server; set it to 0 to keep sessions open until a client ends them.
  12. Validation (v0.12.2): metadata, content in bytes, reserved markers and ids, key namespace lists and imports are checked on every write path (400); sessions are authorized by their agent.
  13. Speech to text defaults to whisper-base (multilingual, language auto-detected), not English-only whisper-tiny.en. Speech is opt-in; a deployment that turns it on without DAKERA_WHISPER_MODEL transcribes with whisper-base. Set DAKERA_WHISPER_MODEL=whisper-tiny.en to keep the lightest English model.
  14. Errors: every error body is JSON, every 503 carries Retry-After, configuration errors are 501, over-size bodies are 413.
  15. Namespace config: PATCH merges and refuses unknown fields; PUT replaces.
  16. Telemetry, when on: lifecycle events and a 6-hourly heartbeat; the hostname is sent and the connecting IP is kept (see above).
  17. POST /ops/shutdown really shuts the server down (in v0.11 it only set a flag).

Operating notes

Where to go next

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.