Skip to content

Butt shelf

projects.butt_shelf

Two sides with a top, a bottom and a middle shelf butted between them, e.g. to be screwed through the sides (the screws aren't modelled).

Outside sizes; the shelves' design length is between the sides.

Butt shelf, assembled

Butt shelf, exploded

Parameters

Parameter Default
height 600
width 500
depth 200
stock 20 mm board, oak

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

from woodwright.examples import projects

design = projects.butt_shelf(height=750)

Drawings

The plans in one PDF: plans.pdf.

Assembly

assembly

Parts

parts

Left right

left right

Top bottom shelf

top bottom shelf

Cut list

left_right        600 x 200 x 20 mm  oak, 2 pieces: left, right
top_bottom_shelf  460 x 200 x 20 mm  oak, 3 pieces: top, bottom, shelf

Code

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

def butt_shelf(
    height: float = 600,
    width: float = 500,
    depth: float = 200,
    stock: Stock = OAK,
) -> Assembly:
    """Two sides with a top, a bottom and a middle shelf butted between them,
    e.g. to be screwed through the sides (the screws aren't modelled).

    Outside sizes; the shelves' design length is between the sides.
    """
    t = stock.thickness
    asm = Assembly("butt_shelf", root_location=CASE_SIDE)
    left = asm.add(Board("left", stock, length=height, width=depth))
    right = asm.add(Board("right", stock, length=height, width=depth, mirror=True))
    top = asm.add(Board("top", stock, length=width - 2 * t, width=depth))
    bottom = asm.add(Board("bottom", stock, length=width - 2 * t, width=depth))
    shelf = asm.add(Board("shelf", stock, length=width - 2 * t, width=depth))
    for side, top_end, bottom_end, shelf_end in [
        (left, top.left_end, bottom.left_end, shelf.left_end),
        (right, top.right_end, bottom.right_end, shelf.right_end),
    ]:
        asm.join(Butt(side.bottom_face, top_end, position=flush_with(side.right_end)))
        asm.join(Butt(side.bottom_face, bottom_end, position=flush_with(side.left_end)))
        asm.join(Butt(side.bottom_face, shelf_end, position=offset(height / 2, side.right_end)))
    return asm

Exported with woodwright 0.9.0 on 2026-10-25.