ArchLang Playground

Studio (1BR) — an ArchLang floor plan example

The canonical example: a compact studio flat that passes arch lint, with every room opening off a central hall.

This plan compiles to 4 rooms, 42 m² of floor area and 3 windows; every room is reachable from the entrance.

Living / Kitchen 24.0 m² Bedroom 9.0 m² Hall 4.2 m² Bath 4.8 m² 4000 3000 7000 6000 N 02 m PROJECTStudio ApartmentDRAWN BYArchCanvasDATE2026-06-27SCALE1:50
"Studio 1BR" — a 4-room floor plan, 42 m² total: Living / Kitchen (24 m²), Bedroom (9 m²), Hall (4.2 m²), Bath (4.8 m²); 3 doors, 3 windows, entrance via d_main.
Open in the editor

The source

This is the whole plan. The drawing above is what the compiler produced from it — nothing was drawn by hand.

# A compact studio apartment — the canonical ArchLang example.
#
# Architecturally sound (passes `arch lint`): every room opens off a central hall,
# so the bath is never reached through the bedroom; the bath is fully enclosed and
# fitted with real fixtures; and no door leaf sweeps onto furniture. Self-contained
# (no imports) so it compiles from a single file.
plan "Studio 1BR" {
  units mm
  grid 50
  scale 1:50
  north up

  # Exterior shell + partitions. The x=4000 divider runs the FULL height so the bath
  # is walled off from the living space; the right column splits into bedroom / hall / bath.
  wall exterior  thickness 200 { (0,0) (7000,0) (7000,6000) (0,6000) close }
  wall partition thickness 100 { (4000,0) (4000,6000) }
  wall partition thickness 100 { (4000,3000) (7000,3000) }
  wall partition thickness 100 { (4000,4400) (7000,4400) }

  room id=r_living at (0,0)       size 4000x6000 label "Living / Kitchen" uses living kitchen
  room id=r_bed    at (4000,0)    size 3000x3000 label "Bedroom"           uses bedroom
  room id=r_hall   at (4000,3000) size 3000x1400 label "Hall"             uses hall
  room id=r_bath   at (4000,4400) size 3000x1600 label "Bath"             uses bath

  # Entrance into the living space; the hall links it to the bedroom and the bath.
  # Living ↔ hall is a cased opening (circulation needs no door leaf); the bedroom
  # and bath each get a real door off the hall.
  door    id=d_main   at (3000,6000) width 1000 wall exterior  hinge left  swing in
  opening id=o_living at (4000,3700) width 900  wall partition
  door    id=d_bed    at (6400,3000) width 800  wall partition hinge right swing out
  door    id=d_bath   at (4600,4400) width 800  wall partition hinge left  swing out

  window at (0,2000)    width 1500 wall exterior
  window at (7000,1500) width 1200 wall exterior
  window at (7000,5200) width 700  wall exterior

  # Kitchen run along the north wall: sink · counter · stove · fridge (drawn as symbols).
  furniture kitchen_sink at (300,250)  size 800x600
  furniture counter      at (1200,250) size 600x600
  furniture stove        at (1950,250) size 600x600
  furniture fridge       at (2700,250) size 600x650

  # Living + bedroom furniture, kept clear of the door swings.
  furniture sofa at (350,4300) size 2000x900  label "Sofa"
  furniture bed  at (4300,300) size 1500x2000 label "Bed"

  # Bathroom fixtures, kept clear of the door's entry path (the door swings out into
  # the hall): shower in the far corner, basin against the partition, WC on the south
  # wall — the left third of the room stays open so you can actually step inside.
  # The WC is anchored to the room's south edge, so its rotation (180 — cistern to the
  # south wall) is DERIVED; `flush` measures from that wall's inner face rather than the
  # room rectangle's centerline edge, so the 200mm shell's half-thickness is never named.
  furniture shower at (6000,5000) size 900x900   # against the E + S walls (corner)
  furniture basin  at (5200,4450) size 600x450   # back to the hall partition
  furniture wc     in r_bath anchor bottom flush size 400x700

  # Dimension strings: room widths above, overall extents around. The reference
  # (witness) points sit on the building's OUTER faces (x=-100/7100, y=-100/6100 for
  # the 200mm shell) so the extension lines start at the wall face and read outward,
  # never poking back into the building — while the spans still measure centerline to
  # centerline (4000 · 3000 · 7000 · 6000).
  dim (4000,-100)->(0,-100)    offset 250 text "4000"
  dim (7000,-100)->(4000,-100) offset 250 text "3000"
  dim (0,6100)->(7000,6100)    offset 500 text "7000"
  dim (7100,6000)->(7100,0)    offset 500 text "6000"

  title {
    project "Studio Apartment"
    drawn_by "ArchCanvas"
    date "2026-06-27"
  }
}

Read more