Skip to content

Table

projects.table

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

width and depth are those of the frame, the top overhangs it by overhang. The aprons are wide, so their tenons are set down from the top of the legs, with haunches filling the wide shoulders: the legs keep their tops whole, and the aprons can't twist. The top is glued up from top_boards boards edge to edge, its grain from side to side. It is not glued to the frame: wooden buttons screwed to its underside have tongues in short mortises in the inside of the aprons (buttons along the front and back, and along the sides), so it can move across its grain: in and out of the mortises at the front and back, along them at the sides, where they are longer.

Table, assembled

Table, exploded

Parameters

Parameter Default
width 1200
depth 750
height 750
overhang 40
apron_width 120
setback 3
top_boards 4
buttons (3, 2)
leg_stock 60 mm board, oak
stock 20 mm board, oak
top_stock 30 mm board, oak

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

from woodwright.examples import projects

design = projects.table(width=1500)

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

Top 1 4

top 1 4

Top 2 3

top 2 3

Cut list

leg               720 x 60 x 60 mm  oak, 4 pieces: leg_front_left, leg_front_right, leg_back_right, leg_back_left
                  - mortise 80 x 8 mm, 53 deep, in back_edge
                  - haunch mortise 30 x 8 mm, 10 deep, in back_edge at right_end
                  - mortise 80 x 8 mm, 53 deep, in top_face
                  - haunch mortise 30 x 8 mm, 10 deep, in top_face at right_end
apron_front_back  1182 x 120 x 20 mm  oak, 2 pieces: apron_front, apron_back
                  - haunched tenon 80 x 8 mm, 51 long, haunch 10 long, end mitred 45 deg towards bottom_face, on left_end
                  - haunched tenon 80 x 8 mm, 51 long, haunch 10 long, end mitred 45 deg towards bottom_face, on right_end
                  - 3 x mortise 42 x 8 mm, 6 deep, in bottom_face
apron_right_left  732 x 120 x 20 mm  oak, 2 pieces: apron_right, apron_left
                  - haunched tenon 80 x 8 mm, 51 long, haunch 10 long, end mitred 45 deg towards bottom_face, on left_end
                  - haunched tenon 80 x 8 mm, 51 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
top_1_4           1280 x 207.5 x 30 mm  oak, 2 pieces: top_1, top_4
                  - 3 x pilot hole ø3, 15 deep, drill point 118 deg, in bottom_face, 280 and 1000 from left_end, centered; 80 from front_edge, for a 4 x 35 screw
top_2_3           1280 x 207.5 x 30 mm  oak, 2 pieces: top_2, top_3
                  - 2 x pilot hole ø3, 15 deep, drill point 118 deg, in bottom_face, 80 and 1200 from left_end; 50 from front_edge, for a 4 x 35 screw
button            36 x 40 x 20 mm  oak, 10 pieces: button_front_1, button_front_2, button_front_3, button_right_1, button_right_2, button_back_1, button_back_2, button_back_3, 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 35 screw

Code

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

def table(
    width: float = 1200,
    depth: float = 750,
    height: float = 750,
    overhang: float = 40,
    apron_width: float = 120,
    setback: float = 3,
    top_boards: int = 4,
    buttons: tuple[int, int] = (3, 2),
    leg_stock: Stock = TABLE_LEG_STOCK,
    stock: Stock = OAK,
    top_stock: Stock = THICK_OAK,
) -> Assembly:
    """A table: legs and wide aprons, a solid top held down by buttons; outside sizes.

    `width` and `depth` are those of the frame, the top overhangs it by
    `overhang`. The aprons are wide, so their tenons are set down from the
    top of the legs, with haunches filling the wide shoulders: the legs
    keep their tops whole, and the aprons can't twist. The top is glued up
    from `top_boards` boards edge to edge, its grain from side to side. It
    is not glued to the frame: wooden buttons screwed to its underside have
    tongues in short mortises in the inside of the aprons (`buttons` along
    the front and back, and along the sides), so it can move across its
    grain: in and out of the mortises at the front and back, along them at
    the sides, where they are longer.
    """
    asm = Assembly("table", root_location=STANDING, description=TABLE_DESCRIPTION)
    _, aprons = _table_frame(
        asm,
        width,
        depth,
        height - top_stock.thickness,
        apron_width,
        setback,
        leg_stock,
        stock,
        shoulder=(10, 30),
        haunch_length=10,
    )
    top = _glued_top(
        asm,
        aprons[0],
        "top",
        width,
        depth,
        overhang,
        overhang,
        top_boards,
        leg_stock,
        setback,
        top_stock,
    )
    _buttons(asm, aprons, buttons, stock, top, overhang)
    return asm

Exported with woodwright 0.9.0 on 2026-10-25.