Federation · real-browser existence proof
Two F# WebAssembly modules. Two state owners. One typed exchange.
This page loads two independently published .NET WebAssembly runtimes. Limen starts them in dependency order, validates their manifests, routes one versioned transition request to the owning module, routes the typed result back, then snapshots both modules independently.
Live proof
Starting the federation proof…
Loading independent runtimes.
Owns request/correlation state and originates the transition.
limen.proof.source
Checks lifecycle, dependency, source identity and contract compatibility. It knows no payload meaning.
src/federation.ts
Decodes the request into its own typed contract before changing its authoritative state.
limen.proof.target
Wire transcript
The coordinator carries envelopes, not shared objects.
Request and response are emitted by F#; TypeScript only routes and displays them.
Waiting for modules…
Independent state
Each module snapshots only what it owns.
No shared mutable state and no universal shared-domain assembly.
Waiting for snapshots…
The source module depends on the target for this proof, so startAll()
must activate the target first. The target accepts only the request contract.
The source accepts only the result contract. Both F# modules independently
decode JSON into local typed records before any value becomes authoritative state.
What this establishes
Federation is now demonstrated across real F# WebAssembly runtimes.
This is an existence proof, not a performance claim. This website’s own application remains one F# engine; this sibling proof demonstrates that independently loaded F# WASM state systems can compose without weakening the Limen boundary.
- 01Two distinct .NET WebAssembly runtime IDs are required.
- 02Both runtime-exported manifests must exactly match the manifests registered with Limen.
- 03A versioned request crosses to the target and a versioned result crosses back.
- 04Stale expected-state evidence is rejected by F# tests without mutating target state.