Skip to content

Haunched mortise tenon corner

joints.haunched_mortise_tenon_corner

A frame corner with a haunched tenon: shoulders on both edges, a haunch on the outer one.

On the inner edge the tenon has a small shoulder, which hides the mortise; on the outer edge the shoulder sets the mortise back from the end of the stile, and a haunch, a short, shallow continuation of the tenon, fills it in a haunch mortise running out of the stile's end, so the rail can't twist. Unlike haunched_stub_tenon_corner (no inner shoulder) and stub_tenon_corner (no haunch either).

Haunched mortise tenon corner, assembled

Haunched mortise tenon corner, exploded

Parameters

Parameter Default
stile_length 300
rail_length 200
width 60
tenon_length 40
outer_shoulder 15
inner_shoulder 10
haunch_length 10
stock 20 mm board, oak

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

from woodwright.examples import joints

design = joints.haunched_mortise_tenon_corner(stile_length=375)

Drawings

The plans in one PDF: plans.pdf.

Assembly

assembly

Parts

parts

Rail

rail

Stile

stile

Cut list

stile  300 x 60 x 20 mm  oak
       - mortise 35 x 8 mm, 42 deep, in back_edge
       - haunch mortise 15 x 8 mm, 10 deep, in back_edge at right_end
rail   240 x 60 x 20 mm  oak
       - haunched tenon 35 x 8 mm, 40 long, haunch 10 long, on left_end

Code

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

def haunched_mortise_tenon_corner(
    stile_length: float = 300,
    rail_length: float = 200,
    width: float = 60,
    tenon_length: float = 40,
    outer_shoulder: float = 15,
    inner_shoulder: float = 10,
    haunch_length: float = 10,
    stock: Stock = OAK,
) -> Assembly:
    """A frame corner with a haunched tenon: shoulders on both edges, a haunch on the outer one.

    On the inner edge the tenon has a small shoulder, which hides the
    mortise; on the outer edge the shoulder sets the mortise back from the
    end of the stile, and a haunch, a short, shallow continuation of the
    tenon, fills it in a haunch mortise running out of the stile's end, so
    the rail can't twist. Unlike `haunched_stub_tenon_corner` (no inner
    shoulder) and `stub_tenon_corner` (no haunch either).
    """
    return _corner_tenon(
        "haunched_mortise_tenon_corner",
        stile_length,
        rail_length,
        width,
        tenon_length,
        outer_shoulder=outer_shoulder,
        inner_shoulder=inner_shoulder,
        haunch_length=haunch_length,
        stock=stock,
    )

Exported with woodwright 0.9.0 on 2026-10-25.