GitHub · open-source · alpha

How do you compare two STEP files?

You changed a part — or a vendor, a teammate, or an AI tool sent you a new revision — and you need to know what's different. Here are the ways engineers actually do it today, what each one misses, and how to get a real, structured answer.

Why the obvious approaches fail

Text diff (git diff, WinMerge): STEP is an exchange format, not a stable serialization. Re-exporting an unchanged model can rewrite entity IDs and float formatting — thousands of changed lines, zero changed geometry. The reverse is worse: a real design change hides in the same noise.

Opening both side by side: works for "the bracket is obviously different," fails for the changes that hurt — a hole opened 0.5 mm, a boss shifted, a new interference between parts. Human eyes don't do sub-millimeter at assembly scale.

CAD-package compare tools: SolidWorks Compare, NX, and PLM systems have geometry compare — if everyone has seats, the files are native, and the comparison happens inside someone's GUI where CI can't see it. Nothing lands on the pull request.

The structured answer: geometric diff

argus-diff (MIT, open source) loads both files with the OCCT kernel and compares the geometry itself — solids matched by fingerprint (volume, surface area, principal moments), changes localized to faces:

$ pip install "argus-diff[render]"
$ argus diff bracket_rev_a.step bracket_rev_b.step --density 2.70

  + 1 added   - 1 removed   ~ 2 modified   = 1 unchanged

  volume: 35638.9 -> 48318.3 mm^3 (+35.58%)
  mass:   96.23 -> 130.46 g @ 2.7 g/cm^3 (+34.23 g)
  interferences (after): 1
    ~ body_0: vol +32.46%
        . 4x cylinder face: radius 2.500 -> 3.000 mm
    ! interference body_1 x body_2: 108.650 mm^3 overlap

Plus structured JSON for scripts, a rendered before/after/overlay image, and CI gate flags (--fail-on-interference, --max-mass-delta-pct) so a geometry regression can fail a pull request the way a broken test does. Works on STEP, STL, 3MF, OBJ, PLY. See the GitHub Action commenting a diff on a real PR.

Honest limits

It diffs what the geometry is, not the feature tree that made it. Mesh formats skip the exact interference check (reported as skipped, never as zero). Proprietary native formats (SolidWorks .sldprt et al.) aren't read — export STEP. Alpha software: if it breaks on your files, we genuinely want the file pair.