Documentation
One source, several doors.
The documentation lives in the repository, beside the code it describes, so that a change to one fails the build when it contradicts the other. This page is an index into it — not a second copy of it.
Links resolve to main on GitHub. Markdown links, prose file paths, and
every example are checked automatically on each run; a document that drifts
out of the index is reported as orphaned.
Start here
First hour.
In order. The first four answer almost everything.
—
Quick start
Five minutes to something working. Three files, nothing elided, no invented API.
—
Mental model
Who owns state, the DOM, routing and decisions — with the enforcement named for each claim.
—
Where does code go?
A placement table, a decision tree, wrong-and-right pairs, and the ambiguous cases answered.
—
Three traces
A copy, a Back press and a fetch, followed through every file they touch.
00
README
What Limen is, why it exists, and the smallest complete example.
01
Architecture
What runs where, who owns what, and which rules are actually enforced.
02
Getting started
Empty directory to working interaction, with every command verified.
03
Lifecycle
Page load through interaction, step by step, with the error boundary.
Core concepts
The model itself.
04
State model
Where state lives, how to shape it, and what happens on an illegal transition.
05
Events and dispatch
How a click becomes a state change, every step of the way.
06
Rendering
How state reaches the screen — and why this is not a UI framework.
07
Effects and interop
All four capabilities in full, and what each outcome means.
—
Routing
Typed routes, Back and Forward, deep links, base paths, and static hosting.
—
Clipboard
Copying text, and the browser rules you cannot engineer around.
08
Multi-screen
Screens without URLs, and when a screen has earned one.
09
Testing and debugging
Three testing levels, the two timing regimes, and how to trace a round trip.
Reference and rules
When you need the exact answer.
11
API reference
Every public signature, with stability tiers and compatibility notes.
12
Design rules
MUST, SHOULD and MAY — each labelled with how it is enforced.
13
Anti-patterns
Eighteen ways to get it wrong, each with a wrong and a right version.
15
Recipes
One task at a time, with every layer that changes listed.
16
Troubleshooting
Symptom, cause, fix — starting with the one that makes failures visible.
—
Glossary
Canonical terms, discouraged aliases, and concepts deliberately absent.
Examples
Eight applications, each verified on every run.
Driven by the real kernel against their own real markup, so none can rot.
| Example | Introduces |
|---|---|
| 01 counter | The whole mechanism in about seventy lines, and projecting a capability |
| 02 form | Validation as pure functions, conditional messages, a rejected illegal transition |
| 03 fetch-data | The first effect, list rendering, all four outcomes, a stale-result guard |
| 04 save-data | A full save lifecycle, a storage effect, and why a timed-out write is not retried |
| 05 multi-screen | Screens as state, shared versus screen-local lifetimes, engine-side filtering |
| 06 time-entries | A realistic feature assembled only from the above |
| 07 clipboard | Copying text; three failure reasons, only one of them worth a retry |
| 08 routing | Typed routes, deep links, Back and Forward, and the push-on-popstate trap |
| minimal | The copy shipped inside the npm package — four files, no build step |
| kitchen sink | Every primitive and every outcome on one page, with live diagnostics |
Project status
What is built, and what is not.
Including the parts that are deliberately absent.
Roadmap
Every bridge responsibility against what is actually implemented and tested — and why several are deferred on purpose.
Documentation audit
Findings, ambiguities, defects found and fixed, and the questions left open rather than guessed at.
WebAssembly
How this site’s F# reference engine crosses the real WASM boundary, what the package ships, and what remains unmeasured.
Naming and compatibility
What “Limen” renamed, what it deliberately did not, and why nothing broke.
Architecture direction
The language-neutral contract and its guardrails.
Accepted specifications. Their implementation is in progress.
#15
Capability parity specification
Parity as capability reach rather than framework accumulation, the small-Core rule, the language-neutral WASM invariant, and the placement vocabulary.
#51
Guardrail specification
Generated-contract integrity, the fingerprint handshake, dependency direction, restricted TypeScript, guest compiler enforcement, and non-weakenable checks.
Site
Why Limen
The argument in plain terms, with every claim marked as implemented, accepted, or unmeasured.
The canonical repository documents for the neutral contract, multi-language
conformance, and guest-language guidance will be written with the
implementation work these specifications describe. Until they are on
main, the specifications above are the authority, and
WebAssembly status
describes what exists today.
Install
The package.
npm install @echelon-foundry/limen
On npm: @echelon-foundry/limen. Source: GitHub. Changes by version: CHANGELOG.
The package carries its own documentation: the quick start, the mental
model, the where-does-code-go guide, the API reference, troubleshooting and
the glossary all ship in the tarball, alongside a complete four-file
example in examples/minimal/. Those copies describe the version
you installed; the links on this page describe main, which may be
ahead. The tarball’s contents are checked against an expected manifest on
every run, and a clean-room job installs it into an empty project and builds
the minimal example from it.
The published name is unchanged. Limen is the product name; no exported symbol, file path, or protocol type was renamed, so there is nothing to migrate — no deprecation, no alias, no codemod.
Requires Node 22 or newer to build and test, TypeScript 5.9 or newer for the
types, and a browser with ES2022 modules, fetch and AbortController.
It has no runtime dependencies. Versioning is semver and currently
0.x, so the protocol may still change in a minor release.