Skip to content

Dowel tusk tenon

joints.dowel_tusk_tenon

A tusk tenon held by dowels (after Rex Krueger's workbench): a wide stretcher through a 70 mm square leg, held by two tapered dowels through its tenon, level, their heads towards the viewer.

The 45 mm thick stretcher's tenon is as thick as the stretcher and 100 mm wide, standing out of the leg by as much as the leg is wide, with big chamfers at its corners. The tusks, tusk_diameter dowels tusk_length long, have flats planed over their tip halves, tapering 1:12.5, and go through straight holes in the second and the fourth fifth of the tenon; behind the tenon their flats bear on the round top of a half dowel glued flat side down across the leg. Knocked out, the tusks free the stretcher.

Dowel tusk tenon, assembled

Dowel tusk tenon, exploded

Parameters

Parameter Default
leg_length 500
stretcher_length 400
width 240
tusk_diameter 20
tusk_length 100

Change them in a design file (see Change an example):

from woodwright.examples import joints

design = joints.dowel_tusk_tenon(leg_length=625)

Drawings

The plans in one PDF: plans.pdf.

Assembly

assembly

Parts

parts

Bearing

bearing

Leg

leg

Stretcher

stretcher

Tusk

tusk

Cut list

leg        500 x 70 x 70 mm  oak
           - through mortise 100 x 45 mm in back_edge
stretcher  540 x 240 x 45 mm  oak
           - tenon 100 x 45 mm, 140 long, end chamfered 2 mm, corners chamfered 20 mm, on left_end
           - 2 holes ø20 for tusks through the tenon on left_end, parallel to leg.front_edge, 8 mm off it
tusk       ø20 x 100 mm  oak, 2 pieces: tusk_1, tusk_2
           - flat taper 4 mm over 50 on front_edge towards right_end
bearing    ø20 x 100 mm  oak
           - flat 20 mm wide, 10 deep, on front_edge

Code

From woodwright/examples/joints.py, which imports the names it uses (see From an example to your own design):

def dowel_tusk_tenon(
    leg_length: float = 500,
    stretcher_length: float = 400,
    width: float = 240,
    tusk_diameter: float = 20,
    tusk_length: float = 100,
) -> Assembly:
    """A tusk tenon held by dowels (after Rex Krueger's workbench): a wide
    stretcher through a 70 mm square leg, held by two tapered dowels through
    its tenon, level, their heads towards the viewer.

    The 45 mm thick stretcher's tenon is as thick as the stretcher and 100
    mm wide, standing out of the leg by as much as the leg is wide, with big
    chamfers at its corners. The tusks, `tusk_diameter` dowels `tusk_length`
    long, have flats planed over their tip halves, tapering 1:12.5, and go
    through straight holes in the second and the fourth fifth of the tenon;
    behind the tenon their flats bear on the round top of a half dowel
    glued flat side down across the leg. Knocked out, the tusks free the
    stretcher.
    """
    asm = Assembly("dowel_tusk_tenon", root_location=orient(right_end=UP, back_edge=LEFT))
    leg = asm.add(Board("leg", POST_STOCK, length=leg_length, width=POST_STOCK.thickness))
    stretcher = asm.add(Board("stretcher", LEG_STOCK, length=stretcher_length, width=width))
    dowel = Stock.rod(diameter=tusk_diameter, species="oak")
    tusks = tuple(asm.add(Rod(f"tusk_{i + 1}", dowel, length=tusk_length)) for i in range(2))
    tenon = 100
    bearing = asm.add(Rod("bearing", dowel, length=tenon))
    asm.join(
        DowelTuskTenon(
            tenon=stretcher.left_end,
            mortise=leg.back_edge,
            position=offset(60, ref=leg.right_end),
            across=CENTERED,
            shoulder=(width - tenon) / 2,
            tenon_thickness=LEG_STOCK.thickness,
            tenon_chamfer=2,
            tenon_corner_chamfer=20,
            tusks=tusks,
            bearings=(bearing,),
            tusk_head=leg.top_face,
            tusk_slope=12.5,
            protrusion=POST_STOCK.thickness,
        )
    )
    return asm

Exported with woodwright 0.9.0 on 2026-10-25.