Wedged through tenon¶
joints.wedged_through_tenon
A through tenon spread by two wedges into a mortise flared towards the outside.
Two saw kerfs in the end of the tenon, near its edges, take the wedges; driven in, they bend the outer parts of the tenon out into the flares at the ends of the mortise, so the joint can't pull out even without glue. The mortise is flared along the stile, not across it, which would split it. The wedges are planed flush with the tenon; the stile stands with the tenon's end towards the viewer.
Parameters¶
| Parameter | Default |
|---|---|
stile_length |
600 |
rail_length |
300 |
width |
60 |
kerf |
2 |
flare |
3 |
stock |
20 mm board, oak |
Change them in a design file (see Change an example):
Drawings¶
The plans in one PDF: plans.pdf.
Cut list¶
stile 600 x 60 x 20 mm oak
- through mortise 40 x 8 mm in back_edge
- mortise flared 3 mm at the ends over 40, in back_edge
rail 360 x 60 x 20 mm oak
- tenon 40 x 8 mm, 60 long, 2 saw kerfs 2 mm, 40 deep, for wedges, on left_end
wedge 40 x 5 x 8 mm oak, 2 pieces: wedge_1, wedge_2
- taper 3 mm on back_edge towards right_end
Code¶
From woodwright/examples/joints.py, which imports the names it uses (see From an example to your own design):
def wedged_through_tenon(
stile_length: float = 600,
rail_length: float = 300,
width: float = 60,
kerf: float = 2,
flare: float = 3,
stock: Stock = OAK,
) -> Assembly:
"""A through tenon spread by two wedges into a mortise flared towards the outside.
Two saw kerfs in the end of the tenon, near its edges, take the wedges;
driven in, they bend the outer parts of the tenon out into the flares at
the ends of the mortise, so the joint can't pull out even without glue.
The mortise is flared along the stile, not across it, which would split
it. The wedges are planed flush with the tenon; the stile stands with
the tenon's end towards the viewer.
"""
asm = Assembly("wedged_through_tenon", root_location=orient(right_end=UP, back_edge=LEFT))
stile = asm.add(Board("stile", stock, length=stile_length, width=width))
rail = asm.add(Board("rail", stock, length=rail_length, width=width))
# As thick as the tenon, as long as the kerfs (two thirds of the stile),
# at the head as wide as the kerf and the spread.
wedge_stock = Stock.board(thickness=rules.tenon_thickness(stock.thickness), species="oak")
wedges = tuple(
asm.add(Board(f"wedge_{i + 1}", wedge_stock, length=width * 2 / 3, width=kerf + flare))
for i in range(2)
)
asm.join(
WedgedMortiseTenon(
tenon=rail.left_end, mortise=stile.back_edge, shoulder=10, wedges=wedges, kerf=kerf
)
)
return asm
Exported with woodwright 0.9.0 on 2026-10-25.