IFC File Imports Get Some Love! - New Features - Reliability, IfcSpaces, Attributes, More Properties

Hey @community

I want to share with you some exciting changes to our IFC → Speckle importer!

We have some BIG updates! Again! :tada:


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

  1. 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.

  2. 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 the DataObjects. They are now under the “Attributes” in the properties 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!

15 Likes

Also shout out to @oscarazzus who shared his own implementation for IFC parsing. That post gave us a lot of validation, that we’re on the right track with our approach.

5 Likes

Thanks to you!

5 Likes

The original post with the last code is this one

the one you shared in your comment is the first try I did.

Thanks again

3 Likes

Hey hey - it is now uploading my crappy IFC 4x3 from Vectorworks - for the first time !
Great !

6 Likes

2 posts were split to a new topic: Making GraphQL queries that include spaces in property names

The new importer is awesome!
All my test files produce nice results.
Thanks a lot!

1 Like

So now we are two.
For me IfcMaterial and IfcSurfaceStyle are the most important IFC features. (Although not all of my BIM Apps do really care about or export these as IFC rules would like)

But it would be great if such definitions would be reasonably shared between Apps from within Speckle.

IfcSurfaceStyle = (Visual or Render) Material Definition
IfcMaterial = (Physical or BIM) Material definitions
IfcMaterialConstituentSet = Set of multiple IfcMaterials (like for Plies of a Wall or Slab package)

Where an IfcSurfaceStyle (Render Material) can be applied to a IfcMaterials.

Not all Apps provide all of these definitions. But it would be great if these informations would be correctly shared by their types. At least their Naming and most basic PBR settings and colors.