Blog ·
Autorouter benchmark: ahead of 12 routers on their own tests
Sergey Alekseev
This is an autorouter benchmark with one rule: every PCB router we compare against is measured on the benchmark it publishes for itself, judged the way it judges itself. Twelve routers and products are in the table below: open-source autorouters, research planners and AI layout services. On all 14 of their benchmark rows PCBKit comes out ahead by the benchmark’s own measure. It still trails on vias in places, on Freerouting’s tier A and on pair coupling; those rows are below too.
Why each router gets its own benchmark
A shared test set is easy to choose in your own favour. So we do not choose one. Zap! is measured on Zap!’s 25-board scoreboard, TraceMaker on TraceMaker’s tiers, Freerouting on its own nightly fixtures, tscircuit on its dashboard datasets, KiCadRoutingTools on its stress corpus, DeepPCB and Quilter on the three boards they compared themselves on. The decision is written down as an ADR: a public benchmark runs with its own data chain and its own judge code, read in place outside our repository, never reimplemented. Our router gets the problem file as the benchmark ships it and returns a board file as the product writes one. There is no per-board setting and no pin swap. The time limit is the suite’s.
The judge is KiCad 10’s design rule check with each board’s own rules where the rival names KiCad, otherwise the rival’s own checker, unmodified. Open-source rivals are rerun at a pinned release on the same machine as ours, with their published row beside the rerun. Closed services are compared with the numbers they published. Every row reruns with one command. The team that measures does not tune the router: a regression guard reruns the rows before router changes land.
A board routed from bare pads, replayed from the router’s own recording.
The results, row by row
Every board starts from bare pads: tracks, vias and fills removed, placement and pour outlines kept.
| Rival | Its own benchmark | PCBKit | The rival |
|---|---|---|---|
| tscircuit | 5 datasets, 511 problems, 1 thread, 360 s, its DRC | 497 / 511 clean | 453 / 511 |
| TraceMaker | its tiers A to D, 132 boards, 120 s, KiCad 10 DRC | 103 clean (40 / 34 / 19 / 10) | 95 clean (40 / 29 / 17 / 9) |
| Freerouting | its nightly tiers A to C, 1,028 boards | 961 clean (447 / 476 / 38) | 940 clean (452 / 454 / 34), 2.6.0-RC5 |
| KiCadRoutingTools | its stress corpus, 472 boards in 5 tiers, 120 s | 276 solved | 83 solved |
| KRT bus planner (Haas) | its H3 DDR3 bus, 51 nets, its grader | 0 open, 78 vias, 1,189 mm (6 of 6 seeds) | 0 open, 80 vias, 1,262 mm |
| KRT bus planner (Haas) | its Zynq-7020 DDR3 bus, 47 nets | 1 open, 85 vias | 2 open, 72 vias |
| fastroute | DAC 2020, the 11 boards it reports on | 9 / 11 clean | 1 / 11 |
| DeepPCB | STRF, PocketBeagle, BeagleConnect Freedom | 100 / 100 / 100 % | 99 / 96 / 97 % |
| DeepPCB | its Smart MCU STM32 showcase | 211 / 211 from bare pads, 5 s | 210 / 210 from a partly routed board, 18 min |
| Quilter | the same three boards (DeepPCB’s table) | 100 / 100 / 100 % | 94 / 82 / 87 % |
| Zap! | its 25-board scoreboard, 60 min, 1 core | 19 connected, 59 unrouted, 0 shorts, 83 errors | 16 connected, 68 unrouted, 0 shorts, 156 errors |
| PCBWorld PPO (LG AI Research) | PCBWorld-Bench D3-A / D3-B / D3-C, 20 rollouts | completion 1.00 / 1.00 / 1.00 | PPO 0.94 (D3-A); Freerouting 0.78 (D3-B) |
| CopperPilot | its 8-layer Jetson camera carrier | complete, 0 errors, 476 vias, 223 s | 617 vias, 22 days |
| OrthoRoute | its 1,088-net backplane | complete from bare pads, 0 shorts, 0 errors, 373 s | its routed board: 105 unconnected, 199 shorts |
The machines are AWS Graviton4 hosts, each board on the threads its benchmark allows. TraceMaker’s tiers and DAC 2020 ran at 120 s and 8 threads on an idle c8g.8xlarge. tscircuit’s sets ran by its protocol, 1 thread and 360 s per problem, on an idle c8g.8xlarge. Zap!’s scoreboard ran at 3,600 s and 1 thread per board on a c8g.16xlarge. The DeepPCB rows are 3 seeds of 600 s on 4 threads. The bus planner rows run at a fixed work budget (400 M units), so the copper does not depend on the load of the host.
CopperPilot’s 22 days is the calendar time of a project, so it appears in the table and nowhere in
the speed comparison. OrthoRoute needs a GPU and was not rerun here: the comparison
is with the routed board in its own repository. The H3 and Zynq rows are the planner’s own task
(the bus routed, every other track fixed) at its rules, graded by its own awx/grade_k.py, which
reproduces the human board’s 88 vias and 1,337 mm. Its paper is
arXiv 2610.35601.
Vias, track length and KiCad errors on the same boards
A completion win that costs extra vias or new errors should be visible, so on the rows where the judge allows it we compare copper on the boards both routers complete. The rival’s vias for each of ours: 3.48 times on KiCadRoutingTools’ medium tier, 2.08 on tscircuit’s srj19, 1.91 for TraceMaker on DAC 2020 and 1.78 on TraceMaker’s own tiers. Track length is level (1.01 times against TraceMaker, 1.02 to 1.03 against KiCadRoutingTools).
On DAC 2020’s 11 boards our copper added 0 KiCad errors. TraceMaker also added 0. KiCadRoutingTools added 2,136, fastroute 2,741 and Freerouting 3,349. Time to a routed board, at the median of the boards each router completes: 2.6 s against TraceMaker’s 11.8 s on its tiers, 3.6 s against 24.0 s on DAC 2020, 3.2 s against tscircuit’s 9.8 s on srj19 and 8.7 s against 18.4 s on srj18.
Where PCBKit’s router still trails
On Freerouting’s tier A we complete 447 of 452 boards against Freerouting’s 452. Four of the five misses are one class: our pin-access model decides a pad on a two-layer board is walled in where the designer and Freerouting both reach it. The fifth (HID_PID_controller) states a 6.45 mm minimum track width above every width it uses; our importer obeys it. We are ahead on tiers B and C.
On DeepPCB’s BeagleConnect Freedom we use 241 vias against DeepPCB’s 191 (ours at 100 % of the connections, theirs at 97 %). Our first complete there took 323 s on 4 threads, against DeepPCB’s “1 to 2 min”.
On the bus planner’s Zynq bench we leave one lane open against its two, with 85 vias against its 72 and 2 to 3 % more length. On both bus benches our differential pairs are coupled over 0.57 of their length at best, against about 0.9 for the planner and the designer. Pairs laid into a field the single lanes already took are the cause. Coupling is the next metric to win.
On KiCadRoutingTools’ hard tier our routing adds 981 KiCad errors on 15 boards. Those boards count as not complete; the errors are still ours. Given 30 minutes on the 40 boards it left unsolved at 120 s, KiCadRoutingTools leaves fewer open connections than us on 3 of them. Its monster tier is 0 of 10 for both routers.
Then there are the designers. PCBench is 1,157 boards people routed by hand. Routed again from bare pads, PCBKit completes 1,055 of them; the designers completed 1,149. On the 1,049 boards both complete, our tracks are 0.88 times the designer’s length (shorter on 97 % of them) with 0.90 times the vias. Most of the 100 boards we leave open are a few connections short (a median of 5 unconnected in KiCad’s count). On tier D we place more vias than the designers (2,615 against 1,898).
Routers we could not measure
Some rivals publish no benchmark we can run. Quilter’s large public project sits behind an e-mail form. DeepPCB’s other comparison boards are private. Flux, Cadence Allegro X AI, Altium Situs, Siemens Xpedition and other commercial routers publish no numbers; their licences decide what may be published. PCB Gym and PCBInnoBench have not released their task files. Each is listed in our benchmark record with what it would take to add it.
The live table with the date each row was last checked is on the benchmarks page. How the router finds its routes is in the same page’s last section. The earlier sweep over our own library of open boards is in Routing 1,554 open boards in under a minute. How we check the boards themselves, beyond routing, is on verification.