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.

F# source module

Owns request/correlation state and originates the transition.

limen.proof.source
ModuleFederation

Checks lifecycle, dependency, source identity and contract compatibility. It knows no payload meaning.

src/federation.ts
F# target module

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.

Federation exchange
Waiting for modules…

Independent state

Each module snapshots only what it owns.

No shared mutable state and no universal shared-domain assembly.

Source and target snapshots
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.

  1. 01
    Two distinct .NET WebAssembly runtime IDs are required.
  2. 02
    Both runtime-exported manifests must exactly match the manifests registered with Limen.
  3. 03
    A versioned request crosses to the target and a versioned result crosses back.
  4. 04
    Stale expected-state evidence is rejected by F# tests without mutating target state.