A connected literature where every quotation maintains its bond to the original, where every reuse carries its full provenance.
In 1960, a Harvard student named Ted Nelson envisioned a system where documents could be connected, content could be reused without copying, and every quotation would maintain its bond to the original. He called this vision Xanadu.
Over the next four decades, Nelson and his collaborators built increasingly sophisticated implementations: zippered lists (1965), enfilades (1978), Udanax Green (1988), and Udanax Gold (1992). Gold introduced transclusions that preserved provenance, tumblers for global addressing, and the Ent — a data structure for managing complex versioning. But Gold never shipped as a product. The enfilade was a trade secret until 1999. The demos were few and fragmentary.
Xudanu picks up where Gold left off, with a modern architecture:
Replaces Gold's Ent with a position-based CRDT using space algebra — purpose-built for Xudanu's content model
Gold stored transclusions in a side-table that could drift. Xudanu puts them directly in the O-tree — single source of truth
Modern crypto: content fingerprinting, signed attribution, tamper-evident audit logs
Collaborative editing in the browser via WebSocket — Gold was single-user terminal/Motif
Xudanu inherits the Xanalogical model and reimplements it with modern architecture.
./xudanu-server run 127.0.0.1:8080 data --static-dir ./dist
Open http://127.0.0.1:8080 in your browser.
Click the identity icon (person silhouette) in the left rail. Enter a display name. Your identity is a personal club — it owns your documents and edits.
Click + New in the library. Type some text. All edits are saved automatically — there is no Save button. Every keystroke is recorded with cryptographic attribution.
Click the Read/Write toggle in the top bar. Write mode lets you edit, create links, add annotations, and build compound documents.
Every document in Xudanu is a Work. A Work contains versioned Editions — each edit creates a new revision of the current edition. The edition is a complete snapshot with per-character attribution.
A document — has a title, owner, read/edit permissions, and a current edition
A versioned snapshot — contains the text, attribution spans, and revision history
An imported read-only work (e.g., a book chapter, legal statute, or reference document)
Each edit creates a revision. Browse history via the revision panel.
Xudanu uses the club system inherited from Udanax-Gold. A club is an identity entity that owns works and edits:
Each work has a read club and an edit club:
| State | Who can read | Who can edit |
|---|---|---|
| Private | Owner only | Owner only |
| Published (Edit: Owner) | Everyone | Owner only |
| Published (Edit: Open) | Everyone | Anyone logged in |
The editor is a collaborative rich-text editor with real-time multi-user support. All edits are CRDT-based — no conflicts, no locks, no merge failures.
Select text and use the toolbar buttons or keyboard shortcuts:
| Key | Action |
|---|---|
| Ctrl + B | Bold |
| Ctrl + I | Italic |
| B / I buttons | Click after selecting text |
Styles persist across sessions — they're stored as server-side annotations and survive page reloads.
Click Show Prov in the document toolbar to see who wrote each section. Attribution spans are colour-coded:
Text typed directly by a logged-in user
Text generated by AI assistant
Text from imported source documents
Text without valid cryptographic signature
Every transcluded passage carries a provenance chain — a recursive trail back to the original source. The again() function follows this chain up to 32 levels deep, showing each hop's author, work, and text. For legal and corporate use, this provides court-grade attribution evidence.
Multiple users can edit the same document simultaneously. The O-tree CRDT ensures conflict-free merging — no one's edits are ever lost. You'll see other users' cursors and selections in real time via the awareness system.
See where other users are typing
"2 others here" in the document toolbar
Links are typed, bidirectional, unbreakable connections between passages. Unlike web links (one-way, one-type), Xudanu links:
Highlight a passage in your document. Click the Link button (top-right of document area).
The Link Creator wizard offers four options:
Choose a link type (Comment, Reference, etc.) and click Create Link. The linked text gets a coloured underline and margin bar.
The Connections panel (right side) shows all links, backlinks, and transclusions for the current document. Each item shows:
Use the dropdown at the top to filter by All, Pinned, Links, or Backlinks.
Pin important connections to keep them at the top of the list. Pins are per-user — only you see your pins. They persist across sessions and devices, stored server-side in the chunk store.
When document A links to document B, B automatically sees the incoming link as a backlink. Backlinks appear in the Connections panel with a green border and ← arrow. They also paint on the right margin of the editor canvas. You never create a backlink directly — they emerge from the bidirectional nature of Xudanu links.
Annotations are comments attached to specific text ranges. Unlike links (which connect two passages), annotations are notes on a single passage.
Annotations appear in the Annotations panel (left rail icon), showing the kind, text, author, timestamp, and character range. Click an annotation to navigate to its position in the document.
Check the "Private" checkbox to create an annotation that only you can see. Private annotations are:
A transclusion is content from one document that appears inline in another — not a copy, but a live reference. If the source is updated, the transclusion reflects the change.
A transclusion places source text inline in the destination, with provenance tracking back to the source.
A compound document is assembled from pieces of other documents — each piece is a transclusion. The compound is one document whose content literally comes from multiple sources, interleaved with original text.
Imagine building a legal argument assembled from a statute, case law, and a dissenting opinion. Each piece is transcluded — live content from another work, not a copy. If the statute is ever updated, the transclusion in your brief resolves to the new text. The provenance chain traces each piece back to its original author.
The Compound Builder is the primary tool for assembling documents from multiple sources. Click "Build" in the document toolbar to open a three-panel layout:
For a quick one-off inclusion without the full Builder: select text in any document, click Transclude (amber button in the floating toolbar), navigate to your target document, and place it at the cursor.
For detailed examples (single-source, multi-source, legal brief, literary anthology) and future capabilities, see the full Compound Builder Guide.
Each transclusion region is colour-coded by source work (8-colour palette):
| Element | Description |
|---|---|
| Coloured background | Each source gets a distinct tint (teal, indigo, orange, etc.) |
| Dashed border | Outlines the transclusion region |
| Left margin bar | Coloured bar in the source's colour |
| Hover tooltip | Shows source title, excerpt, "Go to source" button |
| Compound badge | "N sources" in the document toolbar |
| Toggle button | Show/hide compound highlighting |
Each transclusion records who placed it and when — stored as placed_at and placed_by on the transclusion element. The compound panel displays "club:XXXX · date" for each element. This provides full accountability for sensitive material — you can trace not just who wrote the original content, but who curated it into this document.
Trails are curated reading paths through your document corpus — directly implementing Nelson's concept of guided sequences. Each trail has a name and an ordered list of stops (documents).
Star important documents to mark them as favorites. The library sorts by most recently edited, with starred documents in a Favorites section at the top.
The Document Map is a force-directed graph showing all readable documents and their relationships. Open it from the left rail.
Xudanu servers can link to each other. A cross-server link uses a tumbler — an Xanadu-style global identifier:
"alice.example.com".5.3.10.7
This tumbler means: content on server alice.example.com, work 5, version 3, revision 10, edition 7. When the link is resolved, Xudanu fetches the content via HTTPS, verifies it against a stored BLAKE3 hash, and caches it locally.
All data is protected by three layers:
wal.log before it completes. On restart, the WAL replays to recover operations after the last checkpoint.migrate_link_spans_for_delta(). Links stay pointing at the right passage.
| Key | Action |
|---|---|
| Ctrl + B | Bold (toggle) |
| Ctrl + I | Italic (toggle) |
| Ctrl + Alt + A | Create annotation |
| Ctrl + K | Open search |
| Esc | Cancel pending link/transclusion/annotation |
| Click marker | Navigate to linked document |
| Double-click marker | Jump to linked document and show connections |
| Hover marker | Show tooltip with target, type, excerpt |
./xudanu-server init <data-dir> Initialize a new data directory
./xudanu-server run <addr> <data-dir> [options] Start the server
./xudanu-server preflight <data-dir> Validate data integrity
./xudanu-server verify <data-dir> Verify all chunks and blobs
./xudanu-server rebuild-manifest <data-dir> Rebuild manifest from chunks
run--static-dir <path> Serve built frontend from directory
--server-name <name> Display name for this server
--server-description <desc> Server description
--public-address <domain> Public domain for cross-server links
--server-namespace-id <id> Numeric server ID for tumblers
--tls-cert <path> TLS certificate path
--tls-key <path> TLS private key path
--csrf-token Enable CSRF token validation
--key-passphrase <pw> Server key passphrase
--github-client-id <id> GitHub OAuth
--google-client-id <id> Google OAuth
--enable-cluster Enable FR-3 cluster federation
--peer <addr> Federation peer address