STEP assembly checks · Burr 0.40.5

FreeCAD assembly clash detection: native geometry tools or Burr?

For a FreeCAD assembly clash question, first decide whether you need to investigate geometry in the model or repeat a check of an exported assembly. Burr serves the second workflow: local STEP interference checks, JSON reports and a GitHub Action.

FreeCAD has geometry operations of its own

The official FreeCAD TopoShape API reference documents Boolean common, cut and fuse operations, as well as shape validity and analysis methods. These provide geometry operations for an investigation or your own checking script. This comparison does not claim FreeCAD lacks Boolean operations or that Burr is more accurate than FreeCAD.

Choose Burr for an export-based report

Export the intended assembly to STEP with each component in its assembled position. Run burr check --json assembly.step > report.json on macOS or Linux, then inspect the reported component pairs. Burr runs locally without a model upload or Burr account. The workflow below checks the committed STEP again in GitHub Actions and keeps the JSON artifact.

Keep native modelling in FreeCAD

Burr does not edit FCStd files, assembly constraints or feature history, and it does not repair the source model. It does not return exact Boolean overlap volume, establish minimum clearance or test collisions throughout motion. If your question requires constructing an intersection or changing the model, continue that investigation in your authoring workflow.

Do not confuse a pass with a complete engineering sign-off

Two individually valid solids can still overlap when assembled. Burr checks component relationships in the exported pose and distinguishes contact, proven interference and unresolved checks. A fused single solid cannot provide the same component-pair inventory. Keep intentional engagement under review and inspect pair_set_complete; an empty or partial finding list alone does not establish a clear assembly.

CAD tool documentation

The native capabilities described above come from these public references. Checked October 21, 2026; this is a workflow comparison, with no speed or accuracy benchmark.

Install the release used here

Run this on macOS (Apple Silicon or Intel) or Linux x64. The installer downloads a prebuilt release and verifies its checksum. Linux ARM64 is not available in this release; x64 requires AVX and FMA. Checks run locally and need no Burr account.

curl -fsSL https://burr.sh/install.sh | BURR_VERSION=0.40.5 sh
export PATH="$HOME/.local/bin:$PATH"
burr --version

Read the installer before running it.

Reproduce two real open-hardware checks

These unmodified STEP files come from the Voron-0 Manta M4P DIN mount (GPL-3.0) and the openAMR cover assembly (CERN-OHL-P-2.0). The URLs pin their source revisions. We ran the released Burr 0.40.5 Linux x64 binary on October 21, 2026.

mkdir -p models
curl -fL 'https://raw.githubusercontent.com/VoronDesign/Voron-0/a53fc87562fd630c846af38d7de850c894dc3d85/CAD/Electronics%20Mounts/Manta_M4P_Din_Mount_2pc.step' -o models/manta-mount.step
burr check --json models/manta-mount.step > manta-mount.json
# Exit 0
curl -fL 'https://raw.githubusercontent.com/openAMRobot/openamr-platform-hw/9703a5f13ffc009db8ff3fa979470179afe3d26b/mechanical/cad/production_files/MMP.01.00.00.000%20Cover%20assembly.STEP' -o models/openamr-cover.step
burr check --json models/openamr-cover.step > openamr-cover.json
# Exit 1: interference AND unresolved pairs; inspect the report

The second command intentionally returns a failure. Run it separately if your shell stops on nonzero exits.

// Selected fields from the real Burr 0.40.5 reports:
// Voron Manta mount (exit 0)
"outcome": "pass",
"summary": "No assembly interference detected across 1 pairs",
"component_count": 2,
"pair_set_complete": true

// openAMR cover (exit 1)
"outcome": "fail",
"summary": "16 interfering component pairs detected; 25 component pairs unresolved",
"component_count": 53,
"pair_set_complete": false

The mount has two components and one complete checked pair. The cover has 53 components, with 16 reported interfering pairs and 25 pairs Burr could not check completely. Some possible overlaps fall below coordinate/placement or tessellation resolution. That is not a clean assembly result. Reported overlap also does not establish a design defect: intentional fastener engagement needs review.

Full unedited reports: Manta mount JSON and openAMR cover JSON. Some source part labels in the cover appear with encoding artifacts; the report preserves them.

Model attribution and licenses: VoronDesign/Voron-0, openAMRobot/openamr-platform-hw. These checks do not imply endorsement by either project.

Repeat the check in GitHub Actions

Save this as .github/workflows/step-check.yml in a repository containing models/**/*.step. This workflow uses the same checker version. The action fails on interference and on unresolved checks by default; it uploads the report even after a failure.

name: STEP interference
on: [pull_request]
permissions:
  contents: read
jobs:
  check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          persist-credentials: false
      - uses: fraylabs/burr-action@v1
        id: burr
        with:
          version: '0.40.5'
          files: 'models/**/*.step'
          comment: 'false'
      - uses: actions/upload-artifact@v4
        if: always() && steps.burr.outputs.report-path != ''
        with:
          name: burr-report
          path: ${{ steps.burr.outputs.report-path }}

For this exact example, download the two models above into models/ and commit them. The workflow will fail on the cover, for the reasons shown. Action options and accepted-fit policy explain how to review intended fits without hiding incomplete checks.