Appearance
Architecture
Titicaca is a set of plain Nimony modules inside one Jester mod. The engine modules take text and return a tree; only the mod's entry point talks to the host, which is how the same code runs both inside Jester and under the test runner.
The pipeline
- Fetch. The mod asks the host for bytes over HTTP. It keeps its own cache and cookie jar (
webcache,webcookie). - Decode.
webencodingturns bytes into text using the character set from the response, a<meta>tag or a byte-order mark. - Parse.
webhtmlbuilds a DOM from HTML.webxmlparses and serialises XML, and pages served as XHTML take that path.weburlandwebidnaparse URLs and internationalised host names. - Style.
webcsssyntaxtokenises CSS.webselectorparses, matches and serialises selectors.webcssruns the cascade and computes styles. - Script. Two engines are available, selected per build: the original
jslex/jsparse/jsvalue/jsregex/jsinterptree-walking engine (EngineAowl), andaowljsengine, a binding of the separate aowljs-engine project via a sidecar heap-adapter module (aowlheap.nim) that speaksjsdom's host-indexer and reflection conventions.aowljsengineis the default (EngineAowlJs); see The JavaScript engine.jsdombinds the DOM into whichever engine is active, andwebreflectsupplies the generated attribute-reflection tables. - Layout.
weblayout,webtext,webfloat,webtable,webgrid,webinnertext,webimgandwebsvgturn styled nodes into boxes. - Paint and input. The mod draws boxes through Jester's UI library and feeds pointer and keyboard events back into the DOM as real events.
Module map
| Area | Modules |
|---|---|
| Entry, chrome | main, webmenu, webform |
| Networking, storage | webcache, webcookie |
| Text and URLs | weburl, webidna, webidnadata, webencoding, webtext |
| Markup | webhtml, webxml, webmd |
| Styling | webcsssyntax, webselector, websel, webcss |
| Script | jslex, jsparse, jsvalue, jsregex, jsinterp (original engine), aowljsengine, aowlheap (new default engine's binding), jsdom, webreflect |
| Layout and media | weblayout, webfloat, webtable, webgrid, webmatrix, webinnertext, webimg, websvg |
Design rules
- Pure Nimony. The whole thing is inspectable and swappable like any mod.
- Spec-shaped modules. A test failure points at one specification and so at one file.
- Generated where the spec is a table. Attribute reflection and event handler maps are generated from WebIDL rather than typed by hand, so they stay exactly as long as the standard says.
- No lying features. An interface is exposed only when the feature behind it exists. A page that feature-detects a canvas or a worker must not be told yes by a stub.
- The runner is the referee. Anything that cannot be exercised by the test runner is treated as unproven.
Process-level parallelism
Separately from the in-mod pipeline above, a sandboxed child-process mechanism (Win32 named pipes and Job Objects) can run a real JS/DOM realm — execution plus a real timer/event-loop pump — out of process, with isolation between instances. Three concurrent isolated instances have been run at once without interference. This is not yet wired up as Titicaca's Worker implementation, but it is the planned shape for one: a Worker as a process, not an in-process thread.
Memory model
The engine runs on Nimony without a garbage collector, so memory discipline is part of the design: environments captured by a call are released when the call returns, and the test runner runs every test in its own process under a hard memory cap. See Web Platform Tests for the containment.

