Fastener Joints#
Dowel, pocket-hole, biscuit, domino, and edge-glue joinery
Names: dowel pocket_hole biscuit domino edge_glue screw_type spacing count biscuit_spacing biscuit_size
When to use#
Joining boards with loose fasteners laid out in a row: dowels, pocket screws, biscuits,
dominos, and glued edge seams (a tabletop of several boards, a carcass corner). They
are the cheap, jig-made joints. For a joint a woodworker would cut by hand (tenon, lap,
dovetail) see the other joinery-* files. The marks, join and the layout rule are in
joinery-contract.
Syntax#
| Kind | Params | Notes |
|---|---|---|
dowel | diameter count depth | count is floored to a whole number with a warning; depth is into each part |
pocket_hole | screw_type spacing, opt. face | screw_type is plain quoted text: "1-1/4_coarse", "2_fine" (length in inches, thread); face is a CEL string "'neg_y'" |
biscuit | size spacing | size is 0, 10 or 20 only |
domino | size spacing, opt. depth | size is the tenon thickness 4 5 6 8 10; depth per part, default half the tenon length |
edge_glue | opt. biscuit_spacing biscuit_size | Biscuits only when biscuit_spacing is given; otherwise a plain glued seam |
All of them take clearance (female side only). Fasteners run in a row along the long axis
of the faces' overlap, centred on the male mark, each in an equal share of the longest span
centred on the mark that stays on the overlap.
dowel:countof them. Make the count follow a board with an expression:count "floor(1.0 + (shelf_depth / dowel_spacing))". A hole must stop at least3 mmshort of the far face (the remaining-wall rule):depth "carcass_th - 4.0"on a carcass side.pocket_hole,biscuit,domino,edge_glue: one fastener per wholespacingof that span, at least one, so the count follows the board as a slider moves.pocket_holecuts a 15 degree pocket and pilot in the male, drilled into one of the two faces across the joint:facenames it (a male part-local face), else the one no other part covers, else the underside of a board lying flat and the+face of one standing. The female gets the matching pilot. The pockets are bench work (a jig) and the fabrication pack says so.edge_gluejoins board edges for a panel; the marks sit on the facing edges.
Example#
joinery dowel name=J {
diameter 8.0
count 2.0
depth 15.0
clearance glue_clearance
}
joinery biscuit name=J {
size 20.0
spacing 100.0
clearance glue_clearance
}
A pocket hole needs a board with room behind the joint face for the 15 degree run (a thin
rail is refused: "a pocket ... reaches N mm back from the joint face"). This block is linted
only; the geometry that builds is examples/filing_cabinet_lateral.kdl's PlinthFastener.
joinery pocket_hole name=J {
screw_type "1-1/4_coarse"
spacing 100.0
}
Pitfalls and diagnostics#
- A fractional
countwarns and floors (ADR-0005): write a whole number. - A biscuit
sizeother than0/10/20, or a dominosizeoutside4 5 6 8 10, is out of range and refused. - A fastener wider than the overlap, closer than its own size to its neighbour, or deeper than
the board is refused; less than
max(3 mm, 15 %)left behind a blind hole warns. screw_typeis plain text, not an expression: do not wrap it in inner single quotes.faceis a CEL string and does need them:face "'neg_y'".- End-grain pocket screws into hardwood is a poor choice the validator cannot see.
- The count of an
edge_gluebiscuit row followsbiscuit_spacing; none given means no biscuits, not a default.
See also#
docs/KDL_AUTHORING.md§8 ("What the compiler cuts, and what it checks"); ADR-0013 (joint framework).examples/bookcase.kdl(biscuit, dowel, domino),examples/dining_table.kdl(edge_gluewith biscuits),examples/filing_cabinet_lateral.kdl(dowel, pocket hole),examples/blanket_chest.kdl.joinery-contract.md,joinery-laps-and-boxes.md.
Names#
Every name this page declares, how the example library uses it, and the shortest real use.
dowel#
joinery kind; value in 32 of 116 examples (54 uses).
Shortest real use, from tall_white_cutout_cabinet.kdl:
joinery dowel name=TopDowel {
diameter 8.0
count 3
depth 18.0
clearance glue_clearance
}
pocket_hole#
joinery kind; value in 5 of 116 examples (7 uses).
Shortest real use, from pennsylvania_schrank.kdl:
joinery pocket_hole name=PlinthFix {
screw_type "2_coarse"
spacing 100.0
}
biscuit#
joinery kind; value in 1 of 116 examples (2 uses).
Shortest real use, from bookcase.kdl:
joinery biscuit name=TopEdgeGlue {
size biscuit_size
spacing biscuit_spacing
clearance glue_clearance
}
domino#
joinery kind; value in 1 of 116 examples (1 uses).
Shortest real use, from bookcase.kdl:
joinery domino name=FrameCorner {
size domino_size
spacing domino_spacing
depth domino_depth
clearance glue_clearance
}
edge_glue#
joinery kind; value in 8 of 116 examples (8 uses).
Shortest real use, from shaker_trestle_dining_table.kdl:
joinery edge_glue name=PineSeam { }
screw_type#
word-valued property; node in 5 of 116 examples (7 uses).
Shortest real use, from blanket_chest.kdl:
screw_type "2_coarse"
spacing#
property; node in 6 of 116 examples (10 uses); property in 1 of 116 examples (1 uses).
Shortest real use, from desk.kdl:
spacing 32.0
count#
property; node in 32 of 116 examples (54 uses); property in 70 of 116 examples (192 uses).
Shortest real use, from tall_white_cutout_cabinet.kdl:
count 3
biscuit_spacing#
node in 5 of 116 examples (5 uses); value in 1 of 116 examples (2 uses).
Shortest real use, from arts_crafts_hayrake_table.kdl:
biscuit_spacing 200.0
biscuit_size#
node in 1 of 116 examples (1 uses); value in 1 of 116 examples (2 uses).
Shortest real use, from bookcase.kdl:
biscuit_size 10.0 min=10.0 max=20.0 step=10.0 label="Biscuit Size" category="Joinery"