Recipes
The recipe model
A FieldRecipe is a portable, serializable field program — the reusable unit that
connects the natural-field model, engine primitives, DOM authoring, platform feedback, diagnostics,
and the accessibility fallback. The catalog ships
64 recipes across 4 tiers
(8 first-release), composed from 23 distinct runtime
tokens. See them all in the recipe gallery.
primitives: ["morph", "memory"]. The conformance gate rejects any recipe whose
primitives are not real passported tokens — or that puts a diagnostic, metric, condition, or concept
in the token lane.
The vocabulary lanes
A recipe separates these on purpose. A word lives in exactly one lane, and the lane says which:
- Natural field
- conceptual translation — gravity, electromagnetic, strong, weak
- Runtime token
- a real passported engine force (attract, gravity, fieldflow…) — strict, conformance-gated
- Concept
- human-facing product language (orbit, spring, trust, staleness) — not a token
- Metric
- measured / semantic state (mass, attention, pressure, confidence)
- Diagnostic
- inspection or render mode (potential, topology, causality, field-lines)
- Condition
- activation logic (dwell, threshold, stale, in-view, focused)
- Scheduler phase
- runtime step — discover → read → compute → state → write → render
- Compatibility alias
- older naming (--d, --mass) — kept, but not the primary path
The schema
type FieldRecipe = {
id: string;
name: string;
intent: string;
tier: "core" | "applied" | "systems" | "operational";
naturalField?: "gravity" | "electromagnetic" | "strong" | "weak"; // FIELD lane (conceptual)
translation?: string; // a short natural-field phrase
// ── the lanes — a word lives in exactly one ───────────────────────────
primitives: ForceToken[]; // RUNTIME TOKEN — strict, passported, conformance-gated
concepts?: string[]; // CONCEPT — orbit, spring, trust, staleness
metrics: string[]; // METRIC — mass, attention, pressure, confidence
diagnostics:string[]; // DIAGNOSTIC — potential, topology, causality
conditions?:string[]; // CONDITION — dwell, threshold, stale, in-view
bodies: BodyRecipe[]; // how the runtime tokens are authored on elements
render: RenderLayer[];
accessibility: { // required — no recipe is motion-only
reducedMotion: string;
meaningWithoutMotion: string;
};
status: "shipped" | "experimental" | "planned" | "conceptual";
}; Concept → token mapping
When a product word is not a real engine token, it goes to its proper lane — it is never invented as a force. No new force tokens are added for recipes.
| Concept word | Lane | Resolution |
|---|---|---|
| mass | metric | a measured property — use gravity / attract as the token |
| potential | diagnostic | a field-sampling overlay — never a token |
| spring | concept | runtime token: tether |
| drag | concept | runtime token: viscosity |
| reflect | concept | runtime token: wall |
| absorb | concept | runtime token: sink |
| threshold | condition | runtime token: gate (if a gate is intended) |
| orbit | concept | composed from gravity + magnetism + tether |
| emitter | concept | runtime token: spawn |
| phase / decay | concept | runtime token: morph / memory |
| trust / risk / confidence | metric | measured state — never a token |
A worked recipe
Every recipe is plain, serializable data. This is Guided Flow straight from the
catalog — note the strict primitives beside the expressive notes:
{
"id": "guided-flow",
"name": "Guided Flow",
"intent": "move particles or attention along field lines, relationships, or paths",
"naturalField": "electromagnetic",
"primitives": [
"magnetism",
"fieldflow",
"stream",
"propagate"
],
"bodies": [
{
"body": "magnetism",
"strength": 1,
"range": 420,
"spin": 1
},
{
"body": "fieldflow",
"strength": 0.8,
"range": 0
},
{
"body": "stream",
"strength": 0.6,
"range": 320,
"angle": 0
},
{
"body": "propagate",
"strength": 0.5,
"range": 300
}
],
"render": [
"streamlines",
"field-lines",
"trails",
"particles"
],
"metrics": [
"flow",
"velocity",
"density"
],
"diagnostics": [
"field-lines",
"force-vectors",
"prediction"
],
"accessibility": {
"reducedMotion": "a static path contour with a numbered route and direction markers",
"meaningWithoutMotion": "the route is an ordered list of steps with direction labels"
},
"notes": "Matter and attention move along field lines / relationship paths (electromagnetic + transport). Magnetism bends, fieldflow carries — the recipe-level expression of field.flowTo() and fieldflow.",
"tier": "core",
"status": "shipped"
} What the conformance gate enforces
- Every runtime token is a real, passported engine force.
- No token is a diagnostic , metric , condition , or concept .
- Declared
primitivesexactly match the body tokens (no drift). - Every diagnostic is a real render / inspection mode.
- Every natural field is one of gravity / electromagnetic / strong / weak.
- Every recipe declares a reduced-motion equivalent — no recipe is motion-only.
Data binding — bindData()
Recipes make behavior portable; bindData() makes real records participate in it.
Records become bodies, mapped metrics become state, mapped relationships become edges, and a
recipe supplies the behavior. Updates are deterministic and removed records decay rather than pop.