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-autoroutestays 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.