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.
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" }
}