← Back to the article

Benchmark · 16 October 2026

Router comparison: method and full results

Five open-source PCB autorouters, plus the hosted Zap!, on 26 routing jobs across 11 public KiCad boards. This page has everything behind the article: how runs were judged and scored, the machine and settings, and the result of every case.

5open-source routers
11public KiCad boards
26cases in 4 tasks
390scored runs
2audits

Watch every case

Pick a task and a board. Each router's copper appears over its real route time, beside its vias, track length and verdict. Click any case in the tables below to load it here.

Every case

A case is valid for a router when all three of its runs pass. Green cells are valid; red cells show what went wrong. Each cell gives the median route time, vias and track length over the three runs. Zap!'s results are provisional and use the repeats checked so far. Click a case to watch it.

Whole board

Route every connection from placed parts. All tracks, vias and copper zones removed first.

Case drandyhaas/KiCadRoutingTools 6/6 valid TraceMaker 6/6 valid fastroute 6/6 valid fab_router 3/6 valid Freerouting 5/6 valid Zap! 6/6 valid
valid 3/3 1.9 s
5 vias · 377 mm
valid 3/3 1.3 s
0 vias · 354 mm
valid 3/3 0.7 s
0 vias · 367 mm
valid 3/3 0.7 s
12 vias · 353 mm
valid 3/3 3.1 s
0 vias · 367 mm
valid 2/2 4.3 s remote
valid 3/3 2.2 s
15 vias · 738 mm
valid 3/3 5.9 s
4 vias · 717 mm
valid 3/3 0.8 s
1 vias · 755 mm
2 open 0/3 9.8 s valid 3/3 3.5 s
0 vias · 749 mm
valid 3/3 6.9 s remote
valid 3/3 4.8 s
51 vias · 1519 mm
valid 3/3 57 s
34 vias · 1458 mm
valid 3/3 1.2 s
35 vias · 1529 mm
3 open 0/3 1.9 s valid 3/3 6.2 s
27 vias · 1575 mm
valid 2/2 8.9 s remote
valid 3/3 5.7 s
27 vias · 853 mm
valid 3/3 18 s
23 vias · 802 mm
valid 3/3 1.4 s
9 vias · 903 mm
valid 3/3 1.2 s
59 vias · 828 mm
valid 3/3 7.2 s
5 vias · 944 mm
valid 2/2 6.7 s remote
valid 3/3 4.3 s
30 vias · 764 mm
valid 3/3 33 s
33 vias · 824 mm
valid 3/3 1.6 s
18 vias · 859 mm
5 open 0/3 3.5 s valid 3/3 9.7 s
16 vias · 847 mm
valid 2/2 7.7 s remote
valid 3/3 2.6 s
7 vias · 416 mm
valid 3/3 2.5 s
4 vias · 397 mm
valid 3/3 0.8 s
3 vias · 449 mm
valid 3/3 0.7 s
27 vias · 387 mm
1 open 0/3 4.7 s valid 2/2 4.3 s remote
Reroute after an edit

On a routed board, remove the copper of one net (small), all nets of one part (medium) or a connector-sized group (large), then reconnect it without touching anything else.

Case drandyhaas/KiCadRoutingTools 7/9 valid TraceMaker 5/9 valid fastroute 3/9 valid fab_router 6/9 valid Freerouting 2/9 valid Zap! 5/9 valid
valid 3/3 3.2 s
13 vias · 1546 mm
valid 3/3 5.2 s
3 vias · 1496 mm
1 open 0/3 1.7 s valid 3/3 2.7 s
41 vias · 1522 mm
1 open 0/3 6.2 s valid 2/2 6.9 s remote
valid 3/3 1.5 s
1 vias · 1505 mm
valid 3/3 1.5 s
0 vias · 1493 mm
valid 3/3 0.7 s
0 vias · 1494 mm
valid 3/3 0.9 s
1 vias · 1484 mm
valid 3/3 3.2 s
0 vias · 1494 mm
valid 2/2 4.9 s remote
valid 3/3 1.6 s
0 vias · 1502 mm
valid 3/3 1.3 s
0 vias · 1493 mm
1 open 0/3 0.9 s valid 3/3 0.7 s
2 vias · 1498 mm
1 open 0/3 4.3 s valid 2/2 5 s remote
1 error 0/3 9.8 s 1 error 0/3 9.1 s 1 open 0/3 1.7 s 1 open 0/3 0.9 s 2 open 0/3 8.9 s 1 open 0/2 22.8 s remote
valid 3/3 3.2 s
21 vias · 480 mm
2 open 0/3 1.6 s valid 3/3 0.7 s
14 vias · 491 mm
valid 3/3 0.8 s
20 vias · 473 mm
valid 3/3 3.5 s
14 vias · 491 mm
2 open 0/2 15.6 s remote
1 error 0/3 2.9 s 1 error 0/3 1.3 s 1 error 0/3 0.7 s 2 errors 0/3 0.7 s 1 error 0/3 3.5 s valid 2/2 13.7 s remote
valid 3/3 3.6 s
27 vias · 520 mm
valid 3/3 1.6 s
31 vias · 502 mm
2 open 0/3 1.2 s valid 3/3 0.9 s
26 vias · 562 mm
1 open 0/3 4.8 s valid 2/2 7.1 s remote
valid 3/3 2.1 s
23 vias · 533 mm
valid 3/3 1.3 s
23 vias · 533 mm
valid 3/3 0.7 s
23 vias · 534 mm
valid 3/3 0.7 s
27 vias · 532 mm
1 open 0/3 4.7 s invalid 0/2 6.5 s remote
valid 3/3 2.0 s
23 vias · 533 mm
2 open 0/3 2.1 s 1 open 0/3 0.9 s 1 open 0/3 3.1 s 1 open 0/3 5.5 s 2 open 0/2 6.5 s remote
Power widths

Route the whole board while giving power nets their required track widths.

Case drandyhaas/KiCadRoutingTools 4/5 valid TraceMaker 4/5 valid fastroute 4/5 valid fab_router 2/5 valid Freerouting 4/5 valid Zap! 5/5 valid
valid 3/3 2.1 s
5 vias · 378 mm
valid 3/3 1.3 s
0 vias · 354 mm
valid 3/3 0.7 s
0 vias · 369 mm
valid 3/3 0.7 s
12 vias · 354 mm
valid 3/3 3.1 s
0 vias · 367 mm
valid 2/2 4.4 s remote
valid 3/3 3.4 s
12 vias · 737 mm
valid 3/3 5.7 s
5 vias · 707 mm
valid 3/3 0.7 s
0 vias · 751 mm
2 open 0/3 12 s valid 3/3 3.4 s
0 vias · 749 mm
valid 3/3 7.7 s remote
valid 3/3 5.0 s
8 vias · 788 mm
valid 3/3 6.2 s
0 vias · 794 mm
valid 3/3 1.0 s
0 vias · 826 mm
valid 3/3 1.9 s
40 vias · 845 mm
valid 3/3 3.5 s
0 vias · 829 mm
valid 2/2 6.7 s remote
valid 3/3 7.0 s
29 vias · 1634 mm
valid 3/3 12 s
2 vias · 1529 mm
valid 3/3 1.2 s
2 vias · 1557 mm
3 open 0/3 6.6 s valid 3/3 5.5 s
5 vias · 1558 mm
valid 3/3 9.2 s remote
1 error 0/3 5.3 s 3 errors 0/3 2.6 s 1 open 0/3 1.1 s 1 open 0/3 1.6 s 6 open 0/3 5.5 s valid 2/2 5.2 s remote
Keep a ground pour

Route the whole board without changing its existing ground pours; the pour must stay connected.

Case drandyhaas/KiCadRoutingTools 3/6 valid TraceMaker 3/6 valid fastroute 3/6 valid fab_router 2/6 valid Freerouting 1/6 valid Zap! 3/6 valid
valid 3/3 2.4 s
4 vias · 252 mm
valid 3/3 1.5 s
0 vias · 244 mm
valid 3/3 0.8 s
0 vias · 248 mm
valid 3/3 0.8 s
9 vias · 240 mm
valid 3/3 3.2 s
0 vias · 252 mm
1 error 0/2 5 s remote
10 errors 0/3 9.6 s valid 3/3 34 s
7 vias · 481 mm
valid 3/3 1.3 s
3 vias · 578 mm
6 open 0/3 14 s 2 open 0/3 6.5 s valid 2/2 9.4 s remote
valid 3/3 5.4 s
28 vias · 497 mm
2 open 0/3 11 s 2 open 0/3 1.3 s 1 error 0/3 1.0 s 1 open 0/3 7.2 s 1 open 0/2 13.8 s remote
1 error 0/3 3.0 s 1 open 0/3 2.8 s 1 open 0/3 0.8 s valid 3/3 0.8 s
14 vias · 224 mm
1 open 0/3 3.6 s valid 2/2 5.8 s remote
3 open 0/3 45 s 6 open 0/3 48 s 9 open 0/3 7.1 s 15 open 0/3 44 s 10 open 0/3 15 s 5 open 0/2 64.5 s remote
valid 3/3 2.6 s
6 vias · 346 mm
valid 3/3 3.1 s
17 vias · 264 mm
valid 3/3 0.9 s
15 vias · 295 mm
1 open 0/3 1.2 s 1 open 0/3 4.3 s valid 2/2 4.9 s remote

Ranking and scores

Ranked by valid cases, then Efficient, then Fast. Scores are out of 100, computed per case among routers with a valid board, then averaged over each router's valid cases where at least two routers were valid. Each router's value on a case is its median over three runs.

RouterValid casesEfficientFastFast (CPU time)Busy cores
drandyhaas/KiCadRoutingTools 20/26 70 32 24 0.85
Zap!* 19/26 — — — —
TraceMaker 18/26 87 30 15 3.07
fastroute 16/26 91 98 95 1.51
fab_router 13/26 66 93 93 0.94
Freerouting 12/26 95 21 4 3.54

Efficient

50 × (fewest vias + 1) / (vias + 1) + 50 × shortest length / length

The router with the fewest vias and shortest track on a case scores 100.

Fast

100 × fastest time / time

Full path from KiCad input to KiCad output, including any file conversion. Twice as slow as the fastest scores 50.

Fast (CPU time)

100 × least CPU seconds / CPU seconds

Same, counting CPU time sampled every 100 ms, so extra cores do not help. Not part of the ranking.

* Zap! is hosted and closed-source. Provisional: 55 of 78 runs checked, paused at the service's daily job limit. It has no scores: its time is measured on a remote server, and it was judged with checker v4.4, which also allows router-added pours on boards that start with none. Rechecking all 390 open-source runs with v4.4 changed no verdict. On the same 55 runs: drandyhaas/KiCadRoutingTools 43 valid, Zap! 41, TraceMaker 39, fastroute 35, Freerouting 27, fab_router 26.

How runs are judged

Connected

No missing connections, measured by KiCad 10.0.6's own connectivity check.

No new errors

No KiCad DRC errors beyond the input board's own. Every input starts with zero errors.

Board unchanged

Footprints, pads, nets, outline, layers, design rules and project settings identical to the input.

Task respected

Reroutes keep all other copper exactly. Pour tasks keep zone outlines, nets and priority, and the ground stays connected after a refill.

Every router gets the same rules and the same checker, and every verdict reproduces in plain KiCad DRC. Before the study, every case was shown to have at least one valid board: a router's output, the original human routing, or a small hand repair. Three runs per case are repeats for timing and consistency, not different boards; no router ever split a verdict across its three runs.

Environment

Machine
Intel i9-14900HX, 32 logical CPUs, 30 GB RAM
OS
Ubuntu 24.04, Linux 6.8
Checker
KiCad 10.0.6 (connectivity and DRC)
Scheduling
One run at a time; no CPU pinning
Time limit
None, apart from a 60-minute safety stop for hung runs
Threading
Each router's own default, so compute is not equal. Average busy cores in the ranking table
Run days
273 runs on 9 October, 117 reruns on 12 October 2026
Settings
Tuned per router and task on separate boards, then frozen before scoring

Routers and settings

RouterVersionReads the board asKey settingsThreading
drandyhaas/KiCadRoutingTools 0.23.0 (9399bfb) KiCad file directly 0.05 mm grid (0.1 mm for pours); smoothing off; keeps input copper Runtime default (no override)
TraceMaker 0.9.0 CPU build (24c8477) KiCad file directly No GPU, no learned state between runs; via cost 3 mm; soft zones for pours 8-thread portfolio by default
fastroute 0.1.13 Specctra DSN export Enhanced default mode; neckdown off; one start; up to 100 passes; fanout off Parallel autorouter on all cores
fab_router 69cf598 Specctra DSN export Up to 100 passes; fanout off; no neck-down; strict DRC on for pours Synchronous; no worker override
Freerouting 2.5.0 Specctra DSN export Up to 100 passes; neckdown and fanout off; analytics off; JDK 25 Optimizer pool of 31 threads

Routers that read a Specctra DSN export cannot see KiCad's thermal-relief or zone-priority rules; pours are refilled natively after routing. Coupled differential pairs were not exercised: the only pair case had no provable valid board and was removed.

Boards

All boards are public, openly licensed 2-layer KiCad projects, used unchanged apart from removing copper for each task and, for power-width cases, declaring the required widths.

Audits

Stale pour shapes

Our checker judged reroutes against old pour shapes. Fixed; 30 runs that should have passed now pass.

A rule stricter than KiCad

An extra width rule of ours failed fastroute 27 times. Dropped, so KiCad's own rules decide.

Setup fixes

A TraceMaker pre-check crash and duplicate zone IDs fixed; two router settings corrected and rerun.

Final check

A second audit reproduced all 237 passes and 153 fails in plain KiCad DRC, and the scores recompute exactly.

Limits