Skip to content

KiCad autorouter: our own engine, built from scratch

Decided 2026-10-16 (owner: Angel). Plan and evidence: kicad-autorouter.

  • We build our own router, eeroute, from scratch in Rust (MIT, one native program per platform). We do not patch or merge Freerouting or KiCadRoutingTools.
  • "From scratch" covers the routing engine only. Hard rule 1 still applies to everything around it: parsers, geometry, spatial index, UI and IPC use existing crates (list in kicad-autorouter).
  • Why existing tools do not fit (Hard rule 1): measured on rusefi-sti-2004, 2026-10-16:
  • Freerouting has no diff pairs or length matching, and its 2.5.0 native binary crashed on our board.
  • KiCadRoutingTools has no push-and-shove, left 70 DRC errors against our rules and failed the USB pair.
  • Neither follows our custom rules or house rules. KiCad's own interactive router does push-and-shove, pairs and length tuning in one engine, but it is cursor-driven and cannot be run as a batch. No autorouter does all of it.
  • Topola (Rust, MIT) is experimental, has no releases and is DSN-based, with no pairs documented. Tried 2026-10-16: it panics loading our board's DSN and cannot scope to chosen nets, so it is neither the base nor a baseline.
  • No GPL code copied or translated: Freerouting and KiCad's router are GPL, and this session's research read their source. So:
  • implementer briefs are written from papers, specs and observed behaviour, never from GPL source;
  • the research clones of GPL code stay out of implementer worktrees;
  • review checks for structural copying.
  • KiCadRoutingTools (MIT) may be reused with attribution.
  • The old tools stay as bench baselines (the score to beat) and kicad-autoroute stays in service until eeroute passes the bench.
  • We may run our own KiCad build (fork) where the stock API blocks a gate. Every fork change is also sent upstream. eeroute must always work on stock KiCad, and we never change the KiCad file format.
  • Do not re-argue build-vs-patch unless a phase gate fails twice. The kicad-autorouter phases list the gates.