.rete — browser-native SPARQL over static, range-addressable RDF files
Three knowledge graphs — up to 60 GB and 3.8 billion triples —
published as plain files on static hosting, with no server behind
them. Query them here, three ways, and watch what each answer
physically cost.
aIn the browser
A static page with the engine compiled to WebAssembly. Open a graph
you did not build, read its card, run a summary-safe query that never
touches the index, then a selective one — and watch the run strip
report the requests issued, the bytes moved, the permutation chosen
and the exact byte ranges read.
The same URLs, from Python — no kernel, no server, no local install.
Pyodide runs in the page and rete-graph installs from
PyPI; results land in pandas, and stats() keeps counting
the bytes and range requests each step actually spent.
A packaged MCP extension puts the same engine inside an
MCP-capable assistant: nine tools over these files, among them the
card, the schema and SPARQL. It reads the card to learn the
vocabulary before querying — which is what stops a model inventing
predicate names.
Publishing an RDF graph for interactive use normally means running a SPARQL
endpoint or shipping the whole dataset to whoever asks. These three take a
third route: the graph, its dictionary, its six permutation indexes and its
own description are packed into one immutable file whose sections
are addressed by byte range. A .rete opens with a 1 KB
header holding a typed section directory — the offset and length of
everything else — so nothing later in the file is ever found by scanning and
every read is a bounded HTTP Range request.
The dataset card and the schema pyramid sit before the
dictionary, so a visitor can learn what a graph contains — title, licence,
provenance, exact per-predicate and per-class histograms, runnable starter
queries — without opening a triple index at all. Because all six
permutations exist, a triple pattern with bound terms resolves to a
contiguous range with its bound components leading, which is what keeps
remote routing bounded.
The three graphs
All three are plain objects on Cloudflare R2 behind a CDN — 206 Partial
Content, CORS, no token, no redirect. The same URLs feed all three stations.
Graph
Triples
File
Licence
Source
crossref
The complete Crossref March 2026 citation graph: 179.5M registered works and 2.0B cites edges — the largest single .rete published.
They share canonical IRIs — a work is https://doi.org/…, a
person is https://orcid.org/… — so Crossref and Zenodo join on
DOIs and ORCIDs without any owl:sameAs reconciliation.
What it costs
Measured on 2026-07-24 against the public files, over a residential link,
end to end — process start and TLS included. Reproducible with the shipped
rete card-url, sparql-url, why-url
and cost commands.
Interaction on zenodo-records.rete
Requests
Bytes read
% of file
Index read
Time
Dataset card
3
49,452
0.002%
no
0.7 s
Predicate histogram, exact
3
49,452
0.002%
no
0.7 s
Selective pattern, 19 triples
41
7,602,176
0.36%
partial
5.7 s
Join: version chain → title
30
17,825,792
0.85%
partial
4.3 s
Join: ORCID author → works
50
18,743,296
0.89%
partial
7.3 s
Join: cited-by, empty result
24
4,980,736
0.24%
partial
3.4 s
The card's 36 per-predicate counts sum to exactly 215,396,999 — the
histogram is exact, not sampled. And the entry cost barely grows with the
graph: the same three requests return 2.6–2.8 KB on the 17.5 GB ORCID and
35.9 GB OpenCitations files.
Where the model stops paying off. Bounded, kilobyte-scale access is
guaranteed for summary-safe questions and typical for selectively routed
ones. An unselective aggregate over a whole graph must read the index and
will move a large fraction of the file — the demonstration lets you
trigger that too, and watch it happen.
Snapshots are also immutable: updates mean a rebuild. This is a
publication format, not a transactional one.
One engine, many clients
The core is a single Rust library compiled natively and to WebAssembly.
These wrap it. They differ in language and runtime but not in what they do:
each opens a local .rete or a remote URL through the same range
interface, and none of them needs a server.
…or in Pyodide — JupyterLite, marimo, any browser kernel:
%pip install rete-graph
CPython ≥ 3.9 everywhere. In Pyodide the same package resolves a
PyEmscripten wheel straight from PyPI and runs in the page — no
kernel, no server. That is exactly what station (b) above is doing.
Download the add-on zip, then in Blender:
Edit → Preferences → Add-ons → Install… and pick
rete-*.zip. Enable it and the panel appears in the 3D view's
sidebar.
Blender ≥ 4.2, engine bundled. SPARQL results become 3D scenes.
Registries where they exist, source where they do not — the Rust crate, the
Java modules and the R package are built from the repository until their
first release. The full matrix, with API docs for each, is on the
project site.
The paper
.rete: Browser-Native SPARQL over Static, Range-Addressable RDF Files.
ISWC 2026 Posters & Demonstrations Track, Bari, Italy, 25–29 October 2026.
This site is a frozen snapshot built for the demonstration: three
graphs, one console, one notebook, one extension. The live project — 80+
published graphs, the CLI, and clients for JavaScript, Python, R, Java and
Blender — continues at
caviri.github.io/rete.