ArchLang Playground

Furnished Flat — an ArchLang floor plan example

A two-bedroom flat furnished from the symbol catalogue: thirty-eight drawn fixture kinds across five domains.

This plan compiles to 7 rooms, 90.72 m² of floor area and 6 windows; every room is reachable from the entrance.

Living / Dining 28.0 m² Kitchen 12.9 m² Utility 6.1 m² Hall 10.1 m² Bedroom 1 14.4 m² Bedroom 2 11.2 m² Bath 8.0 m² 8600 11000 ROOM SCHEDULE NO. NAME AREA (m²) 01 Living / Dining 28.00 02 Kitchen 12.92 03 Utility 6.12 04 Hall 10.08 05 Bedroom 1 14.40 06 Bedroom 2 11.20 07 Bath 8.00 TOTAL 90.72 N 01 m PROJECTFurnished FlatDRAWN BYArchLangDATE2026-08-26SCALE1:50
"Furnished Flat" — a 7-room floor plan, 90.72 m² total: Living / Dining (28 m²), Kitchen (12.92 m²), Utility (6.12 m²), Hall (10.08 m²), Bedroom 1 (14.4 m²), Bedroom 2 (11.2 m²), Bath (8 m²); 6 doors, 6 windows, entrance via d_front.
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.

# The FURNITURE flagship — a two-bedroom flat, furnished with the whole symbol catalogue.
#
# Every other example draws a fixture or two in passing. This one is here for the drawn
# symbols themselves: thirty-eight of the eighty-three catalogued kinds, across all five
# indoor domains (bath, kitchen/utility, bedroom, living/dining, office/misc). It is a
# two-bedroom flat rather than a showroom, so the ceiling on that number is the FLOOR
# AREA, not the catalogue: every piece here is somewhere a real one would go, and the
# linter is what says so -- no piece floats off its wall, backs onto the room, blocks a
# door, eats a clearance or collides with anything. `arch validate --strict` reports
# exactly ONE warning, named here so it is not mistaken for rot: `W_PATH_TOO_NARROW` on
# the walk into the kitchen, which the nav grid measures at 400 mm through the 1200 mm
# opening. It appeared when that rule started reporting a MEASURED way in instead of a
# fabricated 0 mm, and it is left standing rather than nudged away -- moving a piece to
# silence a measurement is how a plan stops being evidence.
#
# Four things to read off the source rather than the picture:
#
#   1. NO LABELS. A drawn symbol ignores `label` — the word reaches `describe()` and
#      nothing else — so the only text in this drawing comes from the rooms.
#   2. MOST PIECES CARRY NO SIZE. `against wall <id> … in <room>` takes the catalogued
#      footprint (a fridge is 600 along the wall by 650 deep) and derives the rotation
#      from the wall, so a fitted kitchen, a plumbed bathroom and a bed with its
#      headboard on the right wall are written without a single hand-computed number.
#      `offset` is where the piece's CENTRE lands along the wall run, so a kitchen run
#      is written as a sequence of centres, not as corners.
#      Only the free-standing pieces — the L-sofa, armchair, coffee table, dining table,
#      island, desk, office chair, plant, rug, piano and lounger — declare a `size`,
#      because with no wall there is nothing to tell `along` from `depth`.
#   3. THE RUG IS AN UNDERLAY. It is walked on rather than round, so the pieces standing
#      on it raise no overlap warning and the circulation flood-fill crosses it. Rugs,
#      alone among the symbols, are drawn unfilled — nothing they are written after can
#      be hidden by them.
#   4. THREE PIECES ARE OVERHEAD, and the drawing says so with a dashed outline: the
#      range hood sits over the stove at the same offset, the mirror over the basin at
#      the same offset, and the wall cabinet over its length of the east wall. A thing
#      above the cut plane and a thing below it cannot collide, so those pairs raise no
#      overlap warning — but unlike the rug they are still obstacles to a walk, because a
#      body is taller than a wall unit's underside. That is the whole difference between
#      the two flags, and it is why this plan can draw a kitchen that is actually fitted.
plan "Furnished Flat" {
  units mm
  grid 50
  paper A3 portrait
  scale 1:50
  north up
  dims auto overall
  schedule rooms

  wall id=w_north  exterior  thickness 200 { (0,0) (8400,0) }
  wall id=w_east   exterior  thickness 200 { (8400,0) (8400,10800) }
  wall id=w_south  exterior  thickness 200 { (0,10800) (8400,10800) }
  wall id=w_west   exterior  thickness 200 { (0,0) (0,10800) }

  wall id=w_kit    partition thickness 100 { (5000,0) (5000,5600) }
  wall id=w_util   partition thickness 100 { (5000,3800) (8400,3800) }
  wall id=w_hall_n partition thickness 100 { (0,5600) (8400,5600) }
  wall id=w_hall_s partition thickness 100 { (0,6800) (8400,6800) }
  wall id=w_bed    partition thickness 100 { (3600,6800) (3600,10800) }
  wall id=w_bath   partition thickness 100 { (6400,6800) (6400,10800) }

  room id=r_live    at (0,0)       size 5000x5600 label "Living / Dining" uses living
  room id=r_kitchen at (5000,0)    size 3400x3800 label "Kitchen"         uses kitchen
  room id=r_util    at (5000,3800) size 3400x1800 label "Utility"
  room id=r_hall    at (0,5600)    size 8400x1200 label "Hall"            uses hall
  room id=r_bed1    at (0,6800)    size 3600x4000 label "Bedroom 1"       uses bedroom
  room id=r_bed2    at (3600,6800) size 2800x4000 label "Bedroom 2"       uses bedroom
  room id=r_bath    at (6400,6800) size 2000x4000 label "Bath"            uses bath

  door id=d_front on w_east   at 6200 width 900 hinge near start swing into r_hall
  door id=d_live  on w_hall_n at 900  width 900 hinge near start swing into r_live
  door id=d_util  on w_hall_n at 5700 width 800 hinge near start swing into r_util
  door id=d_bed1  on w_hall_s at 700  width 800 hinge near start swing into r_bed1
  door id=d_bed2  on w_hall_s at 5400 width 800 hinge near start swing into r_bed2
  door id=d_bath  on w_hall_s at 7000 width 800 hinge near start swing into r_bath
  opening         on w_kit    at 1600 width 1200

  window on w_north at 3300 width 1400
  window on w_north at 6650 width 1200
  window on w_west  at 1800 width 1400
  window on w_west  at 4300 width 1200
  window on w_south at 2600 width 1400
  window on w_south at 4400 width 1400

  # --- Living / Dining --------------------------------------------------------
  # The rug is an UNDERLAY: the coffee table and the L-sofa stand on it, so that overlap
  # is the arrangement rather than a collision, and the flood-fill walks straight over it.
  # It is also the only symbol here drawn with no fill, which is why it cannot hide the
  # sofa it is written after.
  furniture rug          at (200,600)   size 2700x2400 in r_live
  furniture tv_unit      against wall w_north offset 1000 in r_live
  furniture sofa_l       at (300,1300)  size 2400x1500 rotate 180 in r_live
  furniture coffee_table at (900,700)   size 1000x500 in r_live
  furniture armchair     at (3300,1100) size 900x850 rotate 90 in r_live
  furniture sun_lounger  at (1950,150)  size 1400x700 rotate 90 in r_live
  furniture plant        at (4300,300)  size 600x600 in r_live
  # A piano carries NO catalogued footprint on purpose, so it cannot be written
  # `against wall` — that form would derive a rotation from the wall and face the
  # keyboard into it. Placed by hand, like it is on a real drawing.
  furniture piano        at (250,3200)  size 1400x1400 in r_live
  furniture dining_table at (2700,3300) size 2100x2000 in r_live
  furniture radiator     against wall w_west offset 4300 in r_live

  # --- Kitchen: a fitted run of centres along the north wall -------------------
  furniture counter       against wall w_north offset 5650 size 1200x600 in r_kitchen
  furniture kitchen_sink  against wall w_north offset 6650 in r_kitchen
  furniture stove         against wall w_north offset 7350 in r_kitchen
  furniture range_hood    against wall w_north offset 7350 in r_kitchen
  furniture dishwasher    against wall w_north offset 7950 in r_kitchen
  furniture fridge        against wall w_east  offset 1000 in r_kitchen
  furniture upper_cabinet against wall w_east  offset 1800 in r_kitchen
  furniture microwave     against wall w_east  offset 2600 in r_kitchen
  furniture island        at (5800,2000) size 1600x900 in r_kitchen

  # --- Utility ----------------------------------------------------------------
  furniture washer       against wall w_east offset 4400 in r_util
  furniture dryer        against wall w_east offset 5000 in r_util
  furniture laundry_sink against wall w_util offset 1300 in r_util
  furniture water_heater against wall w_util offset 500  in r_util

  # --- Bedroom 1 --------------------------------------------------------------
  furniture double_bed against wall w_west   offset 9100  in r_bed1
  furniture nightstand against wall w_west   offset 7925  in r_bed1
  furniture nightstand against wall w_west   offset 10275 in r_bed1
  furniture wardrobe   against wall w_hall_s offset 2600  in r_bed1
  furniture vanity     against wall w_bed     offset 1700  in r_bed1
  furniture dresser    against wall w_bed     offset 3250  in r_bed1

  # --- Bedroom 2 --------------------------------------------------------------
  furniture bed          against wall w_bath offset 2950  in r_bed2
  furniture desk         against wall w_bed  offset 1000 size 1200x700 in r_bed2
  furniture office_chair at (4450,8200) size 600x600 in r_bed2
  furniture bookshelf    against wall w_bed  offset 3350 in r_bed2

  # --- Bath -------------------------------------------------------------------
  furniture shower  against wall w_bath  offset 1350 in r_bath
  furniture basin   against wall w_east  offset 7800 in r_bath
  furniture mirror  against wall w_east  offset 7800 in r_bath
  furniture wc      against wall w_east  offset 9200 in r_bath
  furniture bathtub against wall w_south offset 7450 in r_bath
  furniture bidet   against wall w_east  offset 8500 in r_bath

  title { project "Furnished Flat" drawn_by "ArchLang" date "2026-08-26" }
}

Read more