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.
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):
Drawings¶
The plans in one PDF: plans.pdf.
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.