Home/ News/ v3.0.0 — First stable v3 major
v3 Milestone Release 2026-05-13 ~6 min read

v3.0.0 — The first stable v3 major.
18 modules, FSM engine, ISO 16739-1 IFC.

A consolidation release. After a fast v2 cycle, v3.0.0 lands eighteen business modules on the same module-loader, replaces ad-hoc status fields with a single deterministic FSM engine, adds an in-house ISO 16739-1 IFC parser alongside the existing DDC cad2data bridges, and ships the Qdrant-backed Match Elements pipeline with a 29-field filter plan and BGE rerank.

OpenConstructionERP v3 platform overview

v3.0.0 is not a single big new feature — it is the release that put the platform’s skeleton in place. Eighteen modules now share one module-loader, one event bus, one validation framework, one auth layer. Status fields stop being free-form strings and become explicit finite-state machines. CAD coverage extends from the DDC cad2data bridges (DWG / DGN / RVT) to native IFC via an ISO 16739-1 parser written in pure Python, with no IfcOpenShell runtime dependency.

The three things that matter

18-module wave on one loader

Projects, BOQ, Costs, BIM Hub, Match Elements, Contracts, Finance, Documents, Reporting and nine more all moved to the same module_loader + manifest convention. Each module self-registers its router, models and validation rules. No more per-feature wiring in main.py.

Deterministic FSM engine

Free-form status columns are replaced by a single FSM engine. Every transition has a named guard, optional side-effect and an audit-log entry. Invalid transitions raise FSMTransitionError instead of silently writing bad state. Twelve modules adopted the engine in v3.0.0.

ISO 16739-1 IFC parser

A pure-Python IFC parser shipped at app.modules.bim.parser. Reads IFC2x3 and IFC4 step files, extracts spatial structure + property sets + quantities + relations, emits the same canonical JSON the DDC bridges produce. No IfcOpenShell, no native compile step.

Match Elements with Qdrant + BGE rerank

/match-elements moves to a SearchPlan with 29 hard- and soft-field filters fed into Qdrant for vector search and BGE for cross-encoder rerank. Every search writes a match_search_log row so result quality is measurable instead of anecdotal.

What this unlocks

The 18-module wave is the precondition for everything that follows. Once every module speaks the same loader / FSM / validation contract, adding a new module is a manifest file plus business logic — not a refactor. Six of the modules that landed here (Projects, BOQ, Costs, BIM Hub, Match Elements, Reporting) became the core that v3.6 and v3.11 built on top of.

The FSM engine is the quiet headliner. Status-as-string was already a latent bug; every project that uses status drives several invariants (“a quote can only be awarded once”, “a contract can’t be signed before it’s approved”). Encoding those invariants in transitions instead of scattered if status == … branches removed an entire class of reported bugs in the v3.0.x line.

And the IFC parser closes the last CAD-format gap. The platform now reads DWG, DGN, RVT, IFC2x3 and IFC4 into one canonical schema — without any GPL-incompatible runtime dependency. The downstream BIM Hub, Match Elements and Take-off pipelines all consume the same JSON, regardless of which converter produced it.

Upgrade

pip install --upgrade openconstructionerp==3.0.0

v3.0.0 introduced the v3 alembic baseline. Subsequent v3 minors layered additional migrations on top — see the v3.6 and v3.11 release notes for those. The 18-module set runs on a single PostgreSQL (or SQLite for local dev) and benefits from Qdrant when the optional QDRANT_URL environment variable is set.

Try the platform today.

Live demo in your browser, or self-host in five minutes. AGPL-3.0, no signup required.