Compatibility¶
The API is unstable pre-1.0¶
Expect breaking changes on minor versions. Pin a version.
Breaks are kept to the smallest shape that works, but that is a practice, not a promise. There is no support SLA.
What a break tends to look like¶
v0.2.0 renamed geometry.LoopBelow to geometry.LoopSilhouette. That was a
source-only break: the serialized string value stayed "below", so stored
drawing data was unaffected and renderers matching the literal needed no change.
The fix was renaming the identifier at the call site.
Where a change would otherwise touch both the API and data already on disk, the wire format is what gets preserved. Source you can fix with a compiler error to guide you; a silent data migration you cannot.
Every break is written down in the changelog.
Serialization contracts¶
Some string values are load-bearing beyond the Go API, because consumers persist them and match them as literals:
| Values | Where |
|---|---|
"qto", "geometry", "none" |
QuantitySource — see quantities |
"cut", "below" |
LoopRole — see sections |
These do not change without a coordinated consumer migration, independently of what the Go identifiers are called.
Schema support¶
IFC2X3 and IFC4 core entities, via positional attribute indices that are stable across both. There is no EXPRESS schema — see limitations.
Go version¶
The supported Go version is whatever go.mod declares. CI builds and tests with
CGO_ENABLED=0: if a dependency ever introduces a cgo requirement, the build
fails loudly instead of silently linking against system libraries.
"Used in production by Blox" — what that scopes to¶
Blox's import pipeline is the only consumer this library has been hardened against. Concretely, that means:
BuildImporton architectural IFC exports is the exercised path.- Formats, entity types and code paths outside that see far less real-world input, regardless of whether they have unit tests.
It is a statement about which bugs have already been found, not a general assurance. Treat it as a map of where the tested ground is.
Reporting a break¶
Open an issue with the IFC file if you can share it, or a reduced one that
reproduces. The step package parses any STEP file, so a minimal
repro is often only a few entities.