The interface as a value
Last reviewed: July 2026.
In most stacks, an application's interface is behaviour – code that runs. In Fuaran it is a value: a typed tree with one canonical byte encoding, edited by typed operations. Values have properties running code does not, and each of them falls out of the same design decision rather than being a separate feature:
- History is a recording, not an undo stack. Every edit is a tree operation in an append-only op stream. Scrub back through an interface's life step by step and each frame is the exact recorded state – replayed through the same apply engine that built it, not re-derived.
- Provenance is checkable. Op streams are hash-chained over canonical bytes: each operation links to its predecessor's hash, so "who changed what, in what order" is verifiable, and a corrupted or casually altered history breaks the chain rather than lying quietly. The chain is an unkeyed digest, which makes it corruption detection and not tamper evidence: an attacker who can write the store can recompute every digest after the entry they changed. Proving authenticity against that needs signing, a separate seam that is not shipped. Replay-verification is cheap enough to run in the browser: refold the ops from the base tree and check both the resulting tree and the chain.
- Forks and merges are structural, not textual. Because branches are op streams over the same typed tree, two divergent edits can be merged with a real three-way structural merge – conflicts surface as typed conflicts on nodes, not line-collision noise. "Git for interfaces" is a literal description, not a metaphor.
- Portability is a transport detail. A value that serialises to ~2KB of canonical JSON travels in a URL fragment, a QR code, or a peer-to-peer data channel – and the receiver has the whole artefact, not a session pointer into someone's server. (See Teleport without a server.)
- A corpus of apps is a queryable dataset. Same-shaped artefacts can be searched structurally – "every dashboard with a currency metric bound to a static value" is a query, and the results are the running apps themselves.
None of this requires trusting an implementation, because the properties are anchored in the bytes (see Canonical bytes) and every operation on them is specified and conformance-tested. You can exercise all of it – time-travel, fork-and-merge, chain-verification, teleport – in the live demo gallery at fuaran-ui.live, no account, no key.
The contrast worth naming: streaming-UI protocols treat emitted UI as ephemeral instruction – render it, mutate it, discard it. That is fine until the interface is the record of a decision, a regulated workflow, an audit surface, or simply something a user made and wants to keep. Then the question becomes "can you prove what this was, and replay how it got here?" – and that is a question only a value can answer.