Skip to content

Chamfered through mortise tenon

joints.chamfered_through_mortise_tenon

A through tenon whose chamfered end alone stands proud of the stile, like a low pyramid on the stile's edge.

The tenon is longer than the stile is wide by the chamfer, so the chamfers start where it leaves the stile.

Chamfered through mortise tenon, assembled

Chamfered through mortise tenon, exploded

Parameters

Parameter Default
stile_length 600
rail_length 300
width 60
chamfer 2
stock 20 mm board, oak

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

from woodwright.examples import joints

design = joints.chamfered_through_mortise_tenon(stile_length=750)

Drawings

The plans in one PDF: plans.pdf.

Assembly

assembly

Parts

parts

Rail

rail

Stile

stile

Cut list

stile  600 x 60 x 20 mm  oak
       - through mortise 50 x 8 mm in back_edge
rail   362 x 60 x 20 mm  oak
       - tenon 50 x 8 mm, 62 long, end chamfered 2 mm, on left_end

Code

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

def chamfered_through_mortise_tenon(
    stile_length: float = 600,
    rail_length: float = 300,
    width: float = 60,
    chamfer: float = 2,
    stock: Stock = OAK,
) -> Assembly:
    """A through tenon whose chamfered end alone stands proud of the stile,
    like a low pyramid on the stile's edge.

    The tenon is longer than the stile is wide by the chamfer, so the
    chamfers start where it leaves the stile.
    """
    asm = Assembly("chamfered_through_mortise_tenon", root_location=STANDING)
    stile = asm.add(Board("stile", stock, length=stile_length, width=width))
    rail = asm.add(Board("rail", stock, length=rail_length, width=width))
    asm.join(
        MortiseTenon(
            tenon=rail.left_end,
            mortise=stile.back_edge,
            tenon_length=width + chamfer,
            tenon_chamfer=chamfer,
        )
    )
    return asm

Exported with woodwright 0.9.0 on 2026-10-25.