Skip to content

Mortise tenon frame

frames.mortise_tenon_frame

Two stiles and two rails, the rails tenoned into the stiles at their ends.

Mortise tenon frame, assembled

Mortise tenon frame, exploded

Parameters

Parameter Default
stile_length 600
rail_length 300
width 60
shoulder 10
stock 20 mm board, oak

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

from woodwright.examples import frames

design = frames.mortise_tenon_frame(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, 2 pieces: stile_left, stile_right
       - 2 x mortise 40 x 8 mm, 42 deep, in back_edge
rail   380 x 60 x 20 mm  oak, 2 pieces: rail_top, rail_bottom
       - tenon 40 x 8 mm, 40 long, on left_end
       - tenon 40 x 8 mm, 40 long, on right_end

Code

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

def mortise_tenon_frame(
    stile_length: float = 600,
    rail_length: float = 300,
    width: float = 60,
    shoulder: float = 10,
    stock: Stock = OAK,
) -> Assembly:
    """Two stiles and two rails, the rails tenoned into the stiles at their ends."""

    def corner(rail_end: SideRef, stile_edge: SideRef, position: Position, outer: SideRef) -> Joint:
        return MortiseTenon(
            tenon=rail_end, mortise=stile_edge, position=position, shoulder=shoulder
        )

    asm, _ = _frame("mortise_tenon_frame", corner, stile_length, rail_length, width, stock)
    return asm

Exported with woodwright 0.9.0 on 2026-10-25.