Massing
latest release
Status snapshot

Author the model. Carry the whole job on it.

An IFC-native BIM authoring tool and AEC lifecycle platform — model a building from scratch, take it to a permit-ready construction set, check it against the adopted code, and hand it over field-verified. One model, keyed by GlobalId. Open, self-hosted, no per-seat license.

Feasibility→ Author→ Coordinate→ Document→ Build→ Turnover→ Operate
560+
signed releases shipped
1
IFC model, GUID-keyed end to end
3
desktop platforms, auto-updating
$0
per-seat license

Recently shipped

The checks became the thing being checked

This wave went looking for the gap between what the platform reports and what it does — and found most of it in the instruments. A coverage score that rated an empty document 100%. A dead-code gate counting its own prose as a caller. Twenty functions that were built, tested, and reachable by nothing in production. Each is now held by a check that was made to fail against the real defect before it was trusted.

Reach

Built, tested, and wired to nothing

Twenty public functions were referenced only by their own tests — passing, and unreachable from the product. Four were real capabilities nobody could get to, three had been reimplemented by their callers rather than called, and the rest were misclassifications worth naming. A test suite counts as a caller, which is why no coverage number could ever have shown this.

v0.3.1114 · v0.3.1118
Provenance

An empty document scored 100%

Coverage was computed as answered-over-asked. Ask nothing and you score perfectly — so the least complete assumption set in the system reported the most confidence. The metric now refuses to report a percentage it cannot ground, because a number a reader trusts is worse than no number when it is backwards.

v0.3.1118
Specs

The spec manual answered nothing

For every model this project ships, the 3-part MasterFormat manual came back empty — and a section keynote on a drawing now names the spec section that governs it, so the sheet and the manual point at each other instead of being assembled separately and hoped about.

v0.3.1107 · v0.3.1108
Offline

It could not run offline, and nothing said so

The viewer is required to work fully offline — local WASM, self-hosted tiles. It was reaching a CDN, and the failure was silent rather than loud, which is the version of this bug that survives. Now it is held by a check rather than by intent.

v0.3.1111
Runs

Analyses go through the queue

Clash, IDS, cost and energy stop being requests you hold a browser tab open for. Each becomes a durable Run with an identity, a role check and a place to land — and a job kind that needs to know who you are now says so instead of believing the caller.

v0.3.1057 · v0.3.1060
Upload

Resuming is the same request as starting

A content-addressed handshake identifies a file by its size and chunk hashes, so resuming an interrupted upload and beginning a fresh one are one call — and deduplication falls out of it. Every chunk is verified on arrival, so a corrupt byte is refused by index before conversion runs.

v0.3.1069
Reports

A register you can group

“Cost by discipline”, “RFIs by month”, “hours by trade” had no expression at all — the answer was an export into a spreadsheet. An aggregate route now takes the same filters the register takes, through the same parser, so a report and the list it came from cannot disagree about which rows they describe.

v0.3.1088
Drawings

Mark up the sheet you are looking at

Markup lands on the drawing in view rather than on an abstraction of it, a pin on a wall is that wall and raises an RFI against it, the level list says which cut height will actually pass through the building, and plans can be coloured by discipline.

v0.3.1033 · v0.3.1048 · v0.3.1071
Boundary

Plugin code leaves the API process

Third-party plugin code runs behind a process boundary instead of inside the service. Alongside it the supply-chain scan grew the half it had been skipping — every npm advisory was in the part it never read — and the spatial tree became an actual tree.

v0.3.1055–1058 · v0.3.1081
Deploy

Sign-in, and the flags that govern it

Sign in through massing.cloud and open your cloud library. Then the harder half: 32 environment flags were read by the services and documented nowhere, two of them deciding who may sign in at all. A gate now checks both directions — a flag the code reads must be documented, and a name on the internal list must actually be read.

v0.3.1084–1089

Earlier · v0.3.988–1018

A mark on the paper is the element, and the phone stops being a shrunken desktop

This wave pushed identity down into the 2D surfaces and gave field work its own shape. A pin dropped on a generated sheet now carries the IFC GlobalId of the linework under it, so the mark survives the element moving — and an RFI raised from that pin lands on the wall, not on a coordinate. Field mode stops presenting a desktop at phone size, and the numbers on screen say where they came from.

Sheets & markup

A pin on a wall is that wall

Generated sheets already carried data-guid on their linework; the drawings room was dropping coordinate-only pins, so a wall that moved left the markup pointing at empty paper. Pins now persist the GlobalId, promote to an RFI against that element, and select it in the 3D viewer. Symbol takeoff followed the same idea: box one symbol on the sheet and the rest are found by matching it, not by guessing a count.

v0.3.1010–1014
Field mode

The phone gets its own shape

Field mode hides the seven-room spine rather than shrinking it, lands on capture instead of a dashboard, and the action button no longer covers the thing it acts on. Keyboard journeys are asserted end to end — Tab reaches a room’s actual job and lands there — so the shortest path through a room is a test rather than a claim.

v0.3.1004–1008
Legibility & seams

Numbers that say where they came from

Series colour stopped borrowing the discipline palette, so a chart line no longer reads as a trade. A readiness strip sits on every home, the Gantt shows this week rather than a month of bars, and report packages assemble off the request thread. Underneath, the API client kept shedding weight into per-domain seams, and a worktree build now uses the pinned Vite instead of a different one that silently succeeded.

v0.3.988 · v0.3.1002–1003 · v0.3.1009 · v0.3.1015–1018

Earlier · v0.3.911–929

Drawings that explain themselves, one canvas, and a model that admits when it is behind

That wave was about output you can trust without opening the model to check. A plan that finds nothing at the cut plane now says so and why; a sheet publishes the transform it drew with; the canvas is one surface at a time instead of two fighting; and a converted model tells you when it is behind the file rather than quietly serving stale geometry.

Drawings

A plan that says why it is blank

A plan could compose perfectly — titleblock, scale bar, grid — while the cut plane found no geometry, and nothing in the output said so. An empty plan now states the reason. Sheets publish the transform they were drawn with, so a drawing can be checked against the model rather than trusted, and a sheet asking for an axonometric no longer quietly draws a plan.

v0.3.913–915 · v0.3.928–929
Rooms & viewer

The canvas is one surface at a time

The viewer sub-app work stopped two canvases fighting: cross-mode selection is asserted rather than working by accident, and Specs ships into the room rail. Leaving a drawing returns you where you were — a rule that now lives at the event, not at the two crossings that happened to be wired. The arc is not closed; switching 2D and 3D fully in place, print included, is still open work.

v0.3.913–914 · v0.3.917–922
Model freshness & money

Keep the geometry, and admit when it is stale

Re-converting a model no longer throws away geometry that has not changed — and when the converted model is behind the file, it says so instead of serving the previous version under this version's name. Alongside it, money is Decimal end to end, so a rounded display value can no longer become a stored total.

v0.3.911–912 · v0.3.927

Earlier · v0.3.298–306

In-browser authoring came of age

The wave that turned the web app from a strong reviewer into a genuine modeling tool — draw, slope, mesh, and undo real geometry, then stock the site with properly-classified content.

Draw

automatic axis inference

As you place a point it snaps on-axis, parallel, or perpendicular to the last edge — clean lines without holding Shift.

v0.3.299
Edit

Model undo / redo

Every edit is a new versioned IFC; undo restores a prior version and republishes — GUID-stable, so pins, RFIs and clashes survive.

v0.3.298
Shape

Sloped-top walls

Parapet-slope, shed and gable walls — a trapezoidal profile extruded across the thickness, so every geometry engine renders it.

v0.3.304
Shape

Procedural mesh

Author an element straight from a raw triangle mesh for geometry the parametric recipes can't express — verts + faces in, valid fragment out.

v0.3.305
Populate

Site content library

Drop cranes, hoists, fencing, sanitary units, furniture and planting — each auto-classified into the right IFC class + phase; logistics time-phase on the 4D slider.

v0.3.306
Extend

Sandboxed code hatch

An AST-sandboxed ifcopenshell escape hatch (off by default, red-teamed hard) for the one-off geometry the fixed recipes don't cover.

v0.3.300

The platform

What it already does, end to end

Design & feasibility

  • Generate a real IFC building from a zoning envelope
  • Test Fit — unit-mix, parking solver, yield-on-cost optimize
  • Development proforma with underwriting guardrails

Author & document

  • Model from a blank IFC → grids, levels, walls, families, MEP
  • Full per-discipline NCS drawing set — plans, sections, details, schedules
  • Dated AIA issuances (SD → DD → CD → Permit → Bid → Construction → Record)

Coordinate & build

  • Clash intelligence, code compliance, model-health scorecard
  • Config-driven GC portal — RFIs, change orders, pay apps, closeout
  • CPM + takt + 4D, lean pull-planning, model-based Earned Value

Turnover & operate

  • Field-verified as-built dimensions, variance & manufacturer record (LOD 500)
  • COBie turnover, facility-condition index, reserve & capital planning
  • Disposition — listing kit, tri-approach appraisal, RESO-aligned

Foundations

openBIM to the core. IFC is the source of truth; elements are referenced by GlobalId, never a transient viewer id. Geometry is pre-converted to Fragments on the server and streams to a viewer that runs fully offline (local WASM, self-hosted tiles). Pins, RFIs and issues follow BCF so they round-trip with other BIM tools. Standards run deep — IDS, bSDD, COBie, Uniclass / OmniClass / Uniformat, IBC. Interop with Blender/Bonsai, pyRevit and Autodesk APS is optional, never required.