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.
- 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.
| Step | Who | What happens |
|---|---|---|
| site.load_address | agent | outline, storeys and heights from public registers |
| evidence.facade_image | agent | the facade straightened from an aerial photo, with the model drawn over it |
| facade.set_bays · facade.place | agent or you | the bay grid and its windows, doors and balconies, each change checked |
| ⌘Z | you | undo anything, whoever did it |
| export.ifc · elevation.sheet | either | IFC4 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
| Site | Give 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. |
| Evidence | Oblique 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. |
| Facades | A 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. |
| Building | Storey-by-storey masonry walls (a Copenhagen preset included), pitched roofs by straight skeleton, plinths, basement walls, cellar stairs, interior walls, stairs and rooms. |
| Phases | Existing, new and demolished, Revit-style. Views and exports carry the phase, so a renovation proposal reads correctly in plans, 3D and IFC. |
| Drawings | Plans, elevations and sections drawn from the model, with exact hidden-line removal and hatched cuts, at standard scales. SVG, PNG, vector PDF and DXF. |
| Exchange | IFC4 as real building elements for Revit and Vectorworks, georeferenced; glTF 2.0 for 3D. IFC import is cross-checked with two independent readers. |
| History | Undo 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.
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
| Stage | early MVP | built and used on the owner’s own projects first; expect sharp edges and changing commands |
| Region | Denmark first | Danish registers, coordinates (EPSG:25832) and drawing conventions; OpenStreetMap elsewhere |
| Platforms | source build | desktop app for macOS and Windows planned; today you build it with Cargo |
| License | MIT OR Apache-2.0 | two IFC readers linked unmodified under MPL-2.0; no GPL code is linked |
| Data | stays yours | fetched 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.