akar-python — Python bindings (PyO3)
Python bindings for Akar — a pure Rust embedded graph database for AI agent memory.
Provides a drop-in replacement for KuzuDB in the Kairos project via a Cypher-to-SQL translation layer, or direct Akar API access.
Quick start
import akar
db = akar.Database("/path/to/db")
conn = akar.Connection(db)
# Execute Cypher queries
conn.query("""
CREATE NODE TABLE Memory(id INT64, content STRING, embedding FLOAT[],
PRIMARY KEY(id))
""")
# Parameterized queries
result = conn.execute(
"MATCH (m:Memory {id: $id}) RETURN m.content",
{"id": 42},
)
while result.has_next():
print(result.get_next())
# Get all results as list of dicts
rows = result.get_all()
db.close()
API surface
Database(path: str)
close()— release file lock, drop all connections__repr__()— display path
Connection(database: Database)
query(cypher: str) -> QueryResult— execute Cypher, no parametersexecute(cypher: str, params: dict = None) -> QueryResult— execute Cypher with$paraminterpolationclose()— drop connection (DB stays open)
QueryResult
has_next() -> bool— check for more rowsget_next() -> dict | list | scalar— fetch next row (returns dict whenrows_as_dict=True, default)get_all() -> list— fetch all rowsget_column_names() -> list[str]— column namesrows_as_dict(state: bool)— toggle dict vs tuple mode__iter__()/__len__()/__bool__()— iteration and checksclose()— drop result
Kairos compatibility shim
For drop-in replacement of KuzuDB in Kairos, use the shim at kairos/kuzu.py:
# In Kairos codebase:
import kuzu # transparently becomes `import akar`
db = kuzu.Database("/path/to/db")
conn = kuzu.Connection(db)
The shim registers a sys.modules alias for the kuzu package (ladybug
alias was removed in 0.1.1 — Kairos imports akar directly).
Supported Cypher features
- DDL:
CREATE NODE TABLE,CREATE REL TABLE,DROP TABLE,ALTER TABLE,CREATE/DROP INDEX - DML:
MATCH,WHERE,RETURN,CREATE,SET,DELETE,MERGE(ON CREATE/ON MATCH) - Composition:
WITH,ORDER BY,LIMIT,SKIP,UNION ALL,UNWIND,OPTIONAL MATCH,FOREACH - Data loading:
COPY FROM(CSV, Parquet),COPY TO,EXPORT DATABASE,IMPORT DATABASE - Parameters:
$paraminterpolation (string, int, float, bool, list, dict, null) - Translation: Kuzu syntax auto-converted to Akar SQL (
IF NOT EXISTS,FLOAT[n]→FLOAT[],INSTALL/LOAD EXTENSIONno-op, vector index calls)
Build from source
This crate is a standalone workspace (not a member of akar-core's workspace), so it does not affect the test [akar-core] gate or CI.
Prerequisites
- Rust toolchain (stable)
- Python >= 3.9
- maturin >= 1.7
Development build
cd akar-core/akar-python
python -m venv .venv
.venv/Scripts/python -m pip install maturin pytest
$env:PYO3_PYTHON = ".venv\Scripts\python.exe" # Windows PowerShell
# export PYO3_PYTHON=".venv/bin/python" # Linux/macOS
.venv/Scripts/maturin develop # build + install into venv
.venv/Scripts/python -c "import akar; print(akar.__name__)"
Release build (wheel)
.venv/Scripts/maturin build --release
# Output: target/wheels/akar-0.1.0-cp39-abi3-<platform>.whl
Source distribution
.venv/Scripts/maturin sdist
# Output: target/wheels/akar-0.1.0.tar.gz
Publishing to PyPI
akar 0.1.3 is live on PyPI (wheel cp39-abi3 + sdist, published 2026-08-24). Procedure:
- Build artifacts (do NOT use
maturin publish— it rebuilds the whole workspace from scratch, ~10 min, and can exceed tool timeouts):.venv/Scripts/maturin build --release .venv/Scripts/maturin sdist
- Upload with twine (installed via
uv tool install twine). Create an API token at https://pypi.org/manage/account/token/ ("Entire account"); it shows once — store it in a file outside the repo.# TestPyPI first (optional but recommended) twine upload --repository testpypi target/wheels/*.whl target/wheels/*.tar.gz # PyPI production twine upload --repository pypi target/wheels/*.whl target/wheels/*.tar.gz
Token supplied via env:TWINE_USERNAME=__token__,TWINE_PASSWORD=<token>. Add--skip-existingwhen re-uploading after a metadata-only change. - Verify:
pip install akar==<version>in a clean venv, then smoke testDatabase/Connection/Cypher. Run the compat harness (tests/test_kuzu_compat.py) against the installed wheel. - Bump version in
pyproject.toml([project].version) before each new release — PyPI rejects re-upload of an existing version. - Record the release in
../CHANGELOG.mdunder## [Unreleased](Keep a Changelog).
Tests
Rust unit tests (cargo)
cd akar-core/akar-python
cargo test --lib
39 tests covering: translation layer, parameter interpolation, value conversion, schema bootstrap, vector index / kNN, community detection (Louvain), LSTM bindings, spread activation, lock management, connection lifecycle.
Python compatibility harness (pytest)
cd akar-core/akar-python
.venv/Scripts/pytest tests/test_kuzu_compat.py -v
53 tests validating drop-in replacement against real Kairos KuzuDBStore / KuzuDBDreamBackend methods (schema bootstrap, store, search, connections, export/repair, CHECKPOINT).
Project structure
akar-core/akar-python/
├── Cargo.toml # pyo3 0.29.2 (abi3-py39), standalone workspace
├── pyproject.toml # maturin build config
├── src/
│ ├── lib.rs # PyO3 module: Database, Connection, QueryResult
│ ├── translation.rs # Kuzu Cypher → Akar SQL translation
│ └── param_interp.rs # $param → literal interpolation
└── tests/
├── conftest.py # pytest fixtures + gap-report hooks
└── test_kuzu_compat.py # 53 Kairos drop-in tests
License
GPL-3.0-or-later
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file akar-0.1.4-cp39-abi3-win_amd64.whl.
File metadata
- Download URL: akar-0.1.4-cp39-abi3-win_amd64.whl
- Upload date:
- Size: 6.4 MB
- Tags: CPython 3.9+, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7f986d196fd407bc8b1e220c66ed8d9e077934f9e4195181e6eb8f1dac9b5dea
|
|
| MD5 |
2f180ffe8103ed08b1fb0c455721ae21
|
|
| BLAKE2b-256 |
bea339574050f99d2197f72dae3ff949640d70372b509af9a2b2a586cf7c20de
|