rete ISWC 2026 · demonstration snapshot

ISWC 2026 · Posters & Demos · Bari, Italy

.rete — serverless SPARQL over
range-addressable RDF snapshots

Publishing an RDF graph for interactive use normally means running a SPARQL endpoint or shipping the whole dataset to whoever asks. This demonstration takes 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. Put that file on ordinary static hosting and a browser can query it in place — reading only the bytes the query touches.

Three graphs are published here, up to 60 GB and 3.8 billion triples. Nothing behind them is a server. Every station below shows you the answer and what the answer physically cost.

0 servers 3 graphs 4.0 B triples 62 GB published 49 KB to open the 2.09 GB one

How one file answers a query

A .rete file opens with a 1 KB header holding a typed section directory — the offset and length of everything else. Nothing later in the file is ever found by scanning, so every read is a bounded HTTP Range request.

Anatomy of a .rete file: a browser reads the dataset card in three requests, or routes a selective query into one index permutation. Browser · WebAssembly engine static hosting · no server Header · section directory Dataset card · 47 KB Dictionary · 395 MB SPO · POS · OSP · SOP · PSO · OPS tiled permutation indexes · 1.70 GB Schema pyramid · 371 KB cold start 3 requests · 49 KB index never read selective query 41 requests · 7.6 MB one permutation, tiled zenodo-records.rete · 2.09 GB · 215,396,999 triples · CC-BY-4.0

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.

GraphTriplesFile LicenceSource
crossref The complete Crossref March 2026 citation graph: 179.5M registered works and 2.0B cites edges — the largest single .rete published. 3,777,727,30360.2 GB CC BY 4.0 Public Data File
zenodo-records Every published Zenodo record (7.76M) as a DataCite scholarly graph, with ORCID creators and version chains. 215,396,9992.09 GB CC-BY-4.0 Zenodo exporter
open-pulse The EPFL/SDSC research-software graph — repositories, people, labs and their ROR institutions. A third-party graph, not ours. 3,697,82949 MB GitHub metadata · ontology © SDSC-ORDES Open Pulse

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.

Three ways to ask

Because the file is the interface, anything that can issue an HTTP range request can query it. None of these three has a server behind it.

The rete SPARQL console showing a Crossref query and its run strip: 100 rows, 162 range requests, 96 MB of 57 GB fetched.

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.

A JupyterLite notebook running the rete-graph Python client on a Pyodide kernel.

bIn a notebook

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.

An assistant's tool trace showing four Run SPARQL calls against a remote .rete file.

cFrom an agent

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.

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 RequestsBytes read % of fileIndex readTime
Dataset card349,4520.002%no0.7 s
Predicate histogram, exact349,4520.002%no0.7 s
Selective pattern, 19 triples417,602,1760.36%partial5.7 s
Join: version chain → title3017,825,7920.85%partial4.3 s
Join: ORCID author → works5018,743,2960.89%partial7.3 s
Join: cited-by, empty result244,980,7360.24%partial3.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.

The paper

.rete: Serverless SPARQL over Range-Addressable RDF Snapshots. ISWC 2026 Posters & Demonstrations Track, Bari, Italy, 25–29 October 2026.

Read the paper (PDF) Source code (Apache-2.0) Full project site

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.