Skip to content

Loose tenon

joints.loose_tenon

A rail joined to the back edge of a stile by a loose tenon.

The loose tenon is a strip of 8 mm oak glued into a mortise in the stile's edge and one in the rail's end, half its length in each, as cut with a router or a domino jointer (the mortises here square-ended).

Loose tenon, assembled

Loose tenon, exploded

Parameters

Parameter Default
stile_length 600
rail_length 300
width 60
tenon_length 50
tenon_width 40
stock 20 mm board, oak

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

from woodwright.examples import joints

design = joints.loose_tenon(stile_length=750)

Drawings

The plans in one PDF: plans.pdf.

Assembly

assembly

Parts

parts

Loose tenon

loose tenon

Rail

rail

Stile

stile

Cut list

stile        600 x 60 x 20 mm  oak
             - mortise 40 x 8 mm, 27 deep, in back_edge
rail         300 x 60 x 20 mm  oak
             - mortise 40 x 8 mm, 27 deep, in left_end
loose_tenon  50 x 40 x 8 mm  oak

Code

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

def loose_tenon(
    stile_length: float = 600,
    rail_length: float = 300,
    width: float = 60,
    tenon_length: float = 50,
    tenon_width: float = 40,
    stock: Stock = OAK,
) -> Assembly:
    """A rail joined to the back edge of a stile by a loose tenon.

    The loose tenon is a strip of 8 mm oak glued into a mortise in the
    stile's edge and one in the rail's end, half its length in each, as cut
    with a router or a domino jointer (the mortises here square-ended).
    """
    asm = Assembly("loose_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))
    tenon_stock = Stock.board(thickness=rules.tenon_thickness(stock.thickness), species="oak")
    tenon = asm.add(Board("loose_tenon", tenon_stock, length=tenon_length, width=tenon_width))
    asm.join(LooseTenon(stile.back_edge, rail.left_end, tenon))
    return asm

Exported with woodwright 0.9.0 on 2026-10-25.