Hey @community
I want to share with you some exciting changes to our IFC → Speckle importer!
We have some BIG updates! Again!
What’s New?
After we announced our last major update to Speckle’s IFC file importer, we’ve been listening to your feedback, filing your bug reports, and re-analysing the workflows that include IFC data.
It became clear that there were several key areas for us to focus on:
- Reliability:
- Imports gave very little feedback about status and failures; cryptic error messages, faulty progress bars, and stuck jobs.
- Thanks to your feedback & help, we were given several misbehaving IFC files that would fail or otherwise become stuck while importing.
- Limitations and missing features:
- We were hearing the same missing features being requested. These were not something we could ignore.
- Many of these new features were blocked because our old importer (while highly performant) lacked the flexibility for us to implement new features without having to re-invent many many wheels.
Almost two months ago, @Gergo and I took a stab at a prototype of rewriting our IFC file importer. The prototype was made using IfcOpenshell. While it was quickly clear that it may have some trade-offs (which we’ll discuss below), it showed promising results towards reliability and solving many of the missing features.
It took less than two weeks to reach feature parity with our old importer, with significantly fewer lines of code! (thanks to the flexibility of IfcOpenshell)
Since then, we’ve been working hard to bring this new IfcOpenshell-powered importer to production, and, to show it in its best light, we took the opportunity to implement several of the highly requested missing features!
Improvements To Visualisation Workflows
-
IFC Spaces will now have their 3D geometry extracted, which will be visible in the viewer with the material defined by the IFC file. This enables several use cases for coordination and dashboards.
-
Geometry quality is also now improved!
We’re getting vertex normal data, which enables proper smooth edges, fewer meshing problems, and slightly higher mesh quality.
Improvements To Data Extraction Workflows
Previous iterations of the Speckle IFC importer imported only property sets and basic attributes of objects, like name, global IDs.
Moving to IfcOpenShell has allowed us to attach more complete data to the objects.
-
Alongside Property sets, we are now extracting attributes that are defined on the IFC schema. We’re also extracting properties that are defined on the element type level (e.g.
IfcWallType
,IfcSlabType
etc…) -
This follows our NextGen ecosystem’s design for data extraction, analysis, insights, and reliability. All our current connectors are moving in this direction. While different authoring tools may export different sets of properties, understanding and working with them now follows a single, consistent approach.
Trade-offs
There are some trade-offs however. We are expecting most files to take longer to import. For many files, the difference is trivial; an extra minute or two. For some files the increase is greater (5x-10x). However, for the files that old importer got “stuck” taking many hours for WebIFC to open or fails to process at all, we’ve seen IfcOpenshell successfully handle them in a handful of minutes!
Partly, the slow down for many files is because we’re doing a lot more with the data, but also partly because IfcOpenshell meshification is slower than the WebIFC-based engine that powered our previous importer.
We think that this is a worthy trade off, for the improved reliability, higher quality geometry, and easier software maintenance. And the other full stack improvements we’ve made to reporting job status, progress also alleviates many of the frustrations previously felt with “long” imports.
How To Use The New Importer
The new importer is live on app.speckle.systems as of 15th July 2025.
New file uploads will be imported using the new logic.
As we did last time we updated the Ifc Importer, we have exposed a way to use the old logic still. If your files end in .dotnetimporter.ifc
then the Speckle servers will use the old importing logic. We will support this for at least 2 weeks to give some people flexibility updating.
For Self-hosters / managed deployments, your server admin can enable the new importer by setting the following feature flag:
Docker (.yml):
services:
fileimport-service:
env:
FF_EXPERIMENTAL_IFC_IMPORTER_ENABLED: true
K8s helm chart values.yaml
file:
featureFlags:
experimentalIfcImporterEnabled: true
We may remove this feature flag some time down the line, making this new importer the default.
Breaking Changes To Look Out For:
It may be necessary to update any custom scripts, PowerBI dashboards, or Queries that were relying on the properties attached to data objects looking a certain way.
- Property Sets are now nested under “Property Sets” in the
properties
dictionary. - Several basic attributes like
description
no longer dynamically attached to theDataObjects.
They are now under the “Attributes” in theproperties
dictionary.
This Is Not The End!
We’re continuing to work on several file import-related improvements; so stay tuned to what we have cooking!
I would also love to collect more feedback from users regarding our file imports, so please don’t hesitate to send us a message!