Skip to main content

bkndb — Python Bindings

PyPI Version Python Version License: Apache-2.0

Embedded hybrid graph + relational + vector database engine for Python.

bkndb runs completely in-process (like SQLite), persists to a single native .bkndb container file, and provides unified ACID transactions across property graphs, relational tables, BM25 full-text search, and HNSW vector similarity search.


Installation

pip install bkndb                     # Pre-built wheels for Windows, Linux, and macOS
pip install "bkndb[pandas,networkx]"  # With Pandas DataFrame & NetworkX integration

Requires Python 3.10+. One single wheel per OS/architecture serves all Python 3.x versions.


Quick Start

import bkndb
from bkndb import TableSchema, Column, col, Agg

# Open or create a persistent database file
with bkndb.open("knowledge.bkndb") as db: # or bkndb.in_memory()
    # 1. Define and create a relational table
    db.create_table(TableSchema(
        "chunks",
        [
            Column("id", int),
            Column("doc_id", int, nullable=False),
            Column("text", str),
            Column("tokens", int, default=0),
        ],
        primary_key="id",
        auto_increment=True,
        indexes=["doc_id"],
    ))

    # 2. Unified ACID transaction across graph & tables
    with db.transaction() as tx:
        # Create graph entities
        doc = tx.create_node("Document", {"title": "Attention Is All You Need"})
        concept = tx.create_node("Concept", {"name": "Transformer"})
        tx.create_edge(doc, "DISCUSSES", concept, {"relevance": 0.95})

        # Insert relational row referencing the graph node
        tx.insert("chunks", {"doc_id": doc, "text": "Self-attention mechanism...", "tokens": 512})

    # 3. Query relational tables
    rows = db.select("chunks", col("tokens") >= 500, order_by="-tokens", limit=5)
    print("Found chunks:", rows)

    # 4. Traversal & Graph Analysis
    for hit in db.traverse(doc, max_depth=2):
        target = db.get_node(hit.node_id)
        print(f"Hop {hit.depth}: ({target.label}) -> {target.properties}")

    # 5. Execute raw SQL or Cypher MATCH queries
    sql_res = db.sql("SELECT doc_id, COUNT(*) AS count FROM chunks GROUP BY doc_id").dicts()
    print("SQL Stats:", sql_res)

    match_res = db.graph_query(
        "MATCH (d:Document)-[:DISCUSSES]->(c:Concept) RETURN d.title, c.name"
    ).dicts()
    print("Graph Relations:", match_res)

Feature Overview

1. Database Handles & Context Management

  • bkndb.open(path, ...): Opens or creates a .bkndb file.
  • bkndb.in_memory(): Creates an ephemeral, in-memory database instance.
  • db.close(): Explicitly closes the database and releases file locks.
  • db.compact(): Rewrites the database file, reclaiming space from deleted records.
  • db.backup(dest_path): Performs an online hot backup without stopping reads or writes.
  • db.verify_integrity(): Validates CRC32 checksums of all storage blocks.
  • db.stats(): Returns entity counts and low-level storage metrics (reclaimable_bytes, file size).

2. Property Graph & Algorithms

  • CRUD: create_node, create_nodes_bulk, get_node, update_node, delete_node, create_edge, create_edges_bulk, get_edge, update_edge, delete_edge.
  • Topologies: neighbors(id, direction, edge_type), degree(id, direction).
  • Shortest Path (BFS):
    path = db.find_shortest_path(start_node, target_node, edge_type="CALLS")
    # Returns: distance, list of hops
    
  • Dijkstra Weighted Path:
    route = db.find_weighted_path(home_node, office_node, weight="minutes")
    # Returns: route.cost, route.path
    
  • Blast Radius / Impact Traversal:
    hits = db.traverse(root_node, direction=bkndb.Direction.INCOMING, max_depth=3)
    
  • Top Hubs & Centrality:
    top_entities = db.top_hubs(k=10)
    
  • Cascading Deletion:
    stats = db.cascade_delete(node_id)
    

3. Relational Tables & Query Builder

  • Schema Definition: TableSchema(name, columns, primary_key, auto_increment, indexes).
  • Constraints: nullable=False (NOT NULL), unique=True (UNIQUE), default=value.
  • Mutations: insert, insert_many, upsert, upsert_many, update_rows, delete_rows.
  • Query Builder (col):
    from bkndb import col
    
    # Comparisons & Boolean logic
    cond = (col("age") >= 18) & (col("status") == "active")
    
    # String & List operators
    cond = col("email").endswith("@company.com") | col("tags").contains("vip")
    
    # Nested JSON / Map access
    cond = col("metadata.author.id") == 42
    
    rows = db.select("users", where=cond, order_by="-created_at", limit=20)
    
  • Aggregations:
    [stats] = db.aggregate("users", [Agg.count(), Agg.avg("age"), Agg.max("salary")])
    grouped = db.aggregate("orders", [Agg.sum("amount")], group_by=["customer_id"])
    

4. Text Query Languages: SQL & Cypher MATCH

SQL

db.sql(
    "SELECT category, COUNT(*) AS count, AVG(price) AS avg_price "
    "FROM products WHERE in_stock = ? GROUP BY category ORDER BY count DESC",
    [True],
).dicts()

Cypher MATCH

db.graph_query(
    "MATCH (u:User {name: $user})-[:FRIEND*1..2]->(f:User) "
    "WHERE f.age > 21 "
    "RETURN f.name AS friend, count(*) AS paths ORDER BY f.name",
    {"user": "Alice"},
).dicts()

5. Full-Text Search (BM25) & Vector Search (HNSW)

# 1. Full-Text BM25 Search
db.create_fulltext_index("articles", "content")
hits = db.search_text("articles", "content", "graph machine learning", limit=5)
for h in hits:
    print(f"Row {h.row.pk}, Score: {h.score:.2f}")

# 2. Vector Search (Exact or HNSW ANN)
# Embedding can be float list or compact binary pack_vector()
embedding = model.encode("semantic query")
db.insert("articles", {"title": "Paper", "emb": bkndb.pack_vector(embedding)})

# Build HNSW index for high-scale fast search
db.create_vector_index("articles", "emb", metric="cosine", m=16, ef_construction=200)

results = db.search_vector("articles", "emb", embedding, limit=5, metric="cosine")
for res in results:
    print(f"PK: {res.row.pk}, Distance: {res.distance:.4f}")

6. High-Performance Bulk Synchronization (sync_batch)

Atomic ingestion of thousands of graph nodes, edges, and relational rows without transaction overhead:

from bkndb import NewNode

db.sync_batch(
    nodes=[
        ("File", {"path": "src/main.rs"}),
        ("Function", {"name": "main"}),
    ],
    edges=[
        (repo_node_id, "CONTAINS", NewNode(0), {}),
        (NewNode(0), "DEFINES", NewNode(1), {}),
    ],
    rows={
        "ast_metadata": [
            {"file_path": "src/main.rs", "lines": 120},
        ],
    },
)

7. Pandas & NetworkX Integration

# Export relational table directly to pandas DataFrame (indexed by primary key)
df = db.select_df("users", col("status") == "active")

# Convert graph traversal to NetworkX MultiDiGraph
G = db.to_networkx(start_node_id, max_depth=3)

8. Import & Export (CSV and JSONLines)

# Export
db.export_jsonl("users", "users_backup.jsonl")
db.export_csv("users", "users_backup.csv")

# Import (executed inside a single atomic transaction)
db.import_jsonl("users", "users_backup.jsonl", mode="upsert")
db.import_csv("users", "new_users.csv", mode="insert")

Development & Building from Source

cd bindings/python
python -m venv .venv
# Activate virtualenv (Linux/macOS: source .venv/bin/activate, Windows: .venv\Scripts\activate)
pip install maturin pytest
maturin develop --release
pytest

License

Licensed under the Apache License, Version 2.0 (see LICENSE).

Metadata

Release files for bkndb 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for bkndb 0.2.1
File Size Uploaded
bkndb-0.2.1.tar.gz 250.5 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for bkndb 0.2.1
File
bkndb-0.2.1-py3-none-win_amd64.whl Python 3 none Windows x86-64 Details
bkndb-0.2.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl Python 3 none Linux glibc 2.17+ x86-64 Details
bkndb-0.2.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl Python 3 none Linux glibc 2.17+ ARM64 Details
bkndb-0.2.1-py3-none-macosx_11_0_arm64.whl Python 3 none macOS 11.0+ ARM64 Details
bkndb-0.2.1-py3-none-macosx_10_12_x86_64.whl Python 3 none macOS 10.12+ x86-64 Details

Total release size: 7.3 MB

Release files / bkndb-0.2.1.tar.gz

Download URL bkndb-0.2.1.tar.gz
Size 250.5 kB
Tags Source
SHA-256 checksum
How to use checksums
8e7e5315898bf9515039682c9d3faed8c0bc2f854ef28d20b516087470096f80
BLAKE2b-256 checksum
How to use checksums
432a646fa4626810e60b19392749dee7ec0d6a739ed39e15e620028b994eeb68
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / bkndb-0.2.1-py3-none-win_amd64.whl

Download URL bkndb-0.2.1-py3-none-win_amd64.whl
Size 1.3 MB
Tags Python 3 Windows x86-64
SHA-256 checksum
How to use checksums
f75f3533d61f4d6ed5ce31a1dc84cfcf2e210ec27c9a1dff50fdcb553b1c7e53
BLAKE2b-256 checksum
How to use checksums
2ec8e750a73614a3810436800b83de8eaeab9c26372a0b7f4489f8779aa336b4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / bkndb-0.2.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL bkndb-0.2.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 1.7 MB
Tags Linux glibc 2.17+ x86-64 Python 3
SHA-256 checksum
How to use checksums
7bc50cf80aef7e038153f1218c2bce15026b7d5823fc0796495d2bfb74f18ec0
BLAKE2b-256 checksum
How to use checksums
c1ab8141e009f280c0970a31505948dd8d6e68aafb61018f82f6db965e49e6d8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / bkndb-0.2.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL bkndb-0.2.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 1.4 MB
Tags Linux glibc 2.17+ ARM64 Python 3
SHA-256 checksum
How to use checksums
5f703eb8fd285e946d8f170df9c24b80fa0b9d5be8115cbdffabf9652ffafa3f
BLAKE2b-256 checksum
How to use checksums
7891e45ea43b9f42accea13c406a1aea63ef75508e7621742c8ffd0db1da39c6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / bkndb-0.2.1-py3-none-macosx_11_0_arm64.whl

Download URL bkndb-0.2.1-py3-none-macosx_11_0_arm64.whl
Size 1.3 MB
Tags Python 3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
6e97454d555fa45f3da4879e49b827a56b20ea5272b06642d0ac147bbad74351
BLAKE2b-256 checksum
How to use checksums
f34077179da4b890db8bd03e9ab15af451fc398f36667ef722499608f67702c3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / bkndb-0.2.1-py3-none-macosx_10_12_x86_64.whl

Download URL bkndb-0.2.1-py3-none-macosx_10_12_x86_64.whl
Size 1.4 MB
Tags Python 3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
9f0fcbbe44b15f57321d8f1e4126e6dc3b3fae763fd6d2e6066330f188c47937
BLAKE2b-256 checksum
How to use checksums
62359833ebe2de495d78ff4d4aa79d4cbad01fc8dfc95233da3ea5bfbc5966a7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.1 This release

6 release files

0.2.0

4 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page