trigon / trigon.sh

trigon.sh / architectural and civil BIM

buildings from
numbers you
can read

Trigon is free and open-source building modelling for existing and new buildings. Give it an address and it pulls the outline, heights and photos from public data. Then you, or an AI agent, lay out each facade with parametric windows, doors and balconies, and export IFC4, drawings and glTF.

Source on GitHub ↗ How the agent works Build it
Schematic facade elevation: five bays over four storeys and a raised ground floor, one window highlighted as just changed by the agent +0,00 +6,20 eaves facade.place · casement_2
Schematic illustration, not a Trigon render. The highlighted window is what Studio shows when an agent’s command lands: the change glows for a few seconds.
Driven by
hand or MCP
Exports
IFC4 · DXF · PDF
Kernel
PolyCore (planned)

The AI controls the tool. It never draws the building.

An agent drives Trigon through the same commands a person uses: site.load_address, facade.set_bays, facade.place, export.ifc. Every wall, window and balcony is then built by deterministic, parametric code from numbers you can read and change. Nothing in the model is generated geometry, so nothing in it is a guess you cannot check.

Trigon Studio is the desktop app where you build together and watch the agent work. Every command it runs lands in your window: in the activity feed, under the agent’s name with its parameters, result and duration, and in the model, where what changed glows for a few seconds. Undo applies to the agent’s changes as it does to yours. The agent can also look: it can show you a level or an element, and take a screenshot of what you see.

StepWhoWhat happens
site.load_addressagentoutline, storeys and heights from public registers
evidence.facade_imageagentthe facade straightened from an aerial photo, with the model drawn over it
facade.set_bays · facade.placeagent or youthe bay grid and its windows, doors and balconies, each change checked
⌘Zyouundo anything, whoever did it
export.ifc · elevation.sheeteitherIFC4 for Revit and Vectorworks; drawings as PDF and DXF

Works with Claude Code, Codex and any MCP client. The control channel listens on 127.0.0.1 only, with a new random token per launch in a file only you can read. Control protocol ↗

What it does today

SiteGive an address: the outline, storeys, eaves height, year built and materials come from Danish public data (Dataforsyningen, GeoDanmark, BBR, the height model). OpenStreetMap fills in without a key.
EvidenceOblique aerial photos are matched to the facades they show and straightened, with the model drawn over them, so you and the agent compare against the building itself. Scanned archive drawings register the same way.
FacadesA bay grid per facade. Slots take typed components: windows, doors, loggias, French balconies, cantilever and steel balconies. Every change is checked: it fits the wall and the storey, nothing overlaps, no openings in party walls.
BuildingStorey-by-storey masonry walls (a Copenhagen preset included), pitched roofs by straight skeleton, plinths, basement walls, cellar stairs, interior walls, stairs and rooms.
PhasesExisting, new and demolished, Revit-style. Views and exports carry the phase, so a renovation proposal reads correctly in plans, 3D and IFC.
DrawingsPlans, elevations and sections drawn from the model, with exact hidden-line removal and hatched cuts, at standard scales. SVG, PNG, vector PDF and DXF.
ExchangeIFC4 as real building elements for Revit and Vectorworks, georeferenced; glTF 2.0 for 3D. IFC import is cross-checked with two independent readers.
HistoryUndo and redo for your changes and the agent’s alike, and a journal of every change saved in the .trigon file.

The full list, with every command, is in the README. IFC details: IFC export ↗. Editing: precise editing ↗.

One kernel with Polykrom

Trigon is built on the same stack as Polykrom, WCKD’s parametric CAD: Rust throughout, everything a command with a schema, and an MCP server over the same commands. The geometry kernel is to be PolyCore, the Rust kernel already under Polykrom, so a fix for one app is a fix for both.

Buildings push a kernel differently from machine parts. Trigon’s needs are filed as a proposal to PolyCore’s own process: building-scale coordinates with a local origin, sections and hidden-line projection in the kernel, an exact fast path for planar bodies, and many small instanced bodies. Today Trigon’s planar walls, openings and drawings run in its own crates; the move onto PolyCore follows that work.

What Trigon needs from PolyCore ↗

Build it

Trigon builds from source with a current Rust toolchain. Free keys from Dataforsyningen and Datafordeler unlock Danish heights and registers; without them, addresses come from OpenStreetMap.

cargo build --release -p trigon-studio -p trigon
./target/release/trigon-studio model.trigon &

# register once, for every project; the agent then drives the running Studio
claude mcp add --scope user trigon -- "$PWD/target/release/trigon" mcp

Keep Studio open while the agent works: with no Studio running, trigon mcp starts a session of its own instead of driving your window.

Status

Stageearly MVPbuilt and used on the owner’s own projects first; expect sharp edges and changing commands
RegionDenmark firstDanish registers, coordinates (EPSG:25832) and drawing conventions; OpenStreetMap elsewhere
Platformssource builddesktop app for macOS and Windows planned; today you build it with Cargo
LicenseMIT OR Apache-2.0two IFC readers linked unmodified under MPL-2.0; no GPL code is linked
Datastays yoursfetched data keeps its own terms (SDFI, OpenStreetMap ODbL); the control channel listens on 127.0.0.1 only

Contains data from Styrelsen for Dataforsyning og Infrastruktur when you fetch it. No accounts.