# AgentDB — Go SDK
Go bindings for [AgentDB](https://github.com/hvrcharon1/agentdb) via cgo.
## Prerequisites
1. **Build the native shared library** (requires Rust / Cargo):
```bash
cargo build --release --features ffi --lib
```
2. **Copy (or symlink) the shared library and C header** to a location on the
compiler and linker search path, e.g.:
```bash
sudo cp target/release/libagentdb.so /usr/local/lib/
sudo cp agentdb.h /usr/local/include/
sudo ldconfig
export CGO_CFLAGS="-I/path/to/repo"
export CGO_LDFLAGS="-L/path/to/repo/target/release -lagentdb"
export LD_LIBRARY_PATH="/path/to/repo/target/release"
```
## Installation
```bash
go get github.com/hvrcharon1/agentdb/go
```
## Quick start
```go
package main
import (
"fmt"
"log"
"github.com/hvrcharon1/agentdb/go"
)
func main() {
// Open (or create) a database
db, err := agentdb.Open("agent.db")
if err != nil {
log.Fatal(err)
}
defer db.Close()
// Run SQL
if _, err := db.Execute(`CREATE TABLE IF NOT EXISTS sessions (
id TEXT PRIMARY KEY,
data TEXT
)`); err != nil {
log.Fatal(err)
}
if _, err := db.Execute(`INSERT OR REPLACE INTO sessions VALUES ('s1','{"turns":3}')`); err != nil {
log.Fatal(err)
}
rows, err := db.QueryJSON("SELECT * FROM sessions")
if err != nil {
log.Fatal(err)
}
fmt.Println(rows)
// Upsert and search vectors
embedding := []float32{0.1, 0.2, 0.3, 0.4}
if err := db.VectorUpsert("docs", "doc-1", embedding, []byte(`{"title":"hello"}`)); err != nil {
log.Fatal(err)
}
results, err := db.VectorSearch("docs", embedding, 5, nil)
if err != nil {
log.Fatal(err)
}
for _, r := range results {
fmt.Printf("id=%s score=%.4f\n", r.ID, r.Score)
}
// Memory graph
_ = db.GraphAddNode("session:s1", "session", []byte(`{"agent":"gpt-4o"}`))
_ = db.GraphAddNode("concept:llm", "concept", nil)
_ = db.GraphAddEdge("session:s1", "concept:llm", "mentions", 0.9)
neighbors, err := db.GraphNeighbors("session:s1", 2, 0.5, "")
if err != nil {
log.Fatal(err)
}
fmt.Println(neighbors)
// Statistics
stats, err := db.Stats()
if err != nil {
log.Fatal(err)
}
fmt.Printf("vectors=%d nodes=%d edges=%d\n", stats.Vectors, stats.Nodes, stats.Edges)
}
```
## API reference
| `Open(path) (*DB, error)` | Open/create a database. Use `":memory:"` for ephemeral. |
| `db.Close()` | Release native resources. |
| `db.Execute(sql) (int64, error)` | Run DDL/DML; returns rows affected. |
| `db.QueryJSON(sql) (string, error)` | SELECT → JSON array of objects. |
| `db.VectorUpsert(col, id, vec, meta)` | Upsert a vector with optional JSON metadata. |
| `db.VectorSearch(col, query, topK, filter)` | Approximate nearest-neighbour search. |
| `db.GraphAddNode(id, kind, data)` | Add/update a memory-graph node. |
| `db.GraphAddEdge(src, dst, relation, weight)` | Add/update a directed edge. |
| `db.GraphNeighbors(id, depth, minWeight, relation)` | BFS/DFS traversal from a node. |
| `db.FTSIndex(col, vecID, colID, text)` | Index text for full-text search. |
| `db.FTSSearch(col, query, topK)` | Full-text search with snippet highlights. |
| `db.HybridQuery(anchor, emb, col, depth, k, α)` | Blended graph + vector ranking. |
| `db.Stats() (Stats, error)` | Snapshot of collection / vector / node / edge counts. |
## Building on Windows
On Windows the import library is `agentdb.lib` and the DLL is `agentdb.dll`.
Set `CGO_LDFLAGS=-L<path> -lagentdb` and ensure `agentdb.dll` is on `%PATH%`.