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'scomponent.edge-and-face-cuts. - Make a turned part (leg, spindle, chess piece).
stock <Material> shape=round diameter= z=plus asectionofcirclestations. A leg square at the top and turned below keeps squarestockand asectionthat 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_pathwithline,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 asplinethrough points, sampled to a tolerance, and a whole round is acircle; a namedpath <Name> { ... }holds a compound path.cut-paths,paths-and-splines. - Round or ease an edge, or rebate it.
chamfer,roundover,rabbetwith anedgeschild list; selectors includetop_perimeter,bottom_perimeter,front_perimeter,top_n ... bottom_wand theupright_*arrises.edge-and-face-cuts. - Bevel an edge.
bevel angle=35.0 { edges top_s }, orbevel 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_roundandcockbeadare applied strips, their own narrowcomponent.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.
laminationis not built as material removal. Model the finished thickness as plainstockand note it in a comment. - Veneer or laminate a face.
veneer face= material= ...; a laminate is the same node with atype=sheetmaterial.veneer-and-laminate. - Inlay a banding or stringing line round a panel.
banding face= material= width= depth= offset=orstringing face= material= offset=: one node cuts the groove and generates the flush filler, mitred at the corners;pattern=herringbone,angle=90for cross-banding.banding-and-stringing. - Choose a material, a finish, a display colour.
material ... finish="'danish oil'" color="#c8a06e";coloris presentation only.materials-and-hardware. - Add a hinge, pull or drawer slide. A
hardwarecatalogue item (a slide takestravel_distanceslide_depthload_kg), thenhardware_use <Name> qty=or ahardware_mountjoin. 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
travelchild on thejointhat hangs it (travel axis=-y body=assembly, orkind=anglefor a hinge).ww checksweeps 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 injoinery-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 withtilt=andheading=(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_countorfinger_width(not both). Dovetails:pin_countor a graduatedrepeatofpin 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, norot), or one anchor withrot 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 secondpart, not arotplus hand-adjusted offsets.parts-and-assemblies. - A row of parts or features.
repeat <var> count=<n> { ... }withid="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=DrawerBoxorfrom="lib/x.kdl"; override the assembly's params as child nodes on thepart.reuse-and-collections. - Offer a build variant (face frame or frameless).
collectionwith achoice; the params arecoll_<name>andcoll_<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_qtcin a param; adriverand ananalysisnode, read withww 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.