IFC diffing not working as expected + A Revit Diff quirk

Hello! :slight_smile:

The diffing doesn’t seems to work properly in my case … comparing two IFCs with provision for voids.

Not sure how the diffing is actually made (using the hash ID? applicationInternalName? any geometrical comparison?) … but as it seems, it’s not using “GlobalID”, which would be suitable for getting the connection between old and new elements in that case.

If you need them , I could send you both IFCs.


Hey! I have a similar issue.
On my case I sent a new version after modifying the same text parameters for all the yellow walls.
When selecting one of the modified walls on diffing mode it selects automatically another one (hence why there is two selected walls on the screenshot bellow). The pair of (new) (old) wall don’t match with eachother since they have a different BaseOffset and their id is different.

Btw, I am in awe still at how cool the diffing feature is :slight_smile:

@samberger, please do send them over! Would love to look at them.

It’s true, as general info: diffing works on the basis of (applicationId, hash), and I’m quite sure I’m not taking the GlobalId as an application id in the importer logic. Good shout!

@andrsbtrg, could you send us a link to that diff? It would help untangling things. It might be a purely superficial bug - ie, i’m constructing the pairs wrongly - or it might be a wee bit more structural.

We could check based on whether the (old, new) pair have the same applicationId or not.

surely, would be happy to. I am sending it in a message

1 Like

I just tried out the diffing on your example again

does not seem to switch at the comments anymore. Click between the two comments. Diff will stick although it should go back to un-diffed in the other comment.

1 Like

Can confirm, i’ll add it to our backlog. Thanks for spotting & reporting it!

1 Like

I’m not sure if we send you guys the IFCs. Please let us know and @samberger can send them to you guys

Hey @dimitrie!

I think that’s been exactly the problem in the initial post … and it seems to apply for any IFC uploads (not just my specific files).

So I guess, your suggested solution to use the IFC’s GUID value for the applicationID during the IFC upload seems to be the most logic conclusion to be able to provide an applicationId (anyways) (maybe in addition to the current data.GlobalId). … And doing so the version comparison should work the regular way also for IFCs, right?

If I’m not mistaken, the IFC upload’s behaviour regarding that hasn’t changed since then.
That’s why I wanted to just quickly bring that to attention again. :slight_smile: :point_right: :point_left:


@samberger did we get the IFCs in question?

Hey @jonathon, I once sent them to @dimitrie, but I invited you to the conversation … should work?

But on the other hand, it’s the above issue and shouldn’t be anything specific with my files.

1 Like

That’s fine, :pray:

I may have previously missed it. We are currently prioritising amongst a number of backlog areas so just checking we have as full a context as possible.


Hi guys,

Is the IFC diffing something you could prioritize for the next major version? This would really help me/us in pushing Speckle at least for the minimum ambition of internal coordination, as we can lock in the broader audience of our engineers with it. Everything else like data or connectivity follows around it like breadcrumbs … towards the bigger goal of using your platform as a central project hub. If you have other things to prioritize, that is fine too. Making diffing right as a mature function for your web app, the proper IFC diffing is I have the feeling a low-hanging fruit compared to the more granular diffing filters (show geometrical changes, show parameter changes, show all changes, show translation). We would be really happy to see this integrated.



Hi guys,

did you already tackle the IFC diffing, so that it uses the IFC GUID? Would be great as this helps with the adoption of the Speckle Webapp.


1 Like

@AlexHofbeck … not giving up, do you? :sweat_smile: