Dovetail calculator
Lay out a dovetail, exactly.
Give the boards, the number of tails and the pin width. Get every width on both faces, positions that add up to the board width to the hundredth, and a sheet to take to the bench.
Cut sheet
How the layout works
Everything is measured on the outside face of the pin board, where the pins are narrowest and the tails widest. Along that line: an edge pin, a tail, a pin, a tail, and so on, ending with an edge pin. Edge pins get the same narrow width as the others. The pieces add up to the board width.
Across the pin board's thickness each sloped side moves by the thickness times the tangent of the angle. That is how much narrower the tails get at their baseline and how much wider the pins get on the inside face. For through dovetails the tails are as long as the pin board is thick, and the pins as long as the tail board is thick.
Reading the angle
Hand-cut layouts use a slope: 1:8 means one across for eight along, which is 7.13° per side; 1:6 is 9.46°. Router bits are sold by the angle per side (7°, 8°, 14°). The included angle is twice that. Type the angle the way you think about it; the calculator shows it in all four.
Hand-cut gives the pin width and computes the tails. Router gives the tail width, spaces the pins evenly, and sizes the template: the bushing follows the template while the bit cuts the wood, so the template opening is wider than the tail by the difference between the two.
Use it from an AI agent
The same calculation is an MCP server. Add it as a custom connector in Claude, ChatGPT, Grok or any MCP client:
https://joinerycalc.com/mcpOne read-only tool, dovetail_layout. In clients that support MCP Apps, the drawings show up in the chat. No key, no account. What is logged is on the privacy page.
Or call the API
Schema at /openapi.json. Add "svg": true for the drawings.
curl -s https://joinerycalc.com/api/v1/dovetail -H 'content-type: application/json' -d '{
"boardWidth": 140, "tailBoardThickness": 20, "pinBoardThickness": 20,
"numberOfTails": 3, "pinWidth": 8, "angle": 6, "angleFormat": "slope_ratio"
}'