Go client for Dakera AI — the memory engine for AI agents
| Dakera | Others | |
|---|---|---|
| LoCoMo accuracy | 88.2% (1,540 Q standard eval) | 60–92% |
| Deployment | Single binary, Docker one-liner | External vector DB + embedding service required |
| Embeddings | Built-in — no OpenAI key needed | Requires external embedding API |
| Search modes | Vector · BM25 · Hybrid · Knowledge Graph | Usually one or two |
| Dependencies | stdlib net/http only |
Often pulls in gRPC or third-party HTTP clients |
→ Full benchmark results · dakera.ai
docker run -d \
--name dakera \
-p 3000:3000 \
-e DAKERA_ROOT_API_KEY=dk-mykey \
ghcr.io/dakera-ai/dakera:latest
curl http://localhost:3000/health # → {"status":"ok"}For persistent storage with Docker Compose:
curl -sSfL https://raw.githubusercontent.com/Dakera-AI/dakera-deploy/main/docker-compose.yml \
-o docker-compose.yml
DAKERA_API_KEY=dk-mykey docker compose up -dFull deployment guide (Docker Compose, Kubernetes, Helm): dakera-deploy
go get github.com/dakera-ai/dakera-go@latestRequires Go 1.21+. Uses only the standard library — no external runtime dependencies.
package main
import (
"context"
"fmt"
dakera "github.com/dakera-ai/dakera-go"
)
func main() {
client := dakera.NewClientWithOptions(dakera.ClientOptions{
BaseURL: "http://localhost:3000",
APIKey: "dk-mykey",
})
ctx := context.Background()
// Store an agent memory
imp := float32(0.9)
mem, _ := client.StoreMemory(ctx, "my-agent", dakera.StoreMemoryRequest{
Content: "User prefers concise responses with code examples",
Importance: &imp,
})
fmt.Println("Stored:", mem.Memory.ID)
// Recall memories (semantic search)
resp, _ := client.Recall(ctx, "my-agent", dakera.RecallRequest{
Query: "what does the user prefer?",
TopK: 5,
})
for _, m := range resp.Memories {
fmt.Printf("[%.2f] %s\n", m.Score, m.Content)
}
// Upsert vectors
client.Upsert(ctx, "my-namespace", []dakera.VectorInput{
{ID: "vec1", Values: []float32{0.1, 0.2, 0.3}},
})
// Hybrid search (vector + BM25)
results, _ := client.HybridSearch(ctx, "my-namespace", nil, "completed task", &dakera.HybridSearchOptions{
TopK: 5,
VectorWeight: 0.7,
})
for _, r := range results {
fmt.Println(r.ID, r.Score)
}
}All methods accept a context.Context — use it for timeouts, deadlines, or cancellation:
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
resp, err := client.Recall(ctx, "my-agent", dakera.RecallRequest{Query: "preferences", TopK: 3})Send raw text without pre-computing embeddings — Dakera embeds server-side:
client.UpsertText(ctx, "my-namespace", []dakera.TextInput{
{ID: "doc1", Text: "Agent completed onboarding flow successfully"},
})- Agent Memory — store, recall, search, and forget memories with importance scoring
- Sessions — group memories by conversation with auto-consolidation on session end
- Knowledge Graph — traverse memory relationships, find paths, export graphs
- Vector Search — ANN queries with metadata filters and batch operations
- Full-Text Search — BM25 ranking with stemming and stop-word filtering
- Hybrid Search — combine vector similarity with keyword matching
- Text Auto-Embedding — server-side embedding generation (no local model needed)
- Namespaces — isolated vector stores per project, tenant, or use case
- Feedback Loop — upvote/downvote/flag memories to improve recall quality
- Entity Extraction — GLiNER NER for automatic entity detection
- SSE Streaming — Server-sent event subscriptions for real-time memory updates
- Typed Filters —
Eq(),Gt(),Contains(),ArrayContains()and more - Context-Based — all methods accept
context.Contextfor cancellation and timeouts - Retry & Rate Limiting — built-in exponential backoff and rate-limit header tracking
- Zero Dependencies — standard library
net/httpclient, no external runtime deps
// Self-hosted
client := dakera.NewClientWithOptions(dakera.ClientOptions{
BaseURL: "http://your-server:3000",
APIKey: "your-key",
})
// Cloud (early access)
client := dakera.NewClientWithOptions(dakera.ClientOptions{
BaseURL: "http://<your-server-ip>:3000",
APIKey: "your-key",
})
// With custom retry config
client := dakera.NewClientWithOptions(dakera.ClientOptions{
BaseURL: "http://localhost:3000",
APIKey: "your-key",
RetryConfig: &dakera.RetryConfig{MaxRetries: 5, BaseDelayMs: 200},
})See the examples/ directory:
basic/— vectors, namespaces, queries, filtersmemory/— store/recall memories, sessions, agent statsadvanced/— text embedding, full-text, hybrid search, analytics
| Documentation | Full API reference and guides |
| Go SDK docs | pkg.go.dev reference |
| Benchmark | LoCoMo evaluation results |
| dakera.ai | Website and early access |
| GitHub Org | All public repos |
| dakera-deploy | Self-hosting guide |
| SDK | Package |
|---|---|
| dakera-py | dakera (PyPI) |
| dakera-js | @dakera-ai/dakera (npm) |
| dakera-rs | dakera-client (crates.io) |
| dakera-cli | CLI tool |
| dakera-mcp | MCP server for Claude/Cursor |
dakera.ai · Docs · Benchmark · Request Early Access
Built with Rust. Single binary. Zero external dependencies.
