Skip to content
ParaShape

Schema

The persisted-document type closure — every type reachable from ModelJson by following its own import type lines, breadth-first. A response type (Changes, RenderCell, …) never appears here unless the document closure itself reaches it. See Open surface for the fields this closure leaves unconstrained.

Index

28 types in the persisted-document closure (BFS from ModelJson, following import type lines only). 0 not tabulated (see the schema page).

typereferenced by (in this closure)
ModelJson(root)
BehaviorNodeModelJson, ObjectNode
ComponentNodeModelJson
LayerNodeModelJson
MaterialNodeModelJson
ModelSettingsModelJson
ObjectNodeModelJson
ParameterNodeModelJson
PatternNodeModelJson
ViewNodeModelJson
ArgumentBehaviorNode, ComponentNode, LayerNode, MaterialNode, ObjectNode, ParameterNode, PatternNode, PatternStepNode, PropertyNode, StepNode, ViewNode
ComponentMethodComponentNode
AddLayerMethodLayerNode
PropertyNodeLayerNode, MaterialNode, ObjectNode, PatternNode, ViewNode
AddMaterialMethodMaterialNode
EnvironmentModelSettings
UnitConfigModelSettings
ObjectMethodObjectNode
StepNodeObjectNode
ParameterMethodParameterNode
AddPatternMethodPatternNode
PatternStepNodePatternNode
ViewMethodViewNode
EnvironmentHdriEnvironment
SiteEnvironment
SunMomentEnvironment
LengthUnitUnitConfig
LineFamilyMethodPatternStepNode

Types

ModelJson

Model = meta + assets + parameters (header) + scene (body). The ONE declaration of the persisted document. Cross-field refinements (one key namespace across every lane, the material/pattern library shape) run post-deserialize in crate::validate — serde has no schema-level array-uniqueness refine.

// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { BehaviorNode } from "./BehaviorNode.js";
import type { ComponentNode } from "./ComponentNode.js";
import type { LayerNode } from "./LayerNode.js";
import type { MaterialNode } from "./MaterialNode.js";
import type { ModelSettings } from "./ModelSettings.js";
import type { ObjectNode } from "./ObjectNode.js";
import type { ParameterNode } from "./ParameterNode.js";
import type { PatternNode } from "./PatternNode.js";
import type { ViewNode } from "./ViewNode.js";

/**
 * Model = meta + assets + parameters (header) + scene (body). The ONE
 * declaration of the persisted document. Cross-field refinements (one key
 * namespace across every lane, the material/pattern library shape) run post-deserialize
 * in `crate::validate` — serde has no schema-level array-uniqueness refine.
 */
export type ModelJson = { 
/**
 * identity — the platform's PUBLISH sequence, stamped by the host.
 * 0/absent = never published. Not a JSON-format/schema version number.
 */
version?: number, 
/**
 * intent — content name printed on the artifact, verbatim text (a
 * human types it; nothing evaluates it).
 */
title: string, 
/**
 * intent — units, active view, environment; absent = every field's own default.
 */
settings?: ModelSettings, 
/**
 * intent — the materials lane.
 */
materials?: Array<MaterialNode>, 
/**
 * intent — the layers lane.
 */
layers?: Array<LayerNode>, 
/**
 * intent — the patterns lane.
 */
patterns?: Array<PatternNode>, 
/**
 * intent — Header: named value bindings.
 */
parameters?: Array<ParameterNode>, 
/**
 * intent — acts this model performs on its siblings when it is placed
 * as a component (AGENTS.md "Behaviors"); dormant in an open document —
 * the root has no siblings — active once placed via `placeComponent`.
 */
behaviors?: Array<BehaviorNode>, 
/**
 * intent — Root body: the SET of scene objects, model-wide unique keys.
 */
objects?: Array<ObjectNode>, 
/**
 * intent — Named views, per-lane unique keys.
 */
views?: Array<ViewNode>, 
/**
 * intent — the components lane: documents this one places.
 */
components?: Array<ComponentNode>, };
fieldtypeoptionalclassdoc
versionnumberyesidentityidentity — the platform's PUBLISH sequence, stamped by the host. 0/absent = never published. Not a JSON-format/schema version number.
titlestringnointentintent — content name printed on the artifact, verbatim text (a human types it; nothing evaluates it).
settingsModelSettingsyesintentintent — units, active view, environment; absent = every field's own default.
materialsArray<MaterialNode>yesintentintent — the materials lane.
layersArray<LayerNode>yesintentintent — the layers lane.
patternsArray<PatternNode>yesintentintent — the patterns lane.
parametersArray<ParameterNode>yesintentintent — Header: named value bindings.
behaviorsArray<BehaviorNode>yesintentintent — acts this model performs on its siblings when it is placed as a component (AGENTS.md "Behaviors"); dormant in an open document — the root has no siblings — active once placed via placeComponent.
objectsArray<ObjectNode>yesintentintent — Root body: the SET of scene objects, model-wide unique keys.
viewsArray<ViewNode>yesintentintent — Named views, per-lane unique keys.
componentsArray<ComponentNode>yesintentintent — the components lane: documents this one places.

BehaviorNode

One behaviors[] entry — a verb the engine performs on this object's siblings after the parent set evaluates; each method at most once, presence means enabled.

// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { Argument } from "./Argument.js";

/**
 * One `behaviors[]` entry — a verb the engine performs on this object's
 * siblings after the parent set evaluates; each method at most once,
 * presence means enabled.
 */
export type BehaviorNode = { 
/**
 * intent — the catalog `behaviors`-context method this act invokes.
 */
method: string, 
/**
 * intent — the method's arguments.
 */
args?: Array<Argument>, };
fieldtypeoptionalclassdoc
methodstringnointentintent — the catalog behaviors-context method this act invokes.
argsArray<Argument>yesintentintent — the method's arguments.

ComponentNode

A components[] entry: a keyed lane node whose value is a whole ModelJson placed by placeComponent(key). That document's own components lane is its private scope.

// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { Argument } from "./Argument.js";
import type { ComponentMethod } from "./ComponentMethod.js";

/**
 * A `components[]` entry: a keyed lane node whose value is a whole
 * `ModelJson` placed by `placeComponent(key)`. That document's own
 * `components` lane is its private scope.
 */
export type ComponentNode = { 
/**
 * identity — unique in the document's one key namespace, every lane; `placeComponent.component` names it.
 */
key: string, 
/**
 * intent — editor-chrome display name, printed verbatim.
 */
label?: string, 
/**
 * intent — `createComponent` (arg `data`) or `loadComponent` (arg `id`).
 */
method: ComponentMethod, 
/**
 * intent — `data` (the document) or `id` (a platform model id).
 */
args?: Array<Argument>, };
fieldtypeoptionalclassdoc
keystringnoidentityidentity — unique in the document's one key namespace, every lane; placeComponent.component names it.
labelstringyesintentintent — editor-chrome display name, printed verbatim.
methodComponentMethodnointentintent — createComponent (arg data) or loadComponent (arg id).
argsArray<Argument>yesintentintent — data (the document) or id (a platform model id).

LayerNode

A layers[] entry: a head with no args, identity is key, plus properties carrying attributes/visible.

// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { AddLayerMethod } from "./AddLayerMethod.js";
import type { Argument } from "./Argument.js";
import type { PropertyNode } from "./PropertyNode.js";

/**
 * A `layers[]` entry: a head with no args, identity is `key`, plus
 * `properties` carrying `attributes`/`visible`.
 */
export type LayerNode = { 
/**
 * identity — unique in the document's one key namespace, every lane.
 */
key: string, 
/**
 * intent — editor-chrome display name, printed verbatim.
 */
label?: string, 
/**
 * intent — the one closed-literal layers-lane head.
 */
method: AddLayerMethod, 
/**
 * intent — this head takes no args; kept for NODE LAW shape parity.
 */
args?: Array<Argument>, 
/**
 * intent — `attributes`/`visible`.
 */
properties?: Array<PropertyNode>, };
fieldtypeoptionalclassdoc
keystringnoidentityidentity — unique in the document's one key namespace, every lane.
labelstringyesintentintent — editor-chrome display name, printed verbatim.
methodAddLayerMethodnointentintent — the one closed-literal layers-lane head.
argsArray<Argument>yesintentintent — this head takes no args; kept for NODE LAW shape parity.
propertiesArray<PropertyNode>yesintentintent — attributes/visible.

MaterialNode

A materials[] entry: the addMaterial head plus a properties list for everything else. Identity is key, unique within materials[].

// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { AddMaterialMethod } from "./AddMaterialMethod.js";
import type { Argument } from "./Argument.js";
import type { PropertyNode } from "./PropertyNode.js";

/**
 * A `materials[]` entry: the `addMaterial` head plus a `properties` list
 * for everything else. Identity is `key`, unique within `materials[]`.
 */
export type MaterialNode = { 
/**
 * identity — unique in the document's one key namespace, every lane.
 */
key: string, 
/**
 * intent — editor-chrome display name, printed verbatim.
 */
label?: string, 
/**
 * intent — the one closed-literal materials-lane head.
 */
method: AddMaterialMethod, 
/**
 * intent — `baseColor`/`texture`/`tileWidth`/`tileHeight`.
 */
args?: Array<Argument>, 
/**
 * intent — every other `ResolvedMaterial` field.
 */
properties?: Array<PropertyNode>, };
fieldtypeoptionalclassdoc
keystringnoidentityidentity — unique in the document's one key namespace, every lane.
labelstringyesintentintent — editor-chrome display name, printed verbatim.
methodAddMaterialMethodnointentintent — the one closed-literal materials-lane head.
argsArray<Argument>yesintentintent — baseColor/texture/tileWidth/tileHeight.
propertiesArray<PropertyNode>yesintentintent — every other ResolvedMaterial field.

ModelSettings

Model-level settings — one document-config block. Permanent conventions (Z-up, internal mm, display chord deflection as a render() argument, never a setting) are not fields here.

// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { Environment } from "./Environment.js";
import type { UnitConfig } from "./UnitConfig.js";

/**
 * Model-level settings — one document-config block. Permanent conventions
 * (Z-up, internal mm, display chord deflection as a `render()` argument,
 * never a setting) are not fields here.
 */
export type ModelSettings = { 
/**
 * intent — absent = `{length: "mm"}`, the one place that default is written.
 */
units?: UnitConfig, 
/**
 * intent — the sun, sky and HDRI; absent = the host's neutral default.
 */
environment?: Environment, };
fieldtypeoptionalclassdoc
unitsUnitConfigyesintentintent — absent = {length: "mm"}, the one place that default is written.
environmentEnvironmentyesintentintent — the sun, sky and HDRI; absent = the host's neutral default.

ObjectNode

ONE node type per lane: {key, method, args?} plus steps (Object = createObject, a data chain) or objects (Block = createBlock, a nest, recursive) — method alone decides which body is legal; a node naming neither, or the wrong body for its method, fails validate by name.

// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { Argument } from "./Argument.js";
import type { BehaviorNode } from "./BehaviorNode.js";
import type { ObjectMethod } from "./ObjectMethod.js";
import type { PropertyNode } from "./PropertyNode.js";
import type { StepNode } from "./StepNode.js";

/**
 * ONE node type per lane: `{key, method, args?}` plus `steps` (`Object` =
 * `createObject`, a data chain) or `objects` (`Block` = `createBlock`, a
 * nest, recursive) — `method` alone decides which body is legal; a node
 * naming neither, or the wrong body for its method, fails validate by name.
 */
export type ObjectNode = { 
/**
 * identity — unique in the document's one key namespace, every lane,
 * nested children included.
 */
key: string, 
/**
 * intent — editor-chrome display text, printed verbatim; absent falls
 * back to `key`.
 */
label?: string, 
/**
 * intent — `createObject` (body `steps`) or `createBlock` (body `objects`).
 */
method: ObjectMethod, 
/**
 * intent — every object's args stay empty: `createBlock` and
 * `createObject` alike take no args of their own. Placement
 * (`pivot`/`translation`/`rotation`/`scale`/`copies`) is INSTANCE and
 * lives in `properties` below, same as every other object.
 */
args?: Array<Argument>, 
/**
 * intent — placement (`pivot`/`translation`/`rotation`/`scale`/
 * `copies`) plus paint and identity (`name`/`material`/`layer`/
 * `visible`/`attributes`) on this object itself.
 */
properties?: Array<PropertyNode>, 
/**
 * intent — a verb the engine performs on this object's siblings once
 * the parent set evaluates (AGENTS.md "Behaviors"); each method at
 * most once.
 */
behaviors?: Array<BehaviorNode>, 
/**
 * intent — the data chain, legal only on `method: createObject`.
 */
steps?: Array<StepNode>, 
/**
 * intent — the nested children, legal only on `method: createBlock`.
 */
objects?: Array<ObjectNode>, };
fieldtypeoptionalclassdoc
keystringnoidentityidentity — unique in the document's one key namespace, every lane, nested children included.
labelstringyesintentintent — editor-chrome display text, printed verbatim; absent falls back to key.
methodObjectMethodnointentintent — createObject (body steps) or createBlock (body objects).
argsArray<Argument>yesintentintent — every object's args stay empty: createBlock and createObject alike take no args of their own. Placement (pivot/translation/rotation/scale/copies) is INSTANCE and lives in properties below, same as every other object.
propertiesArray<PropertyNode>yesintentintent — placement (pivot/translation/rotation/scale/ copies) plus paint and identity (name/material/layer/ visible/attributes) on this object itself.
behaviorsArray<BehaviorNode>yesintentintent — a verb the engine performs on this object's siblings once the parent set evaluates (AGENTS.md "Behaviors"); each method at most once.
stepsArray<StepNode>yesintentintent — the data chain, legal only on method: createObject.
objectsArray<ObjectNode>yesintentintent — the nested children, legal only on method: createBlock.

ParameterNode

One parameters[] entry — a named value binding. key is required: the name every expression resolves it by.

// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { Argument } from "./Argument.js";
import type { ParameterMethod } from "./ParameterMethod.js";

/**
 * One `parameters[]` entry — a named value binding. `key` is required: the
 * name every expression resolves it by.
 */
export type ParameterNode = { 
/**
 * identity — unique in the document's one key namespace, every lane.
 */
key: string, 
/**
 * intent — editor-chrome display text, printed verbatim; absent falls
 * back to `key`.
 */
label?: string, 
/**
 * intent — which of the 13 value methods this parameter binds.
 */
method: ParameterMethod, 
/**
 * intent — the method's arguments.
 */
args?: Array<Argument>, };
fieldtypeoptionalclassdoc
keystringnoidentityidentity — unique in the document's one key namespace, every lane.
labelstringyesintentintent — editor-chrome display text, printed verbatim; absent falls back to key.
methodParameterMethodnointentintent — which of the 13 value methods this parameter binds.
argsArray<Argument>yesintentintent — the method's arguments.

PatternNode

A patterns[] entry: identity key, plus steps — one lineFamily step per drawn family, non-empty (enforced post-deserialize, see crate::validate) — plus a properties list carrying only attributes.

// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { AddPatternMethod } from "./AddPatternMethod.js";
import type { Argument } from "./Argument.js";
import type { PatternStepNode } from "./PatternStepNode.js";
import type { PropertyNode } from "./PropertyNode.js";

/**
 * A `patterns[]` entry: identity `key`, plus `steps` — one `lineFamily`
 * step per drawn family, non-empty (enforced post-deserialize, see
 * `crate::validate`) — plus a `properties` list carrying only `attributes`.
 */
export type PatternNode = { 
/**
 * identity — unique in the document's one key namespace, every lane.
 */
key: string, 
/**
 * intent — editor-chrome display name, printed verbatim.
 */
label?: string, 
/**
 * intent — the one closed-literal patterns-lane head.
 */
method: AddPatternMethod, 
/**
 * intent — this head takes no args; kept for NODE LAW shape parity.
 */
args?: Array<Argument>, 
/**
 * intent — one `lineFamily` step per drawn family, non-empty.
 */
steps: Array<PatternStepNode>, 
/**
 * intent — `attributes` only.
 */
properties?: Array<PropertyNode>, };
fieldtypeoptionalclassdoc
keystringnoidentityidentity — unique in the document's one key namespace, every lane.
labelstringyesintentintent — editor-chrome display name, printed verbatim.
methodAddPatternMethodnointentintent — the one closed-literal patterns-lane head.
argsArray<Argument>yesintentintent — this head takes no args; kept for NODE LAW shape parity.
stepsArray<PatternStepNode>nointentintent — one lineFamily step per drawn family, non-empty.
propertiesArray<PropertyNode>yesintentintent — attributes only.

ViewNode

A views[] entry — {key, method, args?, properties?}, the same node shape a materials/layers entry carries: ONE method, view, taking position/target/up, projection ('perspective' | 'orthographic', default 'perspective'), and both lenses — fov (perspective) and height (orthographic) — may be stored at once; only the active projection's lens is read at evaluate. properties carries display style (background/shading/exposure/shadows/axes).

// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { Argument } from "./Argument.js";
import type { PropertyNode } from "./PropertyNode.js";
import type { ViewMethod } from "./ViewMethod.js";

/**
 * A `views[]` entry — `{key, method, args?, properties?}`, the same node
 * shape a materials/layers entry carries: ONE method, `view`, taking
 * `position`/`target`/`up`, `projection` (`'perspective'` | `'orthographic'`,
 * default `'perspective'`), and both lenses — `fov` (perspective) and
 * `height` (orthographic) — may be stored at once; only the active
 * projection's lens is read at evaluate. `properties` carries display
 * style (`background`/`shading`/`exposure`/`shadows`/`axes`).
 */
export type ViewNode = { 
/**
 * identity — unique in the document's one key namespace, every lane.
 */
key: string, 
/**
 * intent — editor chrome, printed VERBATIM (not an expression).
 */
label?: string, 
/**
 * intent — the one closed-literal views-lane head, `view`.
 */
method: ViewMethod, 
/**
 * intent — the pose args (`position`/`target`/`up`), `projection`, and
 * both lenses (`fov`/`height`).
 */
args?: Array<Argument>, 
/**
 * intent — display style (`background`/`shading`/`exposure`/`shadows`/`axes`).
 */
properties?: Array<PropertyNode>, };
fieldtypeoptionalclassdoc
keystringnoidentityidentity — unique in the document's one key namespace, every lane.
labelstringyesintentintent — editor chrome, printed VERBATIM (not an expression).
methodViewMethodnointentintent — the one closed-literal views-lane head, view.
argsArray<Argument>yesintentintent — the pose args (position/target/up), projection, and both lenses (fov/height).
propertiesArray<PropertyNode>yesintentintent — display style (background/shading/exposure/shadows/axes).

Argument

One value + its domain — the shape of every arg (a parameter's value, a step arg, a properties arg). min/max are numeric-only; options, when present, is the arg's whole domain.

// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.

/**
 * One value + its domain — the shape of every arg (a parameter's value, a
 * step arg, a properties arg). `min`/`max` are numeric-only; `options`, when
 * present, is the arg's whole domain.
 */
export type Argument = { 
/**
 * identity — the arg's name, unique among its owning node's `args`.
 */
key: string, 
/**
 * geometry — an expression string; may be empty (an unselected file
 * parameter authors nothing, so this arg's min/max/options do not apply).
 */
input: string, 
/**
 * intent — expression → number, inclusive lower bound.
 */
min?: string, 
/**
 * intent — expression → number, inclusive upper bound.
 */
max?: string, 
/**
 * intent — expression → non-empty array, the arg's whole domain.
 */
options?: string, };
fieldtypeoptionalclassdoc
keystringnoidentityidentity — the arg's name, unique among its owning node's args.
inputstringnogeometrygeometry — an expression string; may be empty (an unselected file parameter authors nothing, so this arg's min/max/options do not apply).
minstringyesintentintent — expression → number, inclusive lower bound.
maxstringyesintentintent — expression → number, inclusive upper bound.
optionsstringyesintentintent — expression → non-empty array, the arg's whole domain.

ComponentMethod

The two components-lane methods, a closed pair: createComponent holds the component document inline (data), loadComponent names a platform model the host resolves (id). Both evaluate to a ModelJson.

// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.

/**
 * The two components-lane methods, a closed pair: `createComponent` holds
 * the component document inline (`data`), `loadComponent` names a
 * platform model the host resolves (`id`). Both evaluate to a `ModelJson`.
 */
export type ComponentMethod = "createComponent" | "loadComponent";

Values: "createComponent", "loadComponent".

AddLayerMethod

The one layers-lane head method.

// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.

/**
 * The one layers-lane head method.
 */
export type AddLayerMethod = "addLayer";

Values: "addLayer".

PropertyNode

One entry of a properties list — { method, args? }, OPEN at the shape tier: which methods are legal in which home is a registry check (crate::validate::registry), never a schema enum.

// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { Argument } from "./Argument.js";

/**
 * One entry of a `properties` list — `{ method, args? }`, OPEN at the shape
 * tier: which methods are legal in which home is a registry check
 * (`crate::validate::registry`), never a schema enum.
 */
export type PropertyNode = { 
/**
 * intent — the registry-checked property method.
 */
method: string, 
/**
 * intent — the method's arguments.
 */
args?: Array<Argument>, };
fieldtypeoptionalclassdoc
methodstringnointentintent — the registry-checked property method.
argsArray<Argument>yesintentintent — the method's arguments.

AddMaterialMethod

The one materials-lane head method.

// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.

/**
 * The one materials-lane head method.
 */
export type AddMaterialMethod = "addMaterial";

Values: "addMaterial".

Environment

The light that has no place in space — the sun, sky and an HDRI. ONE per document. The sun is DERIVED from site + moment, never authored.

// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { EnvironmentHdri } from "./EnvironmentHdri.js";
import type { Site } from "./Site.js";
import type { SunMoment } from "./SunMoment.js";

/**
 * The light that has no place in space — the sun, sky and an HDRI. ONE per
 * document. The sun is DERIVED from `site` + `moment`, never authored.
 */
export type Environment = { 
/**
 * intent — where the model stands on Earth; absent means `sun_lux`/
 * `sun_kelvin` name the sun directly with no site to derive it from.
 */
site?: Site, 
/**
 * intent — the moment the sun is computed for.
 */
moment?: SunMoment, 
/**
 * intent — sun illuminance in lux; absent lets `site`+`moment` derive it.
 */
sunLux?: number, 
/**
 * intent — sun color temperature in kelvin; absent = the resolver's default.
 */
sunKelvin?: number, 
/**
 * intent — the sky-fill color; absent = the resolver's default.
 */
skyColor?: string, 
/**
 * intent — the ground-fill color; absent = the resolver's default.
 */
groundColor?: string, 
/**
 * intent — sky illuminance in lux; absent = the resolver's default.
 */
skyLux?: number, 
/**
 * intent — image-based lighting; absent = the host's neutral built-in room.
 */
hdri?: EnvironmentHdri, };
fieldtypeoptionalclassdoc
siteSiteyesintentintent — where the model stands on Earth; absent means sun_lux/ sun_kelvin name the sun directly with no site to derive it from.
momentSunMomentyesintentintent — the moment the sun is computed for.
sunLuxnumberyesintentintent — sun illuminance in lux; absent lets site+moment derive it.
sunKelvinnumberyesintentintent — sun color temperature in kelvin; absent = the resolver's default.
skyColorstringyesintentintent — the sky-fill color; absent = the resolver's default.
groundColorstringyesintentintent — the ground-fill color; absent = the resolver's default.
skyLuxnumberyesintentintent — sky illuminance in lux; absent = the resolver's default.
hdriEnvironmentHdriyesintentintent — image-based lighting; absent = the host's neutral built-in room.

UnitConfig

length is REQUIRED, no default: validate is not a normalizer.

// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { LengthUnit } from "./LengthUnit.js";

/**
 * `length` is REQUIRED, no default: validate is not a normalizer.
 */
export type UnitConfig = { 
/**
 * intent — the display/input unit a surface shows length values in.
 */
length: LengthUnit, };
fieldtypeoptionalclassdoc
lengthLengthUnitnointentintent — the display/input unit a surface shows length values in.

ObjectMethod

The two structural object methods, a closed enum — Object admits only steps (a data chain), Block admits only objects (a nest). A record producer (dimensionLinear/hatch/sectionPlane/…) is no longer a third object-tier shape: it is an ordinary steps[] producer step.

// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.

/**
 * The two structural object methods, a closed enum — `Object` admits only
 * `steps` (a data chain), `Block` admits only `objects` (a nest). A record
 * producer (`dimensionLinear`/`hatch`/`sectionPlane`/…) is no longer a
 * third object-tier shape: it is an ordinary `steps[]` producer step.
 */
export type ObjectMethod = "createObject" | "createBlock";

Values: "createObject", "createBlock".

StepNode

One step of a data-streaming chain — no key (nothing references a step; a reference names an object) and no enabled (every arg is already an expression).

// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { Argument } from "./Argument.js";

/**
 * One step of a data-streaming chain — no key (nothing references a step;
 * a reference names an object) and no `enabled` (every arg is already an
 * expression).
 */
export type StepNode = { 
/**
 * intent — editor-chrome display text for this step, printed verbatim;
 * absent falls back to the registry's friendly name for `method`.
 */
label?: string, 
/**
 * intent — the catalog method this step invokes.
 */
method: string, 
/**
 * intent — the method's arguments.
 */
args?: Array<Argument>, };
fieldtypeoptionalclassdoc
labelstringyesintentintent — editor-chrome display text for this step, printed verbatim; absent falls back to the registry's friendly name for method.
methodstringnointentintent — the catalog method this step invokes.
argsArray<Argument>yesintentintent — the method's arguments.

ParameterMethod

The 13 value methods a parameters[] entry may bind — a closed list (AGENTS.md "H8"), unlike StepNode.method: the catalog closes that one, data not a type, because a chain step's method set is open-ended (catalog::NODES); a parameter's is exactly these 13.

// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.

/**
 * The 13 value methods a `parameters[]` entry may bind — a closed list
 * (AGENTS.md "H8"), unlike `StepNode.method`: the catalog closes that one,
 * data not a type, because a chain step's method set is open-ended
 * (`catalog::NODES`); a parameter's is exactly these 13.
 */
export type ParameterMethod = "length" | "lengths" | "number" | "integer" | "angle" | "boolean" | "color" | "text" | "url" | "object" | "curve" | "surface" | "function";

Values: "length", "lengths", "number", "integer", "angle", "boolean", "color", "text", "url", "object", "curve", "surface", "function".

AddPatternMethod

The one patterns-lane head method.

// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.

/**
 * The one patterns-lane head method.
 */
export type AddPatternMethod = "addPattern";

Values: "addPattern".

PatternStepNode

One patterns[].steps entry — a drawn line family. Carries the same shape as StepNode (H9): a pattern step is a step.

// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { Argument } from "./Argument.js";
import type { LineFamilyMethod } from "./LineFamilyMethod.js";

/**
 * One `patterns[].steps` entry — a drawn line family. Carries the same
 * shape as `StepNode` (H9): a pattern step is a step.
 */
export type PatternStepNode = { 
/**
 * intent — editor chrome, verbatim; no UI reads it yet.
 */
label?: string, 
/**
 * intent — the one closed-literal pattern-step method.
 */
method: LineFamilyMethod, 
/**
 * intent — the method's arguments.
 */
args?: Array<Argument>, };
fieldtypeoptionalclassdoc
labelstringyesintentintent — editor chrome, verbatim; no UI reads it yet.
methodLineFamilyMethodnointentintent — the one closed-literal pattern-step method.
argsArray<Argument>yesintentintent — the method's arguments.

ViewMethod

The one views-lane head method, a closed enum — a view is ONE node, not a chain: method is fixed to view, and its projection ARG (not the method) picks perspective or orthographic. SketchUp Sketchup::Camera is ONE class for both projections (perspective?/perspective=; fov "only applicable to perspective cameras"; height "only valid if it is not a perspective camera" — https://ruby.sketchup.com/Sketchup/Camera.html). Blender's bpy.types.Camera is the same shape: one type enum ('PERSP'/'ORTHO'/'PANO') plus BOTH lens fields present at once — lens ("Perspective Camera lens value in millimeters") and ortho_scale ("Orthographic Camera scale (similar to zoom)") — https://docs.blender.org/api/current/bpy.types.Camera.html.

// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.

/**
 * The one views-lane head method, a closed enum — a view is ONE node, not
 * a chain: `method` is fixed to `view`, and its `projection` ARG (not the
 * method) picks perspective or orthographic. SketchUp `Sketchup::Camera` is
 * ONE class for both projections (`perspective?`/`perspective=`; `fov`
 * "only applicable to perspective cameras"; `height` "only valid if it is
 * not a perspective camera" — https://ruby.sketchup.com/Sketchup/Camera.html).
 * Blender's `bpy.types.Camera` is the same shape: one `type` enum
 * (`'PERSP'`/`'ORTHO'`/`'PANO'`) plus BOTH lens fields present at once —
 * `lens` ("Perspective Camera lens value in millimeters") and
 * `ortho_scale` ("Orthographic Camera scale (similar to zoom)") —
 * https://docs.blender.org/api/current/bpy.types.Camera.html.
 */
export type ViewMethod = "view";

Values: "view".

EnvironmentHdri

Image-based lighting. Absent = the host's neutral built-in room. Exactly one of parameter/url is set (checked post-deserialize, validate::lanes::environment_errors) — H6: the old single name field told the two apart by sniffing https:/data:, an implicit pairing.

// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.

/**
 * Image-based lighting. Absent = the host's neutral built-in room. Exactly
 * one of `parameter`/`url` is set (checked post-deserialize,
 * `validate::lanes::environment_errors`) — H6: the old single `name` field
 * told the two apart by sniffing `https:`/`data:`, an implicit pairing.
 */
export type EnvironmentHdri = { 
/**
 * identity — the KEY of a `url`-method parameter (checked at validate).
 */
parameter?: string, 
/**
 * identity — a direct https:/data: address.
 */
url?: string, 
/**
 * intent — absent = the resolver's own default intensity.
 */
intensity?: number, };
fieldtypeoptionalclassdoc
parameterstringyesidentityidentity — the KEY of a url-method parameter (checked at validate).
urlstringyesidentityidentity — a direct https:/data: address.
intensitynumberyesintentintent — absent = the resolver's own default intensity.

Site

Where the model stands on Earth.

// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.

/**
 * Where the model stands on Earth.
 */
export type Site = { 
/**
 * geometry — degrees north of the equator (WGS84); negative is south.
 */
latitude: number, 
/**
 * geometry — degrees east of Greenwich (WGS84); negative is west.
 */
longitude: number, 
/**
 * intent — compass bearing of the model's +Y axis, degrees clockwise
 * from true north. Absent = 0 (+Y points true north).
 */
northAngle?: number, };
fieldtypeoptionalclassdoc
latitudenumbernogeometrygeometry — degrees north of the equator (WGS84); negative is south.
longitudenumbernogeometrygeometry — degrees east of Greenwich (WGS84); negative is west.
northAnglenumberyesintentintent — compass bearing of the model's +Y axis, degrees clockwise from true north. Absent = 0 (+Y points true north).

SunMoment

The moment the sun is computed for — a document FACT, never the wall clock. hour is local solar time. A moment carries no year, so February closes at 28 (crate::document::vocabulary::days_in_month).

// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.

/**
 * The moment the sun is computed for — a document FACT, never the wall
 * clock. `hour` is local solar time. A moment carries no year, so February
 * closes at 28 (`crate::document::vocabulary::days_in_month`).
 */
export type SunMoment = { 
/**
 * intent — 1-12.
 */
month: number, 
/**
 * intent — 1-31, clamped to the month's real length (no year, so
 * February always closes at 28).
 */
day: number, 
/**
 * intent — local solar time, 0-24.
 */
hour: number, };
fieldtypeoptionalclassdoc
monthnumbernointentintent — 1-12.
daynumbernointentintent — 1-31, clamped to the month's real length (no year, so February always closes at 28).
hournumbernointentintent — local solar time, 0-24.

LengthUnit

The display/input unit a surface shows length values in. The document's numbers are ALWAYS millimetres; this names only the edge conversion. DERIVED from LENGTH_UNITS (document/vocabulary.rs) — the same five units, as a closed enum instead of a string list.

// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.

/**
 * The display/input unit a surface shows length values in. The document's
 * numbers are ALWAYS millimetres; this names only the edge conversion.
 * DERIVED from `LENGTH_UNITS` (`document/vocabulary.rs`) — the same five
 * units, as a closed enum instead of a string list.
 */
export type LengthUnit = "mm" | "cm" | "m" | "in" | "ft";

Values: "mm", "cm", "m", "in", "ft".

LineFamilyMethod

The one pattern-lane step method, a closed literal.

// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.

/**
 * The one pattern-lane step method, a closed literal.
 */
export type LineFamilyMethod = "lineFamily";

Values: "lineFamily".

📖 13 min read