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.0

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

Built distributions (wheels)

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

Total release size: 5.8 MB

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

Download URL bkndb-0.2.0-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
8f32336982823c9cb19879ebd8a1e542eabe690b0c95ddf8321a5f675e0761d3
BLAKE2b-256 checksum
How to use checksums
b8f324ba53aa9026f368049765d6486419b487099b00880470620e339bfb9b8c
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.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL bkndb-0.2.0-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
b6c004f28bd9419643c7cf365219a3b5ef441bbd60ec0f22028cbb7c4092a2ff
BLAKE2b-256 checksum
How to use checksums
5950fe687bc1776b51160e795c5f9987d69c1fcfb7c56c47413d53a78436bbd1
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.0-py3-none-macosx_11_0_arm64.whl

Download URL bkndb-0.2.0-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
4ee910c2c865ef7875bb43f4db6b27d3233254564af17ddae88049b0a692e903
BLAKE2b-256 checksum
How to use checksums
edd5faf3be7e9877f823a61370126b860016d48a486232cd4c013a94ed411bb2
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.0-py3-none-macosx_10_12_x86_64.whl

Download URL bkndb-0.2.0-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
04ec7a150a7c504fd36e2cea92c19dd3f3d2c05a62752a678ced63de505d2aa8
BLAKE2b-256 checksum
How to use checksums
6cee64cf057b3716be54344487a4be27d393e2d4e1987c75673ea082bf9d624e
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

0.2.1

6 release files

This release

0.2.0 This release

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