Skip to content

Side table

projects.side_table

A side table: legs, aprons and stretchers, a solid top held down by buttons; outside sizes.

As in the table, the aprons' mitred tenons are set down from the tops of the legs, with haunches; the top, glued up from top_boards boards, overhangs the frame by overhang and is held by buttons in short mortises in the aprons, so it can move. Stretchers near the floor, all at the same level (their top edges at stretcher_height), are centered on the legs, with blind tenons mitred at their ends like the aprons', meeting inside the legs.

Side table, assembled

Side table, exploded

Parameters

Parameter Default
width 400
depth 400
height 550
overhang 25
apron_width 80
stretcher_width 30
stretcher_height 150
setback 3
top_boards 3
buttons (2, 2)
leg_stock 40 mm board, oak
stock 20 mm board, oak

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

from woodwright.examples import projects

design = projects.side_table(width=500)

Drawings

The plans in one PDF: plans.pdf.

Assembly

assembly

Parts

parts

Apron front back

apron front back

Apron right left

apron right left

Button

button

Leg

leg

Stretcher

stretcher

Top

top

Top 2

top 2

Cut list

leg               530 x 40 x 40 mm  oak, 4 pieces: leg_front_left, leg_front_right, leg_back_right, leg_back_left
                  - mortise 50 x 8 mm, 33 deep, in back_edge
                  - haunch mortise 20 x 8 mm, 10 deep, in back_edge at right_end
                  - mortise 50 x 8 mm, 33 deep, in top_face
                  - haunch mortise 20 x 8 mm, 10 deep, in top_face at right_end
                  - mortise 20 x 8 mm, 26 deep, in back_edge
                  - mortise 20 x 8 mm, 26 deep, in top_face
apron_front_back  382 x 80 x 20 mm  oak, 2 pieces: apron_front, apron_back
                  - haunched tenon 50 x 8 mm, 31 long, haunch 10 long, end mitred 45 deg towards bottom_face, on left_end
                  - haunched tenon 50 x 8 mm, 31 long, haunch 10 long, end mitred 45 deg towards bottom_face, on right_end
                  - 2 x mortise 42 x 8 mm, 6 deep, in bottom_face
apron_right_left  382 x 80 x 20 mm  oak, 2 pieces: apron_right, apron_left
                  - haunched tenon 50 x 8 mm, 31 long, haunch 10 long, end mitred 45 deg towards bottom_face, on left_end
                  - haunched tenon 50 x 8 mm, 31 long, haunch 10 long, end mitred 45 deg towards bottom_face, on right_end
                  - 2 x mortise 50 x 8 mm, 6 deep, in bottom_face
stretcher         368 x 30 x 20 mm  oak, 4 pieces: stretcher_front, stretcher_right, stretcher_back, stretcher_left
                  - tenon 20 x 8 mm, 24 long, end mitred 45 deg towards bottom_face, on left_end
                  - tenon 20 x 8 mm, 24 long, end mitred 45 deg towards bottom_face, on right_end
top               450 x 150 x 20 mm  oak, 2 pieces: top_1, top_3
                  - 4 x pilot hole ø3, 10 deep, drill point 118 deg, in bottom_face, 145 from left_end, 65 from front_edge; 305 from left_end, 65 from front_edge; 385 from left_end, 145 from front_edge; 65 from left_end, 145 from front_edge, for a 4 x 30 screw
top_2             450 x 150 x 20 mm  oak
button            36 x 40 x 20 mm  oak, 8 pieces: button_front_1, button_front_2, button_right_1, button_right_2, button_back_1, button_back_2, button_left_1, button_left_2
                  - end rabbet 6 mm, 14 deep, in top_face at right_end
                  - clearance hole ø4.5, countersunk ø8, 90 deg, in bottom_face, centered, for a 4 x 30 screw

Code

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

def side_table(
    width: float = 400,
    depth: float = 400,
    height: float = 550,
    overhang: float = 25,
    apron_width: float = 80,
    stretcher_width: float = 30,
    stretcher_height: float = 150,
    setback: float = 3,
    top_boards: int = 3,
    buttons: tuple[int, int] = (2, 2),
    leg_stock: Stock = CHAIR_LEG_STOCK,
    stock: Stock = OAK,
) -> Assembly:
    """A side table: legs, aprons and stretchers, a solid top held down by
    buttons; outside sizes.

    As in the table, the aprons' mitred tenons are set down from the tops
    of the legs, with haunches; the top, glued up from `top_boards` boards,
    overhangs the frame by `overhang` and is held by buttons in short
    mortises in the aprons, so it can move. Stretchers near the floor, all
    at the same level (their top edges at `stretcher_height`), are centered
    on the legs, with blind tenons mitred at their ends like the aprons',
    meeting inside the legs.
    """
    asm = Assembly("side_table", root_location=STANDING)
    legs, aprons = _table_frame(
        asm,
        width,
        depth,
        height - stock.thickness,
        apron_width,
        setback,
        leg_stock,
        stock,
        shoulder=(10, 20),
        haunch_length=10,
    )
    stretchers = _stretchers((stretcher_height, stretcher_height), stretcher_width)
    _leg_rails(asm, legs, width, depth, stretchers, stock, mitred=True)
    top = _glued_top(
        asm,
        aprons[0],
        "top",
        width,
        depth,
        overhang,
        overhang,
        top_boards,
        leg_stock,
        setback,
        stock,
    )
    _buttons(asm, aprons, buttons, stock, top, overhang)
    return asm

Exported with woodwright 0.9.0 on 2026-10-25.