Tooling

Hardware CI/CD

Git workflows, automated builds, and renders for CAD, PCB, and 3D-printable hardware.

Hardware-as-code (see Programmatic CAD) made it sane to commit CAD/PCB sources to git. The next step is treating them like software: PR previews of rendered parts, automated DRC, BOM diffs, generated G-code artifacts. Tooling is younger than software CI but the pieces exist in 2026.

Git-friendly source formats

  • STEP (AP242) — text-ish ASCII; diffable in principle, ugly in practice. The default mechanical interchange format.
  • .kicad_pcb / .kicad_sch (KiCad 7+/8+) — newline-delimited s-expressions; very git-friendly diffs.
  • CadQuery / Build123d / OpenSCAD source — pure text, perfect diffs.
  • .ato (Atopile) / tscircuit JSX — text, diffable, type-checkable.
  • .f3d / .SLDPRT / .ipt / .prt (Fusion / SolidWorks / Inventor / Creo) — binary; commit STEP exports alongside.
  • 3MF — zipped XML; viewable as a project artifact, not great as the source of truth.

CI for code-CAD

  • GitHub Actions + CadQuery / Build123d — run a script in CI, output STL / STEP / 3MF on every PR. The standard 2026 hobby pipeline.
  • GitHub Actions + OpenSCAD CLIopenscad -o out.stl input.scad in a workflow. Trivial and rock-solid.
  • GitLab CI / Forgejo Actions — same pattern, different host.
  • build-cad-on-ci community templates — composite actions for KiCad, FreeCAD, OpenSCAD, CadQuery on GitHub Marketplace.

PCB / EE CI

  • KiBot — open source; declarative YAML pipeline for KiCad — generate gerbers, BOM, 3D renders, fabrication outputs in CI. The de-facto KiCad CI tool.
  • kicad-cli (built into KiCad 8+) — official CLI for export, ERC, DRC; KiBot wraps it but you can also use it directly.
  • InteractiveHtmlBom (iBOM) — generates a clickable HTML BOM for assembly; commonly run in CI.
  • kicad-action / setup-kicad GitHub Actions — drop-in installers for KiCad in workflows.
  • Atopile CIato build in GitHub Actions outputs KiCad project artifacts.

Diff & review for hardware

  • KiCad 8+ schematic & PCB diff — built-in visual diff between any two revs / branches.
  • kicad-diff.py — older Python tool for visual KiCad diffs in CI.
  • Plotty / FlatCAM — gerber visualizers, useful for fab-output review.
  • STEP diff (visual) — no great FOSS option in 2026; common workaround is to render PNGs of two STEPs in CI and post-comment on the PR.
  • OpenSCAD if-diff — community macro to render before/after.

Artifact hosting for PRs

  • GitHub Releases / Artifacts — attach STL, STEP, 3MF, gerber zip per build.
  • Cloudflare Pages / Netlify per-PR previews — host static viewer pages (e.g., model-viewer for STEP/glTF) for PR review.
  • Manyfold / Fishtank (self-hosted) — push artifacts to a private model library (see Model Libraries).
  • OSHWLab, EasyEDA, Flux.ai sharing pages — hosted PCB design preview links (Flux is paid pro tier).

DRC / ERC / lint for hardware

  • kicad-cli erc / drc — official lint, runnable in CI.
  • freerouting — open-source autorouter; sometimes part of CI when iterating on layouts.
  • KLC checker (KiCad Library Checker) — checks symbol/footprint compliance against KiCad library conventions.
  • Atopile checks — type-checking + electrical-rule checks at compile time.

Project / multi-board builds

  • Make / just / Taskfile / Nx — orchestrate multi-board, multi-part builds. Many hardware repos use a top-level justfile to invoke FreeCAD, OpenSCAD, KiCad, and CadQuery in one command.
  • Reproducible builds via Nix / devcontainer — pinning FreeCAD / KiCad / OpenSCAD versions matters; community Nix flakes exist for all three.

Documentation as part of CI

  • Render galleries with model-viewer (see 3D / WebGL) — embed glTF / GLB exports in your README or docs site.
  • Docusaurus / Fumadocs / mdBook + auto-generated screenshots — common for assembly-instruction docs.
  • Bill-of-materials generation — CadQuery and KiCad both produce BOMs in CI; commit the diff into PRs.

Pick this if…

  • CadQuery / OpenSCAD project, want per-PR STL artifacts: GitHub Actions + slicer CLI.
  • KiCad project, want gerbers + BOM on every push: KiBot.
  • Atopile project: ato build in CI; commit outputs to a separate branch.
  • Want PR review with rendered images: screenshot step + bot comment, or per-PR static-site preview.
  • Need DRC/ERC blocking on PRs: kicad-cli (KiCad) + KLC checker for libraries.
  • Reproducibility matters: Nix flake or pinned devcontainer.

On this page