New Project

Node router#

Which file documents which node

This page is a router, not a reference. Each language family has one file under features/ with its syntax, a compiling example and its pitfalls. Grep features/INDEX.md (its Name index lists every node, joinery kind and property a feature file declares) or use the table below. The binding contract is docs/KDL_AUTHORING.md; where this directory and that document disagree, the document wins and the disagreement is a bug to report.

Facts that apply to every node (KDL_AUTHORING §1, §4, §7b):

  • Dimensions are floats: 19.0, never 19. units=mm is the only unit; (in)34.5 is an inch literal, (in)"1-3/4" (a string) is a fractional-inch literal (34 1/2, 3/4, 1'-2"), and inch(x) converts in an expression. --set/overrides also take length text ("34 1/2", "12.7mm").
  • Z is negative going down from a part's top face: z=0.0 is the top, z=-90.0 is 90 mm down.
  • A quoted string is a CEL expression; a bare word is a name or enum. x="width / 2.0" is an expression, normal=pos_x is a name. Never quote an enum value.
  • Features on one part are order-independent: every cutter is unioned and cut once.
  • Enum lists (edges, faces) are child nodes; KDL v2 has no array literal.
  • join (not connect) takes male=Part@Mark female=Part@Mark, unquoted.

Node to file#

You are writingNodesFile
The root, parameters, expressions, limitsproject params meta unit_display, CEL functionsproject-and-params
Materials, finish, colour, purchased hardwarematerials material hardware hardware_use hardware_mount finish colormaterials-and-hardware
A part template, its stock, grain and markscomponent stock mark tilt= heading=components-and-stock
A part that moves (drawer, door, lid, vise chop): checked over its traveltraveltravel
Placing partsassembly part by pos rot mirror repeat role=referenceparts-and-assemblies
Importing or choosing a build variantimport collection choice slots constructionreuse-and-collections
Cuts into a face or edgedado groove rabbet chamfer roundover moulding taper hole trimedge-and-face-cuts
A cut-out or curved outlinecut_path line arc polyline pathcut-paths
A smooth spline edge, a named compound pathspline circle path cut_pathpaths-and-splines
Veneer or laminate facesveneer matchveneer-and-laminate
Turned partsshape=round section circle pommelround-stock-sections
A member curved along its own length (a crest rail, a splat)bend arc splinecurved-members
Any joint: marks, join, clearance, which kindjoinery join buttjoinery-contract
Dowels, pocket holes, biscuits, dominos, edge gluedowel pocket_hole biscuit domino edge_gluejoinery-fasteners
Mortise and tenon, round tenon, pin, wedge, keymortise_and_tenon round_tenonjoinery-tenons
Laps, bridles, box joints, dovetailshalf_lap cross_lap bridle box_joint dovetail_* sliding_dovetailjoinery-laps-and-boxes
Mitres, panel-frame cornersmiter stile_and_railjoinery-frames

features/INDEX.md is generated from the files' front matter and also lists any family file added after this table was written. Check it first.

Words that are accepted but cut nothing#

The parser knows these names; the build records them as skipped (scene JSON "skipped", and a ww check warning) instead of failing, so a design with one still compiles and does not do what you meant.

  • lamination: glued-up stock, not material removal. Model the finished thickness as plain stock.
  • pocket, mortise, tenon, dovetail written as a feature: these are joints. Write a joinery and a join.

Limits (compiler-enforced, the same in CLI, server and browser)#

Source 256 KiB; nesting depth 64; 2,000 parts and 1,000 features per part after every repeat expands; one repeat 4,096 iterations (nested ones multiply). The diagnostic names the limit it hit. Details: features/project-and-params.md.

Settings

Region

A region picks sensible defaults; change any of these separately.

Units

In inches, type lengths the way you say them: 34 1/2, 3/4", 1'-2" or 12.7mm. A length that can't be read is flagged, never rounded to something else.

Paper
Date order
Clock