A program is an Interaction tree over Refs. Refs name locations in the world; Interactions describe what to do with them - read, write, compute, branch, iterate, compose. The tree runs against a Context that binds each Ref to a Fabric (kv, filesystem, http, browser, ...) and executes there.
program
├─ Parallel # Flow · strategy
│ ├─ ForeverDo # Flow · control
│ │ └─ Sequential # Flow · strategy
│ │ ├─ Increment(Counter.val) # Command → Ref(WRITE)
│ │ └─ Delay(1.0) # Query
│ └─ ReactForever # Flow · control
│ ├─ Counter.val.on_change # StreamQuery
│ └─ Set(Dashboard.count, Counter.val) # Command → Ref(WRITE)
└─ context
├─ Counter.val → kv fabric
└─ Dashboard.count → ui fabric
The spec is language-agnostic — no host-language syntax appears in it. Nu is one implementation, in Python. Others can bind the same tree to any language.
- 00-abstract/ - high-level intro: motivation, two citizens, context.
- 01-foundations/ - core distinctions: atom vs composition, mutation, cardinality, kinds.
- 02-atoms/ - the kinds made concrete: Ref, Query, Command, Action, Flow, Span, Form.
- 03-fabric/ - the Fabric layer: address spaces, Context, resolution protocol.
- 04-domains/ - optional addons on top of the core. Each is a self-contained DSL + Ref blueprints.
- 05-meta/ - operations on trees themselves: transformations, equivalence.