rete-graph — Python client for .rete files
Query local and remote .rete graph files with SPARQL from Python. A
.rete file is a single, immutable, range-queryable RDF graph file
(rete): drop it on any HTTP host that
supports Range requests and query it in place — the client fetches only the
byte ranges a query touches, never the whole file.
These are native bindings (PyO3) to the same Rust engine that powers the rete CLI and the browser playground.
Install
uv pip install rete-graph # or: pip install rete-graph
Wheels cover Linux (x86_64/aarch64), macOS, Windows — and, from 0.2.0,
browser Python: in JupyterLite or marimo's WASM playground,
%pip install rete-graph resolves a Pyodide (PyEmscripten) wheel and remote
graphs are queried over sync-XHR range requests, no server anywhere.
A runnable tour with captured outputs lives in
examples/tutorial.ipynb, and
examples/agents/ turns a graph into agent tools for
LangChain and Pydantic AI.
Use
import rete_graph as rete
# Remote: lazy HTTP range reads — a selective query over a multi-GB file
# fetches KBs. Any S3/R2/CDN/GitHub URL with Range + CORS works.
g = rete.open("https://data.graphplaza.com/boe/boe.rete")
rows = g.query("""
SELECT ?s ?label WHERE {
?s <http://www.w3.org/2000/01/rdf-schema#label> ?label
} LIMIT 10
""")
for row in rows:
print(row["s"].value, "→", row["label"].to_python())
print(g.stats()) # {'fileLength': ..., 'bytes': ..., 'requests': ...}
query() returns {variable: Term} rows for SELECT, a bool for ASK, and
(s, p, o) triples for CONSTRUCT/DESCRIBE. A Term carries .kind / .value
/ .datatype / .lang, plus .to_python() (int/float/bool for common XSD
types) and .n3.
More:
g = rete.open("data/example.rete") # local file, opened lazily too
g = rete.open(rete.build(nt_text)) # build a graph in memory ("nt"/"nq"/"ttl"/"trig"/"rdfxml")
g = rete.open(rete.build(rdflib_graph)) # or straight from an rdflib Graph/Dataset
g = rete.open(url, headers={"Authorization": "Bearer ..."}) # authed hosts
g.examples() # SPARQL examples embedded in the file — run as-is
g.query(q, reason=True) # OWL 2 QL entailment (query rewriting)
g.query_df("SELECT ...") # pandas DataFrame (pip install rete-graph[pandas])
g.schema() # class/predicate profile
g.prefix_search("Berl") # label autocomplete
g.text_search("volcano eruption") # full-text (files built with --text-index)
g.info(), g.quads, g.content_hash()
SPARQL 1.1 SERVICE federation works out of the box — join a .rete file
against any public SPARQL endpoint in one query.
Stream every quad out
iter_quads() is a generator over the whole dataset — default graph first,
then each named graph — walked in batches, so peak memory is bounded by one
batch no matter how big the file is:
for s, p, o, graph in g.iter_quads(): # N-Triples term tokens; graph is
... # None for the default graph
to_nquads() serializes the same walk to a path or any open stream, which is
what makes handing a .rete to another RDF toolchain a three-liner:
g.to_nquads("out.nq") # or a StringIO / gzip.open(...) / sys.stdout
store = pyoxigraph.Store()
store.bulk_load(path="out.nq", format=pyoxigraph.RdfFormat.N_QUADS)
Measured on figshare.rete (221 MB, 15.9 M quads): to_nquads streams the
whole file in 941 MiB peak RSS in 25 s, of which only ~20 MiB is the batch
— the rest is the engine's faulted index/dictionary, and it is flat in the
quad count. list(g.iter_quads()) on the same file needs many GB, and
rete export needs > 1.1 GiB. Pass batch_size= to trade: a small batch
makes a peek at a remote graph much cheaper (5 quads for 1.1 MB of range
reads at batch_size=1, versus 44 MB at the default 10 000), a large one
speeds up a full walk. Scope with graph=: rete.DEFAULT_GRAPH for the
unnamed default graph alone, or an IRI for one named graph.
RDF 1.2 and quoted triples
The same --quoted-triple-syntax vocabulary and defaults as the CLI, in both
directions:
# Reading: what Turtle/TriG `<< s p o >>` means. "rdf-star" (default) = a quoted
# triple, as before; "rdf12" = RDF 1.2 (`<<( s p o )>>` triple terms, `<< … >>`
# reifiers, `{| … |}` annotations). N-Triples/N-Quads/RDF-XML ignore it.
g = rete.open(rete.build(ttl_text, "ttl", quoted_triple_syntax="rdf12"))
rete.Builder().add_file("data.trig", quoted_triple_syntax="rdf12")
# Writing: to_nquads spells a quoted triple as the RDF 1.2 triple term
# `<<( s p o )>>` by default, which pyoxigraph / Oxigraph 0.5 and Jena 5 read;
# "rdf-star" writes rete's stored `<<s p o>>`. RDF 1.2 has no subject-position
# triple term, so such a statement raises ValueError under "rdf12".
g.to_nquads("out.nq") # rdf12
g.to_nquads("out.nq", quoted_triple_syntax="rdf-star")
# The card says whether a file holds any, from its header (so old files answer):
g.card()["signals"]["quoted_triples"]
# {"present": True, "export_surfaces": ["rdf12", "rdf-star"], "export_default": "rdf12"}
The Pyodide wheel has no RDF 1.2 Turtle/TriG reader and refuses
quoted_triple_syntax="rdf12" for those formats by name.
Prepare a .rete step by step
The lazy Builder configures a build — sources, embedded Dataset Card,
pyramid, full-text index — then run() / export():
builder = (
rete.Builder()
.add_file("people.ttl") # or .add(text) / .add(rdflib_graph)
.card(title="People", license="CC0-1.0", created="2026-07-16")
.pyramid(algo="louvain") # or "types", or .pyramid(False)
.text_index()
)
builder.run() # bytes; counts in builder.stats
builder.export("people.rete") # immutable, host-anywhere file
builder.graph().card() # read the embedded card back
See the "Python: build a .rete" tutorial in the docs for the full walkthrough.
Custom storage (fsspec, S3, GCS, …)
Anything that can serve byte ranges can back a graph — pass an object with
read_at(offset, length) -> bytes and len():
import fsspec, rete_graph as rete
class FsspecReader:
def __init__(self, url, **kw):
self.f = fsspec.open(url, "rb", **kw).open()
self.size = self.f.size
def len(self):
return self.size
def read_at(self, offset, length):
self.f.seek(offset)
return self.f.read(length)
g = rete.open(reader=FsspecReader("s3://my-bucket/data.rete", anon=False))
Building from source
The package is a maturin project; the repo convention is to build in Docker (nothing on the host):
# from the repository root
docker run --rm -v "$PWD":/io ghcr.io/pyo3/maturin build \
--release -m clients/python/Cargo.toml --out clients/python/dist
uv pip install clients/python/dist/*.whl
Tests: uv pip install pytest && pytest clients/python/tests.
Wheels are abi3 (>= 3.9): one wheel per platform covers every CPython.
Releases are published to PyPI by
.github/workflows/python-client-publish.yml on a py-v* tag.
Metadata
Release files for rete-graph 0.3.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| rete_graph-0.3.6.tar.gz | 690.5 kB | Without provenance | Details for rete_graph-0.3.6.tar.gz |
Built distributions (wheels)
Total release size: 18.7 MB
Release files / rete_graph-0.3.6.tar.gz
| Download URL | rete_graph-0.3.6.tar.gz |
|---|---|
| Size | 690.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1320ca3c9ce1c6c1f760e2733299e1a0d289debf41b47e8f56e6b3c89adc5183
|
|
BLAKE2b-256 checksum How to use checksums |
a3860a7602e5b5d83e4d138f0546feedaf69b5d135c35cfd09b1e2f74a5a5d46
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.4 {"installer":{"name":"uv","version":"0.13.4","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}
|
Release files / rete_graph-0.3.6-cp39-abi3-win_amd64.whl
| Download URL | rete_graph-0.3.6-cp39-abi3-win_amd64.whl |
|---|---|
| Size | 3.1 MB |
| Tags | CPython 3.9 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
1c5df277b76365ced8f74db37e5a24fc73b78ff1d45c08affeb8ef3d3b71f140
|
|
BLAKE2b-256 checksum How to use checksums |
2d7bb355fd4cdcf0834658a4093fd602b662e083e32528fd4d6f8ba05d893ed8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.4 {"installer":{"name":"uv","version":"0.13.4","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}
|
Release files / rete_graph-0.3.6-cp39-abi3-pyemscripten_2026_0_wasm32.whl
| Download URL | rete_graph-0.3.6-cp39-abi3-pyemscripten_2026_0_wasm32.whl |
|---|---|
| Size | 1.1 MB |
| Tags | CPython 3.9 PyEmscripten 2026.0+ WebAssembly abi3 |
|
SHA-256 checksum How to use checksums |
fce7369acf6def6cdafe5a0087866bb4b135796a331d37c6d7ae545d2da28091
|
|
BLAKE2b-256 checksum How to use checksums |
7761c53dac6e918ac268f51e0c572c205c428a2e828dd09a21e090e08c905912
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.4 {"installer":{"name":"uv","version":"0.13.4","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}
|
Release files / rete_graph-0.3.6-cp39-abi3-pyemscripten_2025_0_wasm32.whl
| Download URL | rete_graph-0.3.6-cp39-abi3-pyemscripten_2025_0_wasm32.whl |
|---|---|
| Size | 1.1 MB |
| Tags | CPython 3.9 PyEmscripten 2025.0+ WebAssembly abi3 |
|
SHA-256 checksum How to use checksums |
6f9d7d6f9592f9565f4a08e0f57d1dc5a6797be32c71c5919ca156800c5f6e44
|
|
BLAKE2b-256 checksum How to use checksums |
2530da2562b2f9dd961488385488cc8d5739c06f9835367c953e266c07cff0f8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.4 {"installer":{"name":"uv","version":"0.13.4","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}
|
Release files / rete_graph-0.3.6-cp39-abi3-manylinux_2_28_aarch64.whl
| Download URL | rete_graph-0.3.6-cp39-abi3-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 3.2 MB |
| Tags | CPython 3.9 Linux glibc 2.28+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
ec9614bd7fb5c6439f5c79f11abc2cd8921783c56fddaafe4ad9c9de42b45038
|
|
BLAKE2b-256 checksum How to use checksums |
1eec75bd3039c7aca4b2e7dd6b02cf9474a6d757822612030a8a12963ba3c66c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.4 {"installer":{"name":"uv","version":"0.13.4","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}
|
Release files / rete_graph-0.3.6-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | rete_graph-0.3.6-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 3.4 MB |
| Tags | CPython 3.9 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
085fe2029611ec7c39f1a5831ee9328301dd9dae33a30fe770ab18df094d96a4
|
|
BLAKE2b-256 checksum How to use checksums |
c6ff2f55cdd82524697524ef70dc8e0a3faa1b348f8566093f0d4f95c3500b44
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.4 {"installer":{"name":"uv","version":"0.13.4","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}
|
Release files / rete_graph-0.3.6-cp39-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
| Download URL | rete_graph-0.3.6-cp39-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl |
|---|---|
| Size | 6.1 MB |
| Tags | CPython 3.9 abi3 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
2d66badd4fd677654467f8a5fc45eeafff897f203c828cca132c55b37ffdd4ed
|
|
BLAKE2b-256 checksum How to use checksums |
e0affa4a59a5c7f1bf0befacdc3ff4f0beed1784582645d062793689c54a10cc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.4 {"installer":{"name":"uv","version":"0.13.4","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}
|
Security for rete-graph 0.3.6
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
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.