One self-hosted engine for storing and recalling what your agents learn: hybrid vector, full-text and graph recall,
embeddings and reranking built in, on CPU, with no LLM call at recall time.
Website · Docs · Quickstart · Benchmark · What's new in v0.12.0
Dakera is a self-hosted memory engine for AI agents. Agents store what they learn and recall it later by meaning, keyword, time and relationship, across sessions and across agents.
It ships as one container image with its models inside: embeddings, a cross-encoder reranker and entity extraction run locally on CPU. Recall never calls an LLM, so cost and latency stay predictable, and your data never leaves your infrastructure.
Under the hood: HNSW and IVF vector indexes, BM25 full text, a knowledge graph, sessions, namespaces and decay-weighted importance, served over REST, gRPC and MCP.
|
|
File attachments per agent, speech to text that turns audio into memories, and visual search over document pages. Each is opt-in, with one variable. |
|
Records keep one indexed vector plus named token and patch multivectors. Late interaction ( |
Vector search 0.87 ms p50 / 1.17 ms p95 at recall@10 0.998. Index memory per vector −43 %. Memory after reranking 7.6× lower (4.98 → 0.65 GB), reranking about 2× faster on the same CPU, ingest 2.7× faster. The whole multimodal stack fits in ~530 MiB, no GPU. |
|
API keys on REST and gRPC, authenticated cluster traffic, AES-256-GCM encryption at rest with values bound to their record, and a replicated keyring rotated one namespace at a time. |
v0.11.108 upgrades in place. |
|
Versioned replication that merges instead of overwriting, a durable outbox, and filesystem, S3 or tiered hot / warm / cold storage that survives S3 outages. |
Live and ready health checks while models load, a |
CPU-only figures, v0.12.0 compared with v0.11.108 on the same machine: vector search and index memory on BEIR Quora, 50k 1024-d vectors; reranking with bge-reranker-v2-m3 at top_k 16 in a 4 vCPU / 8 GiB container; multimodal stack = working memory with every model loaded. Details in the release notes.
1. Run the server. A fresh install with authentication on needs a root API key. The image ships its default models, so it starts without a download.
export DAKERA_API_KEY="dk-$(openssl rand -hex 16)"
docker run -d --name dakera -p 3000:3000 \
-v dakera-data:/data \
-v dakera-models:/app/models \
-e DAKERA_ROOT_API_KEY="$DAKERA_API_KEY" \
-e DAKERA_STORAGE=filesystem \
ghcr.io/dakera-ai/dakera:0.12.0
curl -s http://localhost:3000/health/ready # 200 once the models are loaded2. Store a memory, then recall it.
curl -s http://localhost:3000/v1/memory/store \
-H "Authorization: Bearer $DAKERA_API_KEY" -H "Content-Type: application/json" \
-d '{"agent_id": "my-agent", "importance": 0.8,
"content": "The user prefers concise answers with code examples"}'
curl -s http://localhost:3000/v1/memory/recall \
-H "Authorization: Bearer $DAKERA_API_KEY" -H "Content-Type: application/json" \
-d '{"agent_id": "my-agent", "query": "How does the user like answers?", "top_k": 5}'Python pip install dakera
import os
from dakera import DakeraClient
client = DakeraClient(base_url="http://localhost:3000", api_key=os.environ["DAKERA_API_KEY"])
client.store_memory(
agent_id="my-agent",
content="The user prefers concise answers with code examples",
importance=0.8,
tags=["preference"],
)
response = client.recall(agent_id="my-agent", query="How does the user like answers?", top_k=5)
for memory in response.memories:
print(f"{memory.score:.2f} {memory.content}")TypeScript npm install @dakera-ai/dakera
import { DakeraClient } from '@dakera-ai/dakera';
const client = new DakeraClient({ baseUrl: 'http://localhost:3000', apiKey: process.env.DAKERA_API_KEY });
await client.storeMemory('my-agent', {
content: 'The user prefers concise answers with code examples',
importance: 0.8,
tags: ['preference'],
});
const { memories } = await client.recall('my-agent', 'How does the user like answers?', { top_k: 5 });
memories.forEach((m) => console.log(m.score.toFixed(2), m.content));The snippets use the released SDKs (dakera 0.12.12 on PyPI, @dakera-ai/dakera 0.11.106 on npm), which cover these calls on a v0.12.0 server. Client releases with the v0.12 additions are coming. Pin an image version in production; :latest tracks the newest release.
| LoCoMo recall benchmark · LLM-judged retrieval recall | |||
| 86.9% Cat1 |
85.4% Cat2 |
73.9% Cat3 |
91.0% Cat4 |
Recall@20 on the LoCoMo evaluation set — 10 conversations, 1,536 evaluated questions (adversarial category excluded), no LLM in the retrieval path. Dakera v0.11.107.
Methodology and results: dakera.ai/benchmark
The Dakera server is distributed as a container image, ghcr.io/dakera-ai/dakera. Everything else below is open source.
| Repository | Install |
|---|---|
| SDKs | |
| dakera-py Python | pip install dakera |
| dakera-js TypeScript / JavaScript | npm install @dakera-ai/dakera |
| dakera-go Go | go get github.com/dakera-ai/dakera-go |
| dakera-rs Rust | cargo add dakera-client |
| Framework integrations | |
| dakera-langchain LangChain | pip install langchain-dakera |
| dakera-langchain-js LangChain.js | npm install @dakera-ai/langchain |
| dakera-llamaindex LlamaIndex | pip install llamaindex-dakera |
| dakera-crewai CrewAI | pip install crewai-dakera |
| dakera-autogen AutoGen | pip install autogen-dakera |
| dakera-ai-sdk Vercel AI SDK | npm install @dakera-ai/ai-sdk |
| strands-dakera Strands Agents | pip install strands-dakera |
| Tools | |
| dakera-mcp MCP server | npx @dakera-ai/dakera-mcp |
dakera-cli CLI, dk | brew install dakera-ai/tap/dk |
| homebrew-tap · apt-repo · rpm-repo | Homebrew, apt and dnf packages for dk |
| Deployment | |
| dakera-deploy Compose and Kubernetes | Compose profiles, HA cluster, manifests, monitoring |
| dakera-helm Helm chart | OCI chart on ghcr.io, also on Artifact Hub |
|
One container with its models inside, as in the quickstart. Starts air-gapped and on read-only file systems. |
Single node with MinIO, a three-node HA cluster behind Traefik, and a Prometheus and Grafana stack: dakera-deploy. |
The Helm chart from |
# Docker Compose: Dakera with MinIO object storage
git clone https://github.com/Dakera-AI/dakera-deploy && cd dakera-deploy/docker
cp .env.example .env # set DAKERA_ROOT_API_KEY and the MinIO credentials
docker compose up -d
# Kubernetes: the Helm chart
helm install dakera oci://ghcr.io/dakera-ai/dakera-helm/dakera \
--namespace dakera --create-namespace \
--set dakera.rootApiKey="$DAKERA_API_KEY" \
--set minio.rootPassword="<password>"Configuration, clustering, storage backends and air-gapped installs: deployment docs.
| Documentation | v0.12.0, the latest release. The v0.11 docs stay available as an archive. |
| What's new in v0.12.0 | The release announcement. |
| Upgrade from v0.11.108 | What changes on the first start, what to check, and how to go back. |
| Concepts · API reference | Memories, agents, namespaces and sessions; every route. |
| Playground | Try store and recall in the browser. |
- Questions and bugs: open an issue on the repository you use, for example dakera-py or dakera-deploy. Include the server version from
/health. See SUPPORT.md. - Security: report vulnerabilities privately, never in a public issue. See SECURITY.md.
- Contributing: the SDKs, integrations, CLI, MCP server and deployment repositories accept pull requests. See CONTRIBUTING.md and the code of conduct.
- News: LinkedIn and the blog.
The SDKs, framework integrations, CLI and MCP server are MIT licensed (strands-dakera is Apache-2.0); check each repository. The Dakera server is proprietary and is distributed as a container image with no usage fees.
The server sends product telemetry, never memory content, unless you turn it off with DAKERA_TELEMETRY=0 or DO_NOT_TRACK=1. What it sends is listed in the telemetry docs.
dakera.ai · Docs · Benchmark · LinkedIn
ذاكرة · dhākira · Arabic for memory