Skip to content

Language Shape

ArchAI source should be readable by architects and reliable for LLM agents to emit.

The syntax is intentionally grouped: constraints live under the thing they constrain, generated outputs live under predictable groups, and every block maps to a canonical path.

project housing_study:
site main:
parcels:
parcel pcl_001:
coordinate_system project_mm
boundary:
edge front: (0, 0) -> (42000, 0) tags [frontage]
edge east: (42000, 0) -> (39000, 28000)
edge rear: (39000, 28000) -> (4000, 31000)
edge west: (4000, 31000) -> (0, 0)
constraints:
zoning r3
setbacks:
front:
from boundary.edges.front
distance 5000mm
lot_coverage:
max 0.4
far:
max 1.2
  • Prefer grouped blocks over distant cross-references.
  • Keep one concept per block.
  • Use named properties for architectural meaning.
  • Use relative paths inside a semantic parent.
  • Use explicit full paths when crossing to another group.
  • Make all compiler and eval diagnostics cite paths.
project("housing_study", ({ site }) => {
site("main", ({ parcel }) => {
parcel("pcl_001", ({ boundary, constraints }) => {
boundary(({ edge }) => {
edge("front", { from: [0, 0], to: [42000, 0], tags: ["frontage"] });
});
constraints(({ setback, lotCoverage, far }) => {
setback("front", { from: "boundary.edges.front", distance: mm(5000) });
lotCoverage("max", { value: 0.4 });
far("max", { value: 1.2 });
});
});
});
});