---
title: "Wood screws"
description: "Six countersunk sizes, each with the pilot hole, clearance hole and countersink it cuts, and the edge, end, engagement and spacing rules it imposes."
url: https://kaicad.barpom.xyz/docs/catalogue/wood-screws
schema: "0.1"
source: packages/catalogue/data/fixtures/wood-screw.yaml
---

# Wood screws

Countersunk wood screws to **DIN 7997**. The everyday fixture: cleats to rails, backs to
carcasses, anything screwed rather than joined.

```yaml
joints:
  - id: cleat_to_rail_left
    kind: screwed
    fixture: fixtures.wood_screw.4x50
    mate:
      a: slat_cleat@left:face.top
      b: side_rail@left:face.bottom
      align: { contact: true }
    fasteners:
      pattern: { along: length, count: 10, spacing: auto, margin: 80 }
```

That declaration puts ten screws down the cleat, and with each one: a 4.5 mm clearance hole
through the cleat, an 8.4 mm × 90° countersink, and a 2.5 mm pilot 35 mm into the rail. You
write none of those.

## The six sizes

| Id | d | Length | Drive | Head Ø |
| --- | --- | --- | --- | --- |
| `fixtures.wood_screw.3x30` | 3 | 30 | Pozi 1 | 6.0 |
| `fixtures.wood_screw.4x30` | 4 | 30 | Torx 20 | 8.4 |
| `fixtures.wood_screw.4x40` | 4 | 40 | Torx 20 | 8.4 |
| `fixtures.wood_screw.4x50` | 4 | 50 | Torx 20 | 8.4 |
| `fixtures.wood_screw.5x60` | 5 | 60 | Torx 25 | 10.0 |
| `fixtures.wood_screw.5x80` | 5 | 80 | Torx 25 | 10.0 |

## What each one cuts

**Through part** — the board the screw passes through. **Receiving part** — the one it threads
into. The screw enters on the **mating** face, the one touching the other part.

| Id | Clearance | Countersink | Pilot | Pilot depth |
| --- | --- | --- | --- | --- |
| `3x30` | 3.4 | 6.0 × 90° | 1.9 | 22 |
| `4x30` | 4.5 | 8.4 × 90° | 2.5 | 20 |
| `4x40` | 4.5 | 8.4 × 90° | 2.5 | 28 |
| `4x50` | 4.5 | 8.4 × 90° | 2.5 | 35 |
| `5x60` | 5.5 | 10.0 × 90° | 3.2 | 42 |
| `5x80` | 5.5 | 10.0 × 90° | 3.2 | 55 |

All in millimetres. Pilot diameters are for hardwood; softwood tolerates the same pilot and
simply holds a little less well, which the species' withdrawal rating already captures — so
the catalogue does not fork per species.

Threads are never modelled. The mesh is a smooth shank with a head, which is all a 3D preview
needs and a fraction of the triangles.

## The rules each one imposes

| Id | Min edge | Min end | Min engagement | Min spacing | Max through |
| --- | --- | --- | --- | --- | --- |
| `3x30` | 9 | 18 | 14 | 24 | 14 |
| `4x30` | 12 | 24 | 15 | 32 | 14 |
| `4x40` | 12 | 24 | 18 | 32 | 22 |
| `4x50` | 12 | 24 | 20 | 32 | 26 |
| `5x60` | 15 | 30 | 25 | 40 | 32 |
| `5x80` | 15 | 30 | 30 | 40 | 48 |

Edge, end and spacing follow the usual shop rules of **3d**, **6d** and **8d**, resolved
against the nominal diameter. Every one of these is checked, and every failure comes back with
a computed suggestion rather than an observation.

**Min engagement** is how much thread has to be in the receiving part. This is the check that
catches the classic error:

```
FAS-003  Screws in `cleat_to_rail_left` have 0 mm of engagement — the screw
         passes through 40 mm of a 40 mm cleat. Use
         `fixtures.wood_screw.4x50`, which gives 20 mm.
```

**Max through thickness** is the most board the screw can pass through and still reach. A 4×40
through a 25 mm cleat has 15 mm left, which is under its 18 mm minimum engagement — so the
compiler tells you to go to a 4×50 before you have drilled anything.

## End grain

Every size carries `forbid_into_end_grain: warn`. A screw into end grain holds roughly half as
well as one into face grain, and every timber in the catalogue rates worse in the end than the
face.

It is a **warning**, not an error, because it is sometimes the right answer — a screw into the
end of a cleat that is also glued and carries no load is fine. When it is carrying load, the
answer is usually a [threaded insert](/docs/catalogue/knock-down-hardware) or a
[bed bolt](/docs/catalogue/bed-bolts), which threads into steel rather than into wood.

## Choosing a size

Work from the engagement, not the total length:

> **screw length − thickness of the through part ≥ min engagement**

A 25 mm cleat onto a 38 mm rail: a 4×40 leaves 15 mm (short of 18), a 4×50 leaves 25 mm.
Take the 4×50.

Then check the receiving part is thick enough that the pilot does not come out the far side. A
5×80 pilots 55 mm deep, which is more than a 38 mm rail has.

The compiler does both of these. The point of knowing the rule is being able to pick correctly
the first time.

## Procurement

| Id | Pack sizes | Unit cost |
| --- | --- | --- |
| `3x30` | 200 · 500 | 0.04 |
| `4x30` | 100 · 200 · 500 | 0.05 |
| `4x40` | 100 · 200 · 500 | 0.06 |
| `4x50` | 100 · 200 | 0.07 |
| `5x60` | 100 · 200 | 0.11 |
| `5x80` | 50 · 100 | 0.15 |

The BOM rounds up to whole packs, so eleven screws is one box of 100.
