# 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`**: `count` of them. Make the count follow a board with an expression:
  `count "floor(1.0 + (shelf_depth / dowel_spacing))"`. A hole must stop at least `3 mm` short
  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 whole `spacing` of
  that span, at least one, so the count follows the board as a slider moves.
- **`pocket_hole`** cuts a 15 degree pocket and pilot in the male, drilled into one of the two
  faces across the joint: `face` names 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_glue`** joins board edges for a panel; the marks sit on the facing edges.

## Example

```kdl fragment=joinery
joinery dowel name=J {
    diameter 8.0
    count 2.0
    depth 15.0
    clearance glue_clearance
}
```

```kdl fragment=joinery
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`.

```kdl fragment=joinery nocompile
joinery pocket_hole name=J {
    screw_type "1-1/4_coarse"
    spacing 100.0
}
```

## Pitfalls and diagnostics

- A fractional `count` warns and floors (ADR-0005): write a whole number.
- A biscuit `size` other than `0`/`10`/`20`, or a domino `size` outside `4 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_type` is plain text, not an expression: do not wrap it in inner single quotes.
  `face` **is** 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_glue` biscuit row follows `biscuit_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_glue`
  with 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`:

```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`:

```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`:

```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`:

```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`:

```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`:

```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`:

```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`:

```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`:

```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`:

```kdl
biscuit_size 10.0 min=10.0 max=20.0 step=10.0 label="Biscuit Size" category="Joinery"
```

## Related terms

- [Biscuit joint](/almanac/techniques#biscuit-joint)
- [Bored hole](/almanac/techniques#bored-hole)
- [Domino joint](/almanac/techniques#domino-joint)
- [Dowel joint](/almanac/techniques#dowel-joint)
- [Edge-glue joint](/almanac/techniques#edge-glue-joint)
- [Glue block](/almanac/techniques#glue-block)
- [Lamination (glue-up)](/almanac/techniques#glue-up-lamination)
- [Pocket-hole joint](/almanac/techniques#pocket-hole)
