Knowledge constellation show the query
Start with the vision. Follow a decision to the code it governs.
Drag to explore · pinch to zoom · tap a star or cluster
Type distribution show the query
Browse modules & documents show the query
SPARQL — against the copy in this tab
Edit the facts show the query
The store is in your tab, so this is safe and it is also real: each button
calls a genuine Quipu write — tool_set,
tool_retract — the same functions the REST API exposes. The
closed-vocabulary gate applies, which is worth seeing rather than working around: what
you may add is bounded by the shapes the sender shipped with the pack.
Take it with you
Your edited store exports as a real share, built by the same
share_payload the CLI and the REST endpoint use, and declaring
the pack it came from as its parent — so the lineage survives the round trip.
quipu import will take it back — extract it first and import
the directory, because quipu import <archive>
verifies into a throwaway in-memory store and ignores --db.
Propose these edits as a pull request
No API and no token. The page turns your edits into a
share-delta/v1 delta share — byte-for-byte the same
four files quipu pack --since writes and
quipu import applies — and hands them to
GitHub’s own upload page. Nothing is sent anywhere by this page.
You review the change here, then GitHub opens the PR when you click its button.
All four files must land in the same directory: quipu verifies the manifest, the
update against its hash, and the shapes as one artifact.
Drive this page from an agent
This page is the server. window.quipu exposes the
same verbs as a quipu HTTP server and returns the same JSON, because
the page and the server call the same functions — the
inference marker and the labels
key travel unchanged, so client code written against the HTTP API runs here as-is.
Same-origin, no CORS, no port, no credential: an agent that wants this store loads
the page.
browser_navigate https://scbrown.github.io/quipu/explore/
browser_evaluate await window.quipu.query("SELECT ?s WHERE { ?s ?p ?o } LIMIT 5")
browser_evaluate await window.quipu.set("urn:x", "rdfs:comment", JSON.stringify("hi"))
browser_evaluate await window.quipu.delta()
# or as HTTP, against this page's own path — no server anywhere:
browser_evaluate await (await fetch("./query", {method:"POST",
body: JSON.stringify({query:"SELECT ?s WHERE { ?s ?p ?o } LIMIT 5"})})).json()
The fetch routes are relative to this page —
./query, not /query. A service
worker only controls the directory it is served from, and widening that needs a
response header GitHub Pages does not allow anyone to set. An absolute
/query gets an ordinary 404, which reads as “the
worker is broken” rather than “that path was never mine”.
Server status: registering…
search is unavailable here and says so.
Semantic search needs embeddings, which need quipu’s onnx
feature; this bundle is built without it. window.quipu.search()
rejects with a typed error naming the missing feature — it never resolves
to an empty list, because an empty list is indistinguishable from “nothing
matched”.
Load a different pack
Any Quipu share works here, not just this one — that is the point of a portable pack.
Point it at a URL, or open a .qpack.tar.gz from your disk.
GitHub release assets will not load from a URL: GitHub serves them with
no Access-Control-Allow-Origin header, so the browser refuses
them — which is exactly why this site stages its own copy at build time.