Butterfly joint¶
joints.butterfly_joint
Two slabs butted edge to edge, held by three butterfly keys across the joint (as in a live-edge table top), inlaid flush into the top faces, half of each key in each slab.
Parameters¶
| Parameter | Default |
|---|---|
length |
600 |
width |
200 |
stock |
30 mm board, oak |
Change them in a design file (see Change an example):
Drawings¶
The plans in one PDF: plans.pdf.
Cut list¶
slab 600 x 200 x 30 mm oak, 2 pieces: slab_1, slab_2
- butterfly mortise 90 x 45 mm, waist 15, 8 deep, in top_face, 150 from left_end, 0 from back_edge, across the joint with slab_2
- butterfly mortise 90 x 45 mm, waist 15, 8 deep, in top_face, 300 from left_end, 0 from back_edge, across the joint with slab_2
- butterfly mortise 90 x 45 mm, waist 15, 8 deep, in top_face, 450 from left_end, 0 from back_edge, across the joint with slab_2
key 90 x 45 x 8 mm walnut, 3 pieces: key_1, key_2, key_3
- shaped to a butterfly, waist 15 mm
Code¶
From woodwright/examples/joints.py, which imports the names it uses (see From an example to your own design):
def butterfly_joint(length: float = 600, width: float = 200, stock: Stock = THICK_OAK) -> Assembly:
"""Two slabs butted edge to edge, held by three butterfly keys across
the joint (as in a live-edge table top), inlaid flush into the top faces,
half of each key in each slab."""
asm = Assembly("butterfly_joint")
a = asm.add(Board("slab_1", stock, length=length, width=width))
b = asm.add(Board("slab_2", stock, length=length, width=width))
asm.join(Butt(a.back_edge, b.front_edge))
for i in range(3):
key = asm.add(Board(f"key_{i + 1}", BUTTERFLY_WALNUT, length=90, width=45))
at = {a.left_end: length * (i + 1) / 4, a.back_edge: 0}
asm.join(Butterfly(a.top_face, key, at=at, other=b.top_face))
return asm
Exported with woodwright 0.9.0 on 2026-10-25.