From Ted Nelson's 1963 vision, through Udanax Gold's C++ implementation, to a modern Rust engine with optimized transclusion queries.
Content is never copied — only referenced in place. When your paragraph appears in 10,000 documents, all 10,000 point to the same bytes. Updates propagate. Attribution is automatic.
When a reader accesses a document transcluding 5 authors, fractions of a cent flow to each. The cost() method tracks bytes, sharing, and ownership at element granularity.
Every link goes both ways. You always know what links to your document. No more broken links. No more 404s. Every connection is tracked by the system.
The original specification required: no deletion (only new versions), visible connections between documents, automatic copyright tracking, no-typewriter model (non-sequential writing), and content-addressed storage. The Web implemented approximately zero of these.
RangeElements. Content-addressed via BLAKE3. 9 element types: Text, Data, Blob, Edition (nested), Label, PlaceHolder, IDHolder, Work, Overlay.| Operation | Naive (C++ parity) | Xudanu (optimized) | How |
|---|---|---|---|
| Find works containing text | O(W × L) | O(U × A) | Fingerprint HashMap intersection, no full scan |
| Find shared regions (diff) | O(n × m) | O(La + Lb) | Fingerprint seed discovery + greedy claiming |
| Edition element listing | O(n log n) every call | O(1) after first | OnceLock cache shared via Arc on clone |
| Transclusion index lookup | O(n) flat scan | O(log n) | H-tree canopy-filtered traversal |
| Position transform (shift) | O(n) rewrite | O(1) | Lazy Dsp node wraps tree without traversal |
| Region highlighting | O(r × t) | O(r + t) | Sorted regions, single pass |
BLAKE3 content fingerprints give us inverted indexes (fingerprint → works), intersection (shared content), and pruning (canopy flags) — all from the same hash. The O-tree's content-addressing IS the optimization.
Text, Data, Blob, Edition (nested), Label, PlaceHolder, IDHolder, Work, Overlay
A single Edition can mix all types. Tables = Edition of Editions. Spreadsheets = Edition of Data. Templates = Edition of PlaceHolders.
combine() merge · replace() override · copy() subset · transformedBy() reposition
Plus set algebra: union, intersect, minus, complement. All immutable. All work on any element type.
BLAKE3 fingerprints work on any RangeElement variant, not just Text. Canopy flags just allocate more bits for new types.
Dsp compose() handles multi-dimensional structures (CrossDsp) — same O(1) lazy transform.
Already ported: The entire compositional algebra is in the Rust crate — FeText, FeSet, XnRegion, Mapping, SharedMapping, Loaf (Leaf/Split/Dsp), OrglRoot, Bundle retrieval, Path navigation. The gap is UI + server protocol, not engine capability.
The accounting is per-element, not per-document. When Alice's paragraph appears in 10,000 documents via transclusion, the system knows she owns those bytes in all 10,000 contexts.
Millisatoshi precision, instant settlement, streaming "pay as you read". Rust-native library. Free to develop on testnet. The most Xanadu-aligned payment rail.
Create two documents with shared text. Click Compare. See shared regions (amber), left-only (blue), right-only (orange). Bridge curves connect transcluded content across panes.
Edit either pane while seeing highlights update live. Shared region positions shift as you type. The existing fingerprint-based regions are re-applied to the changing text in real time.
Save either pane independently. Atomic work_save_and_release prevents races. The BackfollowEngine updates transclusion indexes. Subsequent compares reflect the changes.
no_std compatible. Run Xanadu in the browser.