Xudanu User Guide

A connected literature where every quotation maintains its bond to the original, where every reuse carries its full provenance.

The Vision: From Xanadu to Xudanu Getting Started Works & Editions Identity & Permissions Document Editing Styled Text (Bold & Italic) Attribution & Provenance Collaborative Editing Links & Backlinks The Five Link Types Creating Links Managing Links Connection Pins Annotations Private Annotations Transclusion Compound Documents Pull from Document Visual Markers Placement Tracking Trails Stars & Library Document Map Cross-Server Links Persistence & Safety Keyboard Shortcuts CLI Reference

The Vision: From Xanadu to Xudanu

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:

O-tree CRDT

Replaces Gold's Ent with a position-based CRDT using space algebra — purpose-built for Xudanu's content model

Inline Transclusions

Gold stored transclusions in a side-table that could drift. Xudanu puts them directly in the O-tree — single source of truth

BLAKE3 + Ed25519

Modern crypto: content fingerprinting, signed attribution, tamper-evident audit logs

Real-time Web

Collaborative editing in the browser via WebSocket — Gold was single-user terminal/Motif

1960 Nelson's vision 1988-92 Udanax Green/Gold 1999 Open sourced inherits XUDANU v1.0.0 O-tree CRDT + inline transclusions BLAKE3 + Ed25519 attribution Real-time collaborative editing Cross-server links + compound docs

Xudanu inherits the Xanalogical model and reimplements it with modern architecture.

Getting Started

1 Start the server
./xudanu-server run 127.0.0.1:8080 data --static-dir ./dist

Open http://127.0.0.1:8080 in your browser.

2 Create an identity

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.

3 Create your first document

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.

4 Enable write mode

Click the Read/Write toggle in the top bar. Write mode lets you edit, create links, add annotations, and build compound documents.

Works & Editions

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.

Work

A document — has a title, owner, read/edit permissions, and a current edition

Edition

A versioned snapshot — contains the text, attribution spans, and revision history

Source Work

An imported read-only work (e.g., a book chapter, legal statute, or reference document)

Revision

Each edit creates a revision. Browse history via the revision panel.

Identity & Permissions

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:

StateWho can readWho can edit
PrivateOwner onlyOwner only
Published (Edit: Owner)EveryoneOwner only
Published (Edit: Open)EveryoneAnyone logged in

Document Editing

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.

Styled Text (Bold & Italic)

Select text and use the toolbar buttons or keyboard shortcuts:

KeyAction
Ctrl + BBold
Ctrl + IItalic
B / I buttonsClick after selecting text

Styles persist across sessions — they're stored as server-side annotations and survive page reloads.

Attribution & Provenance

Click Show Prov in the document toolbar to see who wrote each section. Attribution spans are colour-coded:

Green — Human

Text typed directly by a logged-in user

Purple — LLM

Text generated by AI assistant

Amber — Historical

Text from imported source documents

Red dashed — Unsigned

Text without valid cryptographic signature

Provenance Chain

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.

Collaborative Editing

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.

Live cursors

See where other users are typing

Presence pill

"2 others here" in the document toolbar

Links are typed, bidirectional, unbreakable connections between passages. Unlike web links (one-way, one-type), Xudanu links:

Comment Annotate a passage Reference Citation, "see this" Disagreement Contested claim Quotation "This quotes..." See Also Related reading
1 Select text and click Link

Highlight a passage in your document. Click the Link button (top-right of document area).

2 Choose a target

The Link Creator wizard offers four options:

  • Link to an entire document — pick from your library, no navigation needed
  • Link to specific text in another document — navigate and select a passage
  • Link to another part of this document — same-document cross-reference
  • Link to a remote server — connect to content on another Xudanu server
3 Pick a type and create

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.

Delete from the document: You can also delete a link without opening the Connections panel. Hover over the link's margin bar in the document and the tooltip that appears includes a red × Delete link button. This works for any typed link, even without a description.

Connection Pins

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.

Backlinks: Who Links Into You

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.

Related footer: A collapsible Related bar at the bottom of the document provides another way to discover connections. It lists backlinks, outgoing links, transclusion sources, and cross-server references. Each item shows a reason label (e.g., "Referenced by", "Includes content from"), the connected document's title, and a text excerpt.

Annotations

Annotations are comments attached to specific text ranges. Unlike links (which connect two passages), annotations are notes on a single passage.

Creating Annotations

  1. Select text in the editor
  2. Press Ctrl + Alt + A
  3. A dialog opens with a text area and a "Private" checkbox
  4. Type your note and click Annotate

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.

Private Annotations

Check the "Private" checkbox to create an annotation that only you can see. Private annotations are:

Use case: A reviewer wants to note "this claim needs a citation" without the document owner seeing the note. Private annotations let multiple reviewers annotate independently.

Transclusion

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.

SOURCE WORK "privacy is a human right" transclusion DESTINATION WORK As stated, "privacy is a human right" and this must be protected.

A transclusion places source text inline in the destination, with provenance tracking back to the source.

Creating a Transclusion

  1. Open the source document, select text
  2. Click Transclude (amber button)
  3. Navigate to the destination document
  4. Click Place at cursor on the floating badge

Compound Documents

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.

The Legal Brief Example

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.

Building with the Compound Builder

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:

  1. Click "+ Add source" in the left panel to add source documents
  2. Click a source to read its text in the lower-left panel
  3. Select a passage (click and drag) — an "Include passage" button appears
  4. Click "Include passage" — the text is transcluded into your document
  5. Type your own original text between transcluded passages
  6. The structure outline (right panel) shows [Original] vs [From: Source] composition
  7. Click "Done" when finished — your compound is saved

Quick Alternative: Transclude Button

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.

Visual Markers

Each transclusion region is colour-coded by source work (8-colour palette):

ElementDescription
Coloured backgroundEach source gets a distinct tint (teal, indigo, orange, etc.)
Dashed borderOutlines the transclusion region
Left margin barColoured bar in the source's colour
Hover tooltipShows source title, excerpt, "Go to source" button
Compound badge"N sources" in the document toolbar
Toggle buttonShow/hide compound highlighting

Placement Tracking

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

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).

Creating a trail

  1. Open the trails panel (left rail icon)
  2. Type a name and click Create
  3. Open a document, then click + on the trail to add it as a stop

Managing stops

Stars & Library

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.

Document Map

The Document Map is a force-directed graph showing all readable documents and their relationships. Open it from the left rail.

Cross-Server Links

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.

Security: Cross-server content is verified against a cryptographic hash. If the remote content has been tampered with, the resolution fails with a tamper warning.

Persistence & Safety

All data is protected by three layers:

  1. WAL (Write-Ahead Log) — every operation is appended to wal.log before it completes. On restart, the WAL replays to recover operations after the last checkpoint.
  2. Content-addressed chunk store — works, links, annotations, pins, trails, and compound editions are stored as BLAKE3-addressed chunks. Each chunk is independently verifiable.
  3. Atomic checkpoints — the manifest is written via tmp+rename for crash safety. Auto-checkpoint runs periodically.
Links survive edits: When text is inserted or deleted, link spans migrate automatically via migrate_link_spans_for_delta(). Links stay pointing at the right passage.

Keyboard Shortcuts

KeyAction
Ctrl + BBold (toggle)
Ctrl + IItalic (toggle)
Ctrl + Alt + ACreate annotation
Ctrl + KOpen search
EscCancel pending link/transclusion/annotation
Click markerNavigate to linked document
Double-click markerJump to linked document and show connections
Hover markerShow tooltip with target, type, excerpt

CLI Reference

./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

Options for 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