STEP assembly checks · Burr 0.40.5
FreeCAD interference check for exported STEP assemblies
Looking for an interference check for a FreeCAD assembly? Keep modelling in FreeCAD and check the exported STEP in Burr. This is an export-based workflow: it checks the geometry in the file, rather than FreeCAD constraints or design history.
Export the visible assembly you intend to check
In your CAD application, export the intended assembled components together to STEP. Avoid exporting both intermediate construction bodies and their final replacements: duplicate solids can appear as coincident geometry. Confirm the exported pose and component inventory before interpreting the result.
Use the same file locally and in CI
Run burr check --json assembly.step locally. Once the export is committed, the GitHub Actions workflow below repeats the check. This also applies to a STEP exported from Onshape or Fusion; Burr reads the exchange file and does not require a plug-in for the authoring tool.
Choose a check for the question you have
Use Burr for a repeatable check of component interference in a static STEP export. Keep the authoring CAD tool for changing geometry and assembly constraints. If you need a minimum clearance, exact Boolean intersection volume, or a continuous motion collision study, this Burr check does not establish those properties.
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 --versionRead 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 reportThe 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": falseThe 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.