Skip to content

Shiplap panel

joints.shiplap_panel

Boards edge to edge, lapped over each other in rabbets half their thickness.

Along each joint the next board's rabbet, cut from below, lies over the previous one's, cut from above, lap wide: a "tongue" as thick as half the board, flush with its top face. Not glued, the boards can move and the lap covers the gap; the top shows a plain line at each joint.

Shiplap panel, assembled

Shiplap panel, exploded

Parameters

Parameter Default
length 500
width 150
lap 12
count 3
stock 20 mm board, oak

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

from woodwright.examples import joints

design = joints.shiplap_panel(length=625)

Drawings

The plans in one PDF: plans.pdf.

Assembly

assembly

Parts

parts

Board 1

board 1

Board 2

board 2

Board 3

board 3

Cut list

board_1  500 x 150 x 20 mm  oak
         - rabbet 10 mm, 12 deep, in back_edge at top_face
board_2  500 x 162 x 20 mm  oak
         - rabbet 12 mm, 10 deep, in bottom_face at front_edge
         - rabbet 10 mm, 12 deep, in back_edge at top_face
board_3  500 x 162 x 20 mm  oak
         - rabbet 12 mm, 10 deep, in bottom_face at front_edge

Code

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

def shiplap_panel(
    length: float = 500, width: float = 150, lap: float = 12, count: int = 3, stock: Stock = OAK
) -> Assembly:
    """Boards edge to edge, lapped over each other in rabbets half their thickness.

    Along each joint the next board's rabbet, cut from below, lies over the
    previous one's, cut from above, `lap` wide: a "tongue" as thick as
    half the board, flush with its top face. Not glued, the boards can move
    and the lap covers the gap; the top shows a plain line at each joint.
    """
    asm = Assembly("shiplap_panel")
    boards = [
        asm.add(Board(f"board_{i + 1}", stock, length=length, width=width)) for i in range(count)
    ]
    for a, b in itertools.pairwise(boards):
        asm.join(
            TongueAndGroove(
                tongue=b.front_edge,
                groove=a.back_edge,
                tongue_thickness=rules.lap_thickness(stock.thickness),
                tongue_length=lap,
                tongue_offset=0,
            )
        )
    return asm

Exported with woodwright 0.9.0 on 2026-10-25.