Bench hook¶
projects.bench_hook
A bench hook: a base with a fence on top at the back and a hook below at the front, glued face to face across the grain.
The base's grain runs away from the woodworker. The fence stops short of the right side, so the saw cuts into the base, not the fence; the hook spans the whole width.
Parameters¶
| Parameter | Default |
|---|---|
length |
250 |
width |
180 |
fence_length |
150 |
fence_width |
40 |
stock |
20 mm board, oak |
fence_stock |
30 mm board, oak |
Change them in a design file (see Change an example):
Drawings¶
The plans in one PDF: plans.pdf.
Cut list¶
Code¶
From woodwright/examples/projects.py, which imports the names it uses (see From an example to your own design):
def bench_hook(
length: float = 250,
width: float = 180,
fence_length: float = 150,
fence_width: float = 40,
stock: Stock = OAK,
fence_stock: Stock = THICK_OAK,
) -> Assembly:
"""A bench hook: a base with a fence on top at the back and a hook below
at the front, glued face to face across the grain.
The base's grain runs away from the woodworker. The fence stops short of
the right side, so the saw cuts into the base, not the fence; the hook
spans the whole width.
"""
# The base lies flat, its length away from the viewer: its back edge is
# to the left.
asm = Assembly("bench_hook", root_location=orient(right_end=BACK, ref_face=UP))
base = asm.add(Board("base", stock, length=length, width=width))
fence = asm.add(Board("fence", fence_stock, length=fence_length, width=fence_width))
hook = asm.add(Board("hook", fence_stock, length=width, width=fence_width))
asm.join(
Butt(
base.top_face,
fence.bottom_face,
flush=(base.right_end, fence.back_edge),
position=flush_with(base.back_edge),
)
)
asm.join(Butt(base.bottom_face, hook.top_face, flush=(base.left_end, hook.front_edge)))
return asm
Exported with woodwright 0.9.0 on 2026-10-25.