Skip to main content

relate-db — Relate for Python

An embedded graph database for Python. Query it in Cypher, in-process — no server, no network, nothing to deploy.

Relate is an in-memory property-graph engine written in Rust. This package embeds it as a native extension (import relate): queries run in your process, on a graph that is pure in-memory, a directory, or a single .rl file, made durable by a fsync'd write-ahead log and Parquet checkpoints.

An experimental Neo4j Labs project, not part of Neo4j's supported product lineup. The PyPI name relate belongs to another project; this package is relate-db, and the import is relate.

Install

pip install relate-db

Optional extras — each is only needed for the matching result helper:

pip install "relate-db[pandas]"   # cursor.to_df()
pip install "relate-db[arrow]"    # cursor.to_arrow() (pyarrow)

Wheels are published for Linux (x86-64, aarch64), macOS (arm64) and Windows (x86-64); Python 3.9+ (one abi3 wheel per platform). No Rust toolchain needed.

Quick start

import relate

conn = relate.connect(":memory:")          # or a path: relate.connect("./friends")

conn.execute("CREATE (:Person {name: $name, age: $age})", {"name": "Alice", "age": 30})
conn.execute("CREATE (:Person {name: $name, age: $age})", {"name": "Bob", "age": 28})
conn.execute(
    "MATCH (a:Person {name: 'Alice'}), (b:Person {name: 'Bob'}) "
    "CREATE (a)-[:FRIENDS_WITH {since: 2020}]->(b)"
)

cursor = conn.execute(
    "MATCH (p:Person)-[:FRIENDS_WITH]->(f) RETURN p.name AS person, f.name AS friend"
)
for row in cursor:
    print(row["person"], "->", row.friend)   # rows are dicts with attribute access

conn.close()

relate.connect() is a sqlite3-style, DB-API 2.0 flavoured connection (execute, executemany, cursors, commit/rollback, context manager). The native relate.Database is the direct engine handle, with Arrow IPC via execute_arrow().

Persistence

Store Open with
In-memory — gone at exit relate.connect(":memory:")
Directory — WAL + Parquet shards (default) relate.connect("./friends")
Single file — WAL, snapshot and catalog in one .rl file relate.connect("./friends.rl")
Read-only — load once, refuse writes and checkpoints relate.connect("./friends", read_only=True)

A second writable open of the same store is refused (single-writer lease); use read_only=True for readers.

Parameters

Pass a dict and reference values as $name. Python types map the way you would expect: None, bool, int (64-bit), float, str, list/tuple, nested dict, datetime/date/time/timedelta, uuid.UUID (as its string) and bytes (as a list of byte values). Relate adds relate.Duration, relate.Vector and relate.Point for values stdlib types cannot carry without loss. A plain dict with srid/x/y keys stays an ordinary map — points are explicit.

conn.execute("UNWIND $rows AS r CREATE (:Item {id: r.id, tags: r.tags})",
             {"rows": [{"id": 1, "tags": ["a", "b"]}, {"id": 2, "tags": []}]})

Results

Rows are relate.Records — a dict with driver-style conveniences:

row = conn.execute("MATCH (p:Person) RETURN p.name AS name, p.age AS age ORDER BY name").fetchone()
row["name"] == row.name == "Alice"
row.data()      # {"name": "Alice", "age": 30} — nodes, relationships and
                # paths inside the row become plain dicts/lists, like the Neo4j driver
row.to_dict()   # like data(), but nodes/relationships/paths keep ids, labels,
                # endpoints and a "properties" dict — JSON-ready
row.keys()      # ["name", "age"]

On the cursor: fetchone / fetchmany / fetchall, data(), peek(), single() (exactly one row or ResultNotSingleError), keys(), plus to_df() (pandas) and to_arrow() (pyarrow, the fast bulk path).

n = conn.execute("MATCH (p:Person) RETURN count(p) AS n").single().n

summary = conn.execute("MATCH (p:Person) RETURN p").consume()
summary.counters, summary.query_type, summary.namespace
summary.elapsed_ms, summary.parse_ms, summary.plan_ms, summary.execute_ms

graph = conn.execute("MATCH (a)-[r]->(b) RETURN a, r, b").graph()
graph.nodes, graph.relationships          # de-duplicated, id-ordered

Temporal results come back as stdlib types when that is lossless and as relate.Temporal (nanoseconds, IANA zone) when it is not; durations are always relate.Duration. Node and relationship element_id equals Cypher's elementId(), so WHERE elementId(n) = $id finds the entity again. For a quick picture, relate.viz.to_visualization_graph(...) builds a neo4j-viz graph.

Transactions

Autocommit by default: a statement is durable when execute() returns. Turn it off to group statements.

conn.autocommit = False
try:
    conn.execute("CREATE (:Person {name: 'Carol'})")
    conn.execute("CREATE (:Person {name: 'Dan'})")
    bookmark = conn.commit()      # "relate:<n>", the engine's commit sequence
except Exception:
    conn.rollback()
    raise

Closing a connection rolls back an open transaction.

Errors

Every error inherits relate.RelateError (PEP 249 hierarchy: OperationalError, ProgrammingError, DataError, …) and carries the engine's own classification — neo4j_code, gql_status, stage and a retryable flag — so a retry loop never parses messages:

try:
    conn.execute("MATCH (n RETURN n")
except relate.RelateError as e:
    print(e.neo4j_code, e.retryable)

Threads

relate.threadsafety is 1: share the module, not a connection. A connection must be used (and dropped) on the thread that opened it; using it elsewhere raises ProgrammingError and leaves the owner thread's connection intact. In a threaded server, own the connection on one worker thread and submit work to it.

Bigger loads

Send rows in batches with UNWIND $rows, a few tens of thousands per statement, rather than one huge statement or one statement per row.

Serving it over the network

The same engine runs as a server. Start relate serve --bolt 7687 (see the CLI) and use the stock neo4j Python driver against it.

Documentation

The wheel also bundles an agent skill (.agents/skills/relate/SKILL.md, library-skills).

Development

pip install maturin
cd surfaces/relate-python && maturin develop --release

License: Apache-2.0.

Metadata

Release files for relate-db 1.0.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 relate-db 1.0.1
File Size Uploaded Provenance Actions
relate_db-1.0.1.tar.gz 4.6 MB With provenance Details for relate_db-1.0.1.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for relate-db 1.0.1
File Actions
relate_db-1.0.1-cp39-abi3-win_amd64.whl CPython 3.9 abi3 Windows x86-64 Details for relate_db-1.0.1-cp39-abi3-win_amd64.whl
relate_db-1.0.1-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl CPython 3.9 abi3 Linux glibc 2.17+ x86-64 Details for relate_db-1.0.1-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
relate_db-1.0.1-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl CPython 3.9 abi3 Linux glibc 2.17+ ARM64 Details for relate_db-1.0.1-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
relate_db-1.0.1-cp39-abi3-macosx_11_0_arm64.whl CPython 3.9 abi3 macOS 11.0+ ARM64 Details for relate_db-1.0.1-cp39-abi3-macosx_11_0_arm64.whl
relate_db-1.0.1-cp39-abi3-macosx_10_12_x86_64.whl CPython 3.9 abi3 macOS 10.12+ x86-64 Details for relate_db-1.0.1-cp39-abi3-macosx_10_12_x86_64.whl

Total release size: 53.6 MB

Release files / relate_db-1.0.1.tar.gz

Download URL relate_db-1.0.1.tar.gz
Size 4.6 MB
Tags Source
SHA-256 checksum
How to use checksums
1f08eb4e526bbf32fd614829b4eb5a7cee32c30c064e08bfface73b257bdd8c1
BLAKE2b-256 checksum
How to use checksums
e3e2efa661a67fd7c6189fd07157677265dc167419cb9c734ec1bc532ec41654
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 12, 2026.

Transparency log

Release files / relate_db-1.0.1-cp39-abi3-win_amd64.whl

Download URL relate_db-1.0.1-cp39-abi3-win_amd64.whl
Size 9.9 MB
Tags CPython 3.9 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
cae1e98c41420fac2d910b80ff0a38bfd2ac9cbaa206333eac3fd575e1dceec4
BLAKE2b-256 checksum
How to use checksums
ece01988c6a33f308f3bfa57c0cad97bcc24bbc42b566be0ee853e89e1893fa0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 12, 2026.

Transparency log

Release files / relate_db-1.0.1-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl

Download URL relate_db-1.0.1-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Size 10.3 MB
Tags CPython 3.9 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
b4cd31772085cd2cd8485e7334ab877d6218a6cf74bbcb35665efaa4a6c37c9a
BLAKE2b-256 checksum
How to use checksums
ead98defa020a133e2d5a78cf823170a64200d3d5eac403b74455db80f8857f4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 12, 2026.

Transparency log

Release files / relate_db-1.0.1-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl

Download URL relate_db-1.0.1-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Size 9.7 MB
Tags CPython 3.9 Linux glibc 2.17+ ARM64 abi3
SHA-256 checksum
How to use checksums
66c6babd4f7402e0e86c150f1b791788e8b56c4c449ac4c04cb5a5788ba5fea6
BLAKE2b-256 checksum
How to use checksums
1998f008bbf04c5ee9619c1e96abcc4efdefa376583f6665632e65344f908964
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 12, 2026.

Transparency log

Release files / relate_db-1.0.1-cp39-abi3-macosx_11_0_arm64.whl

Download URL relate_db-1.0.1-cp39-abi3-macosx_11_0_arm64.whl
Size 9.2 MB
Tags CPython 3.9 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
0a5359d6fd3803c330240208963d1a15fcfecf3f2790e1df134d046f6e538c9b
BLAKE2b-256 checksum
How to use checksums
88f5199a9a567509d58b0b42d0e64f448cdb67bde2fad6a0dac509cf2a4b5978
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 12, 2026.

Transparency log

Release files / relate_db-1.0.1-cp39-abi3-macosx_10_12_x86_64.whl

Download URL relate_db-1.0.1-cp39-abi3-macosx_10_12_x86_64.whl
Size 10.0 MB
Tags CPython 3.9 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
7e5688561a1dd9e40c63257ed5cdbad464a2afd0e22b4d348057a06aa33a52ad
BLAKE2b-256 checksum
How to use checksums
c33d6af9de99e14ebfa1ab47e7363d9ffb3667a3fe86ad213148fa3aa8ad23b1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 12, 2026.

Transparency log

Security for relate-db 1.0.1

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.

Full provenance

All 6 files in this release have been uploaded with provenance metadata.

Select from 6 files

Attestation for relate_db-1.0.1.tar.gz

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 Nov 12, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

1.0.1 This release

6 release files Full provenance

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