Autorouter benchmarks, scored by KiCad
Eight professionally routed open-hardware boards, 2 to 4 layers, 125 to 997 connections. Six routers get the same placement, the same rules and the same wall-clock cap. KiCad counts what is left unrouted and runs DRC on every board that comes back. Nothing here is self-reported.
- Referee: kicad-cli
- Same placement for every tool
- One rule set per board, the same for every tool
- One cap, one machine, one date
- Every board linked to its source files
Six routers, eight boards
Completion by KiCad ratsnest: 100 × (1 − unconnected / connections). DRC errors are the ones a tool added over the human board’s own findings. Each tool had 1200 s per board on the same machine; a tool that returned nothing inside the cap is shown as timed out. Measured 2026-10-14/16.
| Board | Layers | Connections | Koppar | Freerouting 2.5.0 | tscircuit 0.0.979 | KiCad Routing Tools 0.1.9 | TraceMaker 0.9.0 | Zap! (hosted) |
|---|---|---|---|---|---|---|---|---|
pic-programmerKiCad demos ↗ | 2 | 125 | 100%0 DRC · 8 vias · 6 sFilled vias: 100% · 0 DRC · 6 vias · 6 s · 1 via in a pin pad | 100%5 DRC · 0 vias · 5 s | 100%115 DRC · 15 vias · 12 s | 100%95 DRC · 99 vias · 44 s | 96.8%0 DRC · 3 vias · reached at 33 s of 92 s | 100%0 DRC · 28 vias · 56 s |
rp2040-minimalRaspberry Pi ↗ | 2 | 150 | 100%0 DRC · 116 vias · 5 sFilled vias: 100% · 0 DRC · 83 vias · 6 s · 36 vias in pin pads | 86%4 DRC · 40 vias · reached at 18 s of 61 s | 100%149 DRC · 69 vias · 11 s | 26.67%12 DRC · 12 vias · 127 s | 100%0 DRC · 53 vias · 20 s · 14 vias in pin pads | 100%0 DRC · 52 vias · 22 s |
pico-vgaRaspberry Pi ↗ | 4 | 180 | 100%0 DRC · 96 vias · 8 sFilled vias: 100% · 0 DRC · 92 vias · 6 s · 75 vias in pin pads | 100%8 DRC · 48 vias · reached at 5 s of 11 s | 100%127 DRC · 69 vias · 12 s | 100%222 DRC · 116 vias · 42 s · 25 vias in pin pads | 100%0 DRC · 49 vias · reached at 143 s of 161 s · 21 vias in pin pads | 100%0 DRC · 83 vias · 17 s |
cm5ioRaspberry Pi CM5 IO ↗ | 4 | 431 | 100%0 DRC · 877 vias · reached at 856 s of 887 sFilled vias: 100% · 0 DRC · 831 vias · reached at 724 s of 752 s · 96 vias in pin pads | timed out1200.2 s | no board664.1 s | 50.12%88 DRC · 84 vias · 1208 s · 22 vias in pin pads | 94.9%0 DRC · 412 vias · reached at 1201 s of 1203 s · 34 vias in pin pads | timed out1209 s |
rk3328-som-evbOLIMEX ↗ | 4 | 462 | 100%0 DRC · 359 vias · 46 sFilled vias: 100% · 0 DRC · 333 vias · 22 s · 151 vias in pin pads | 96.54%42 DRC · 245 vias · reached at 195 s of 610 s | 100%403 DRC · 391 vias · 163 s | 43.94%143 DRC · 104 vias · 971 s · 47 vias in pin pads | 100%0 DRC · 272 vias · reached at 1201 s of 1203 s · 88 vias in pin pads | 96.75%0 DRC · 333 vias · 375 s |
scalenode-cm4Antmicro ↗ | 4 | 446 | 100%0 DRC · 428 vias · 79 sFilled vias: 100% · 0 DRC · 459 vias · reached at 404 s of 429 s · 126 vias in pin pads | timed out1200.1 s | 99.1%215 DRC · 368 vias · 77 s | 54.93%156 DRC · 102 vias · 533 s · 33 vias in pin pads | 100%0 DRC · 224 vias · reached at 448 s of 832 s · 41 vias in pin pads | refused the board |
stmp157-som-evbOLIMEX ↗ | 4 | 905 | 100%0 DRC · 1131 vias · reached at 412 s of 484 sFilled vias: 100% · 0 DRC · 1100 vias · 109 s · 341 vias in pin pads | timed out1200.1 s | timed out1413.5 s | 21.66%246 DRC · 196 vias · 1202 s · 34 vias in pin pads | 100%0 DRC · 856 vias · 1203 s · 200 vias in pin pads | 96.24%0 DRC · 840 vias · 892 s |
imx8mp-som-evbOLIMEX ↗ | 4 | 997 | 100%0 DRC · 1429 vias · reached at 1086 s of 1194 sFilled vias: 100% · 0 DRC · 1116 vias · reached at 149 s of 223 s · 379 vias in pin pads | timed out1200.2 s | 100%1052 DRC · 1247 vias · 826 s · 1 via in a pin pad | 30.79%469 DRC · 307 vias · 1203 s · 61 vias in pin pads | 99.3%0 DRC · 795 vias · 1203 s · 200 vias in pin pads | timed out1200.5 s |
Measured 2026-10-14/16, KiCad 10.0.4 as referee, one machine for every tool. Koppar’s time is the whole product path, everything a user’s own board goes through. Freerouting writes its board only when it finishes, so a run past the cap has no board to score. tscircuit, KiCad Routing Tools, TraceMaker and Zap! boards are scored exactly as returned, with any pours they drew refilled. Zap! is a hosted service: its time is the job’s run time on the service, not its queue, and it refused one board whose human design has a footprint outside the outline. Times are when a tool reached the board it returned, beside how long it ran: a router that keeps searching after its best board shows both. Koppar’s cell shows two modes: the first line is its default, which keeps every via out of pin pads, so the board needs no special fab process; the second is its filled-via mode, which lets vias sit in pin pads, for a board ordered with filled and capped vias. Each cell counts the vias a tool left in pin pads.
Method
- The referee
- One pinned KiCad 10 install runs kicad-cli DRC and reads the ratsnest. No tool scores its own output; self-reported completion is recorded but not published.
- The boards
- KiCad demos, Raspberry Pi reference designs, OLIMEX and Antmicro carriers, each under its upstream licence. Each router gets the placement only: tracks, vias and copper pours are removed, and every net, ground included, is the router’s to connect. The design rules are the benchmark’s: one common floor, published per board and applied to every tool and to the referee, so the table measures routing under that floor, not each design’s own constraints.
- The metric
- KiCad airwires. Net-level completion reads high on a board with a stranded pad or a severed pour; the ratsnest does not.
- One configuration
- The same configuration for every board, as for a customer board. No per-board flags for any tool.
What we do not claim
A benchmark is only useful if its limits are stated.
- No human parity. Koppar routes every board here, but the human layout is still better on vias, track length and plane integrity, and TraceMaker drills fewer vias than Koppar on every 4-layer board. Completion and DRC do not score planes: a 4-layer board routed with no ground plane can reach 100% here.
- Each tool was run as shipped, with its defaults and the board’s rules. A tool’s author may know settings that do better; the harnesses are in the open so anyone can rerun them.
- Completion is not quality. Rail sizing, decoupling distance and return paths are not scored yet.
- Eight boards is a small sample. 25 more public open-hardware boards, 2 to 8 layers, are pinned in the benchmark repository; the run on them is coming.
Run it on your own board
The same router and the same route path are online at tools.koppar.ai: upload a placed .kicad_pcb and its .kicad_pro, get it back routed with a KiCad DRC report. A board up to 300 connections needs no account; a larger one, like the four-layer carriers here, takes up to 20 minutes of server time and needs an account API key. The API is one POST away.
Route your own boardBoards, rules, harnesses and results on GitHubcurl -s https://tools.koppar.ai/api/tools/route \
-H 'content-type: application/json' \
-H "Authorization: Bearer $KOPPAR_API_KEY" \
-d "{\"content\": $(jq -Rs . < board.kicad_pcb), \"project\": $(jq -Rs . < board.kicad_pro)}"