New Project

Task index#

"How do I..." jump-in points, each pointing at the file with the real syntax

Task-shaped jump-in points. Each answer is one or two lines and a pointer: the syntax, a compiling example and the pitfalls are in the named file under features/. Where a file marks something not built, it is also recorded by the compiler as skipped, not an error, so a design that uses it still compiles and silently lacks the cut: read the file's Pitfalls section. Before you rely on a "not built" line here, check features/INDEX.md for a newer file that builds it.

Shape and material#

  • Taper a leg. taper start_z= end_z= target_dim= { faces ... } in the leg's component. edge-and-face-cuts.
  • Make a turned part (leg, spindle, chess piece). stock <Material> shape=round diameter= z= plus a section of circle stations. A leg square at the top and turned below keeps square stock and a section that stops short of the top (the pommel). Not built: a non-circular varying section, and a mark on the curved surface (only the flat axis ends take marks). round-stock-sections.
  • Cut a curved outline (round top, felloe, bootjack notch). cut_path with line, arc, polyline; keep="inside" makes the path the new footprint, keep="outside" pierces a cut-out. A smooth freeform edge (a cloud lift, a serpentine front, a vase splat) is a spline through points, sampled to a tolerance, and a whole round is a circle; a named path <Name> { ... } holds a compound path. cut-paths, paths-and-splines.
  • Round or ease an edge, or rebate it. chamfer, roundover, rabbet with an edges child list; selectors include top_perimeter, bottom_perimeter, front_perimeter, top_n ... bottom_w and the upright_* arrises. edge-and-face-cuts.
  • Bevel an edge. bevel angle=35.0 { edges top_s }, or bevel face=pos_z edge=neg_y angle=35.0 [depth=] for any edge. chamfer size= is the 45 degree equal-leg case. bevel-and-rabbet.
  • Cut a moulding profile (ovolo, cove, ogee, bead). moulding section= size= { edges ... }; half_round and cockbead are applied strips, their own narrow component. edge-and-face-cuts.
  • Cut a slot, not a round hole. hole diameter= depth= length= axis=x|y. edge-and-face-cuts.
  • Level a raked leg's foot to the floor. trim reference=world normal=pos_z at=0.0 { faces ... }; name a side face, not the end. edge-and-face-cuts.
  • Glue up thick stock from boards. lamination is not built as material removal. Model the finished thickness as plain stock and note it in a comment.
  • Veneer or laminate a face. veneer face= material= ...; a laminate is the same node with a type=sheet material. veneer-and-laminate.
  • Inlay a banding or stringing line round a panel. banding face= material= width= depth= offset= or stringing face= material= offset=: one node cuts the groove and generates the flush filler, mitred at the corners; pattern=herringbone, angle=90 for cross-banding. banding-and-stringing.
  • Choose a material, a finish, a display colour. material ... finish="'danish oil'" color="#c8a06e"; color is presentation only. materials-and-hardware.
  • Add a hinge, pull or drawer slide. A hardware catalogue item (a slide takes travel_distance slide_depth load_kg), then hardware_use <Name> qty= or a hardware_mount join. It reaches the hardware schedule, never the cut list. materials-and-hardware.

Joining two parts#

Start at joinery-contract: its kinds table names the file for every joint, and its layout rule (marks facing each other, male mark on the male's end or cheek) applies to all of them.

  • Prove a drawer, door or lid can move. A travel child on the join that hangs it (travel axis=-y body=assembly, or kind=angle for a hinge). ww check sweeps it over its range against every other part and names the angle or distance at which anything fouls. travel.
  • Rail into a leg. mortise_and_tenon (joinery-tenons).
  • Make a through tenon stand proud, drawbore, wedge or key it. through #true, proud, pin, wedge, key: all in joinery-tenons; each needs a square, axis-aligned frame.
  • Join at an angle (splayed leg, dished spoke). An oblique mortise_and_tenon: the tenon runs along the male's shoulder normal as placed and may meet the female face up to 45 degrees off square. Give the mark an oriented facing with tilt= and heading= (RFC-0022, built). joinery-tenons, components-and-stock. A compound mitre (a leaning, turning corner) is still not synthesised.
  • Join a turned rung into a leg. round_tenon diameter= length= clearance=; it may be oblique (up to 45 degrees). joinery-tenons.
  • Cross two members. half_lap, cross_lap, bridle; corner a box or drawer: box_joint, dovetail_through, dovetail_half_blind; capture a shelf in a housing: sliding_dovetail. joinery-laps-and-boxes.
  • Size a dovetail or box joint's pins to the board. box_joint: pin_count or finger_width (not both). Dovetails: pin_count or a graduated repeat of pin index= width=, not both. joinery-laps-and-boxes.
  • Mitre a corner or frame a panel. miter, stile_and_rail. joinery-frames.
  • Use dowels, biscuits, dominos, pocket screws, or a glued seam. joinery-fasteners.

Placement, repetition and reuse#

  • Place four legs at four corners. Anchor each by the corner that lands there (by top_sw/top_se/top_ne/top_nw, no rot), or one anchor with rot z=0/90/180/270. Never mix the two: it swings the part out of the assembly. parts-and-assemblies.
  • A true left/right pair. mirror x=|y=|z=<expr> on the second part, not a rot plus hand-adjusted offsets. parts-and-assemblies.
  • A row of parts or features. repeat <var> count=<n> { ... } with id="Name_{var}" wherever an id could collide. Legal in an assembly, a component and a joinery body. parts-and-assemblies.
  • Use the built-in drawer or my own library. import Alias from="std:drawer" export=DrawerBox or from="lib/x.kdl"; override the assembly's params as child nodes on the part. reuse-and-collections.
  • Offer a build variant (face frame or frameless). collection with a choice; the params are coll_<name> and coll_<choice>_is_<word>. reuse-and-collections.
  • Use an expression or a function. A quoted string is CEL: sin cos tan asin acos atan atan2 floor ceil round abs min max sqrt pow inch, in degrees. project-and-params.
  • Size a speaker port, or see a sealed or ported box's response. ac_port_length, ac_sealed_qtc in a param; a driver and an analysis node, read with ww analyze. Litres, Hz, mm. speaker-analysis.

When none of this covers it#

If the furniture genuinely has no representation (steam bending, a working lamination), do not invent syntax. Model the closest buildable approximation, add a // RFC-NNNN: comment at the line, and file docs/rfc/NNNN-short-name.md per docs/KDL_AUTHORING.md §11. The template requires naming which existing examples you checked, because a past RFC claimed a gap that desk.kdl had already closed.

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