# Vocabulary

The complete set of names the compiler's schema linter accepts, read from the linter's own tables (`tools/kdl-check/src/main.rs`) every time this reference is built, so a name added to the language appears here without anyone editing this page. Syntax and examples for each are in the language reference pages; the [names](names.md) index says which page.

## Project-level nodes

Nodes written directly inside `project`.

`import` `params` `preset` `materials` `component` `joinery` `assembly` `meta` `collection` `choice` `driver` `analysis` `volume` `no_join` `plan` `site`

## Features

Cuts and shaping operations written inside a `component` or `part`.

`dado` `groove` `rabbet` `chamfer` `roundover` `moulding` `taper` `bevel` `cut_path` `hole` `pocket` `trim` `veneer` `banding` `stringing` `grain` `stock` `mark` `by` `pos` `rot` `params` `lamination` `path` `section` `bend`

## Joinery kinds

The `kind` of a `joinery` block, named by a `join`.

`mortise_and_tenon` `half_lap` `cross_lap` `bridle` `box_joint` `dovetail_through` `dovetail_half_blind` `dowel` `pocket_hole` `biscuit` `domino` `tongue_and_groove` `edge_glue` `stile_and_rail` `miter` `butt` `sliding_dovetail` `hardware_mount` `round_tenon` `sliding_sleeve` `mitred_moulding`

## Stock shapes

`stock shape=` values; `rect` is the default.

`rect` `round` `ring`

## Anchors

Nine points on each of the top and bottom faces plus the centre, named by `by` when placing a part.

`top_sw` `top_se` `top_ne` `top_nw` `top_n` `top_s` `top_e` `top_w` `top_center` `bottom_sw` `bottom_se` `bottom_ne` `bottom_nw` `bottom_n` `bottom_s` `bottom_e` `bottom_w` `bottom_center` `center`

## Faces

World and part-local directions: `normal=`, `face=`, `front=`.

`pos_x` `neg_x` `pos_y` `neg_y` `pos_z` `neg_z`

## Grain

`grain=` values; grain runs along the length unless stated.

`lengthwise` `crosswise` `along_x` `along_y` `along_z`

## Word-valued properties

A property with one of these keys holds a name or an enum word, never an expression: do not quote the value as a computation. Every other quoted value is a CEL expression.

`to` `from` `export` `label` `category` `id` `name` `instance` `role` `material` `type` `screw_type` `slope` `profile` `fit` `section` `direction` `unit_display` `edges` `faces` `sides` `axis` `target` `normal` `joint` `male` `female` `units` `kind` `shape` `enter` `stop` `hardware` `path` `driver` `reference` `interp` `grain` `match` `lay` `pattern` `keep` `collection` `extends` `style` `requires` `solves` `body` `pivot` `wall` `design` `swing` `hinge` `plane` `a` `b` `reason` `on` `grain_check` `room` `opening` `of` `ridge` `rotate` `corner` `within` `offset_pin` `path_start` `path_end` `between` `high_side`

## Expression language

A quoted string in a value position is a CEL expression (degrees, not radians). These names are available besides the project's own parameters. Operators, quoting and the units rules are in [project-and-params](project-and-params.md).

**Functions and constants:** `true` `false` `null` `sin` `cos` `tan` `asin` `acos` `atan` `atan2` `floor` `ceil` `round` `abs` `min` `max` `sqrt` `pow` `inch` `ac_sealed_fc` `ac_sealed_qtc` `ac_port_length` `ac_helmholtz_fb`

**Refused** (valid CEL that this language rejects with `ww::eval::not_in_language`): `map` `filter` `all` `exists` `exists_one` `has` `size` `matches` `string` `int` `uint` `double` `bytes` `timestamp` `duration` `contains` `startsWith` `endsWith`

**Limits:** an expression is at most 4096 bytes and 128 operators or brackets.
