Skip to main content

Python bindings for Uni Graph Database (default — all 11 providers, CPU)

Project description

uni-db: Python Bindings for Uni Graph Database

PyPI License

Python bindings for the Uni embedded graph database.

Part of The Rustic Initiative by Dragonscale Industries Inc.

Installation

pip install uni-db

Quick Start

import uni_db

# Open or create a database
db = uni_db.Database("./my_graph")

# Define schema
db.create_label("Person")
db.add_property("Person", "name", "string", False)
db.add_property("Person", "age", "int64", True)
db.create_scalar_index("Person", "name", "btree")

# Write data
db.execute("CREATE (p:Person {name: 'Alice', age: 30})")
db.execute("CREATE (p:Person {name: 'Bob', age: 25})")
db.flush()

# Query
results = db.query(
    "MATCH (p:Person) WHERE p.age > $min RETURN p.name",
    {"min": 28},
)
print(results)  # [{'p.name': 'Alice'}]

Schema Operations

# Labels and edge types
db.create_label("Person")
db.create_edge_type("KNOWS", ["Person"], ["Person"])
db.add_property("Person", "name", "string", False)   # nullable=False
db.add_property("Person", "age",  "int64",  True)    # nullable=True

# Indexes
db.create_scalar_index("Person", "name", "btree")
db.create_vector_index("Person", "embedding", "cosine")  # or "l2"

# Introspection
db.list_labels()         # ['Person', ...]
db.list_edge_types()     # ['KNOWS', ...]
db.get_label_info("Person")
db.get_schema()

Transactions

txn = db.begin()
txn.execute("CREATE (p:Person {name: 'Charlie'})")
txn.commit()   # or txn.rollback()

Bulk Loading

writer = db.bulk_writer()
writer.insert_vertices("Person", [
    {"name": "Alice", "age": 30},
    {"name": "Bob",   "age": 25},
])
writer.insert_edges("KNOWS", [
    (person_vids[0], person_vids[1], {}),   # (src_vid, dst_vid, properties)
])
writer.commit()

Vector Search

# Create a vector index
db.create_label("Document")
db.add_property("Document", "text",      "string",     False)
db.add_property("Document", "embedding", "vector[128]", True)
db.create_vector_index("Document", "embedding", "cosine")

db.execute("CREATE (d:Document {text: 'hello world', embedding: [0.1, 0.2, 0.3]})")
db.flush()

# K-NN search
results = db.query("""
    CALL uni.vector.query('Document', 'embedding', $vec, 10)
    YIELD vid, distance
    RETURN vid, distance
    ORDER BY distance
""", {"vec": my_embedding})

# K-NN with pre-filter (SQL WHERE expression)
results = db.query("""
    CALL uni.vector.query('Document', 'embedding', $vec, 10, 'category = "tech"')
    YIELD vid, distance
    RETURN vid, distance
""", {"vec": my_embedding})

# K-NN with distance threshold
results = db.query("""
    CALL uni.vector.query('Document', 'embedding', $vec, 10, NULL, 0.5)
    YIELD vid, distance
    RETURN vid, distance
""", {"vec": my_embedding})

YIELD columns: vid (integer vertex ID), distance (float).

Async API

import uni_db

# Open
db = await uni_db.AsyncDatabase.open("./my_graph")
# or: db = await uni_db.AsyncDatabase.temporary()

await db.execute("CREATE (p:Person {name: 'Alice', age: 30})")
results = await db.query("MATCH (p:Person) RETURN p.name")
await db.flush()

Forks

Named, durable, isolated branches of the graph. A fork lets a session reason about an alternate version of the database — what-if analysis, audit hold, scenario sandboxing — that survives across restarts.

import uni_db
from datetime import timedelta

db = uni_db.Uni.builder().build()
db.schema().label("Person").property("name", "string").apply()

primary = db.session()

# Open or create a fork (Phase 2: writable; Phase 3: nestable;
# Phase 4a: TTL + tags + budget).
fork = primary.fork("scenario_1").ttl(timedelta(hours=1)).build()
tx = fork.tx()
tx.execute("CREATE (:Person {name: 'fork-only'})")
tx.commit()

# Fork sees primary state + its own writes; primary unchanged.
print(fork.query("MATCH (p:Person) RETURN count(p) AS n"))

# Pin a Lance tag for audit retention; the tag survives the drop.
db.tag_fork("scenario_1", "audit-2026-q1")
del fork
db.drop_fork("scenario_1")
print(db.list_fork_tags("scenario_1"))  # tag still resolvable

The async surface mirrors this exactly through AsyncUni / AsyncSession. See examples/fork_quickstart.py and examples/fork_audit.py for runnable demos, and the full Python API reference for every method, type, and error variant.

Query Utilities

# Parameterized queries
results = db.query(
    "MATCH (p:Person) WHERE p.name = $name RETURN p",
    {"name": "Alice"},
)

# Explain / profile
plan    = db.explain("MATCH (p:Person) RETURN p")
results, stats = db.profile("MATCH (p:Person) RETURN p")

Development

git clone https://github.com/rustic-ai/uni-db
cd uni-db/bindings/uni-db
uv sync --group dev
uv run maturin develop   # builds and installs the extension module
uv run pytest            # run tests

Links

License

Apache 2.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

uni_db-2.2.2.tar.gz (4.2 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

uni_db-2.2.2-cp310-abi3-win_amd64.whl (142.2 MB view details)

Uploaded CPython 3.10+Windows x86-64

uni_db-2.2.2-cp310-abi3-manylinux_2_28_x86_64.whl (162.9 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ x86-64

uni_db-2.2.2-cp310-abi3-manylinux_2_28_aarch64.whl (164.7 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ ARM64

uni_db-2.2.2-cp310-abi3-macosx_11_0_arm64.whl (143.7 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

File details

Details for the file uni_db-2.2.2.tar.gz.

File metadata

  • Download URL: uni_db-2.2.2.tar.gz
  • Upload date:
  • Size: 4.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for uni_db-2.2.2.tar.gz
Algorithm Hash digest
SHA256 cf7daec83941aac4e3489b336516e8ca240c408fa657585ef72365ba513cb7e5
MD5 db95521de2483bd98a2e80fbc2042832
BLAKE2b-256 1d1cf166dd4cd4730f8b69fd1e91196b05800bff7256bc88bdc131a52f2eeab9

See more details on using hashes here.

File details

Details for the file uni_db-2.2.2-cp310-abi3-win_amd64.whl.

File metadata

  • Download URL: uni_db-2.2.2-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 142.2 MB
  • Tags: CPython 3.10+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for uni_db-2.2.2-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 fb52a5242422b06a228683d16371627377842b13905b33b12a648fd620ef5f5b
MD5 742938e5a61ef1ff6f76e4d23177e5cc
BLAKE2b-256 2e6bc6409f59c71acb07001afff7598a8bc81c1fd8ca0bdce5594d93439197ac

See more details on using hashes here.

File details

Details for the file uni_db-2.2.2-cp310-abi3-manylinux_2_28_x86_64.whl.

File metadata

  • Download URL: uni_db-2.2.2-cp310-abi3-manylinux_2_28_x86_64.whl
  • Upload date:
  • Size: 162.9 MB
  • Tags: CPython 3.10+, manylinux: glibc 2.28+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for uni_db-2.2.2-cp310-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f5f48193ed509725c921f7e2bbdda6745546f41d33549afb3419429767b1182e
MD5 c057b4878b20333d5310e8c0f196660f
BLAKE2b-256 7997344eb442d2d76daad85ed3187206f50cc508b1e5813ee4df0145af91eb9e

See more details on using hashes here.

File details

Details for the file uni_db-2.2.2-cp310-abi3-manylinux_2_28_aarch64.whl.

File metadata

  • Download URL: uni_db-2.2.2-cp310-abi3-manylinux_2_28_aarch64.whl
  • Upload date:
  • Size: 164.7 MB
  • Tags: CPython 3.10+, manylinux: glibc 2.28+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for uni_db-2.2.2-cp310-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c3cf7f47e1cf3c3ae1cb408fbe35b36ad4fc75ee003fd86011e6c10fe270b173
MD5 90eb50b12716b084e268e696f298bf3e
BLAKE2b-256 90ef2d2201612f3f8f1f6ec016617c86accd13da4f2adb99992a2f421c5de256

See more details on using hashes here.

File details

Details for the file uni_db-2.2.2-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

  • Download URL: uni_db-2.2.2-cp310-abi3-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 143.7 MB
  • Tags: CPython 3.10+, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for uni_db-2.2.2-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7843902c8128181dcdf56112a128cf5d33cb6edd4526e1bed59a9a882a8e7da7
MD5 a77f1f13770a2178ffc1e6f8491e2959
BLAKE2b-256 b8ef7308252ffbe3fb3f41b19d0d997abe6e6d8e8f3a89d638b51e65bf0c496d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page