Benchmarks
Measured on their benchmarks, not ours.
We put PCBKit on the benchmarks other tools publish for themselves, judge it the way they judge themselves and rerun them on our machine where we can. Here are the results, with the date we last checked each one.
The router
Ahead of 12 routers and products, on their own benchmarks.
Every board starts from bare pads. Each tool is measured on the benchmark it publishes for itself and judged the way it judges itself; open-source tools are rerun at their pinned release on our machine, closed ones are compared with their own published numbers.
12
routers and products compared: tscircuit, TraceMaker, Freerouting, KiCadRoutingTools, KRT bus planner (Haas), fastroute, DeepPCB, Quilter, Zap!, PCBWorld PPO, CopperPilot, OrthoRoute
14/14
of their own benchmarks where PCBKit completes more
0
KiCad errors our copper added on DAC 2020, where three other routers added 2,136 to 3,349
2–7×
faster than the open-source routers at the median; 5 s against DeepPCB’s 18 min on its STM32 board
Completed, on each rival’s own benchmark
Share of the benchmark finished, in its own unit and by its own judge.
Time to a routed board
Seconds to the same result, log scale: further left is faster.
TraceMaker’s tiers, medianvs TraceMaker
5× faster
DAC 2020, medianvs TraceMaker
7× faster
tscircuit srj19, medianvs tscircuit
3× faster
tscircuit srj18, medianvs tscircuit
2× faster
STM32 board, one runvs DeepPCB
216× faster
Vias the rival needs for each of ours
On the boards both complete. A via is a hole to another layer: each costs room, money and signal quality.
1× = as many as PCBKit
KiCad errors the routing added
DAC 2020’s 11 boards, every router rerun on our machine at 120 s, judged by KiCad 10’s design-rule check.

Every comparison, named.
| Rival | Its own benchmark | PCBKit | The rival | Judge |
|---|---|---|---|---|
| tscircuitopen-source autorouterAhead | its 5 dashboard datasets, 511 problems: 1 thread, 360 s, its 0.1 mm rule | 497 / 511 clean: 85, 16, 200, 186, 102–3× faster at the median | 453 / 511: 85, 16, 183, 159, 10 | its own DRC, unmodified |
| TraceMakeropen-source autorouterAhead | its own PCBench tiers A–D, 132 boards, 120 s | 103 clean (40 / 34 / 19 / 10)it uses 1.78× our vias; 2.6 s vs 11.8 s | 95 clean (40 / 29 / 17 / 9) | KiCad 10 DRC (its rule) |
| Freeroutingopen-source autorouterAhead | its own nightly tiers A–C, 1,028 boards | 961 clean (447 / 476 / 38)trails by 5 on tier A | 940 clean (452 / 454 / 34), 2.6.0-RC5 | its checker (its row) / KiCad 10 DRC (ours) |
| KiCadRoutingToolsopen-source autorouterAhead | its own stress corpus, 472 boards in 5 tiers, 120 s | 276 solvedit uses 3–5× our vias | 83 solved | KiCad DRC |
| KRT bus planner (Haas)research planner (arXiv 2610.35601)Ahead | its own H3 DDR3 bus, 51 nets, at its rules | 0 open, 78 vias, 1,189 mm (6 of 6 seeds)pairs less coupled: 0.57 vs ~0.9 | 0 open, 80 vias, 1,262 mm | its own grader |
| KRT bus planner (Haas)research plannerAhead | its own Zynq-7020 DDR3 bus, 47 nets | 1 open, 85 viasmore vias | 2 open, 72 vias | its own grader |
| fastrouteopen-source autorouterAhead | DAC 2020: 11 boards it reports on | 9 / 11 clean | 1 / 11 | KiCad 10 DRC, 120 s |
| DeepPCBAI routing serviceAhead | its own comparison: STRF, PocketBeagle, BeagleConnect Freedom | 100 / 100 / 100 %more vias on Freedom: 241 vs 191 | 99 / 96 / 97 % | connections complete (theirs); KiCad 10 DRC (ours) |
| DeepPCBAI routing serviceAhead | its Smart MCU STM32 showcase | 211 / 211 from bare pads, 5 s | 210 / 210 from a partly routed board, 18 min | KiCad 10 DRC |
| QuilterAI layout serviceAhead | the same three boards (DeepPCB’s table) | 100 / 100 / 100 % | 94 / 82 / 87 %, vias 58 / 163 / 235 | connections complete |
| Zap!AI routerAhead | its own 25-board scoreboard, 60 min, 1 core | 19 connected, 59 unrouted, 0 shorts, 83 errorsahead on every column | 16 connected, 68 unrouted, 0 shorts, 156 errors | KiCad 10 DRC after refill (its judge) |
| PCBWorld PPOresearch (LG AI Research)Ahead | 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) | its own evaluator |
| CopperPilotAI layout projectAhead | its own 8-layer Jetson camera carrier | complete, 0 errors, 476 vias, 223 s | 617 vias, 22 days | KiCad 10 DRC |
| OrthoRouteopen-source GPU routerAhead | its own 1,088-net backplane | complete from bare pads, 0 shorts, 0 errors, 373 s | its routed board: 105 unconnected, 199 shorts | KiCad 10 DRC |
Where we still trail.
- Freerouting tier A. 447 against 452 of 452 boards; on 3 of the 5, KiCad flags any track to the pads (copper text over them, a mask opening of another net, a stated minimum width above every class).
- DeepPCB’s BeagleConnect Freedom vias. 241 against 191 (theirs at 97 % of the connections, ours at 100 %).
- Zynq bus vias and pair coupling. 85 vias against the planner’s 72; differential pairs coupled less than its ~0.9 on both bus benches.
- The designers. 1,055 of 1,157 PCBench boards complete from bare pads against their 1,149.
Against people
Shorter copper than the designers.
PCBench is 1,157 boards people designed and routed by hand. We strip each to bare pads, route it again and judge both boards with KiCad’s own rules check.
0.88×
the designer’s track length, on the 1,049 boards both complete; shorter on 97 % of them
0.90×
the designer’s vias on the same boards
1,055/1,157
boards complete from bare pads, judged by KiCad after a refill
Where people still win. The designers complete 1,149 of these boards and we complete 1,055; most of the rest are a few connections short. Closing that gap is the router team’s first goal.
Agents
An agent’s board, finished on the first try.
We test the whole flow the way a person uses it: a real coding agent (Codex) with the PCBKit plugin installed gets one sentence, a wish like “a USB-C CO₂ monitor with a display” and works alone. The 20 wishes of the sealed set were written for the test and nobody on the team has read them, so nothing can be tuned to them.
12/20
held-out wishes finished on the first try: placed, routed and verified with no errors
18/20
first designs the agent wrote that compile as they are
47
tool calls a board, median
8min
from the wish to the verified board, median (462 s on a shared host)
The first clean sealed run, 1 November 2026. Our goal is 20 of 20, under a minute and ten calls a board: see the roadmap.
Speed and fidelity
Fast in a browser tab, faithful to KiCad.
One Rust core runs natively and in WebAssembly and gives the same answer in both. A board opened from its link draws its first frame in ~1 s on a phone (a 4G profile, a CPU four times slower than a laptop’s; 11.5 s a day earlier).

96.1%
of 482 curated public KiCad boards import and export with every pad and every connection confirmed by an independent checker
232/235
human-designed boards where pour connectivity after a refill matches the independent checker
4–26ms
from an edit to the board on screen, on boards up to 6 MB, in the browser
10µm
every one of 2,821 silkscreen texts on 46 boards lands within 10 µm of KiCad’s own plot
| Board | 1 thread | 12 threads |
|---|---|---|
| USB boardcomplete, 4 vias | 6.2 s | 2.0 s |
| MCU board, 20 netscomplete, 23 vias | 13.8 s | 4.4 s |
| Motor controller, 63 parts, 4 layerssame copper either way | 86.0 s | 28.5 s |
How we measure
The rules we hold ourselves to.
- 01
Their benchmark
Each tool on its own dataset, judged its own way. We never pick a set that suits us.
- 02
An outside judge
KiCad’s design-rule check with each board’s rules, or the benchmark’s own checker.
- 03
Rerun here
Open-source rivals rerun at their pinned release on the same machine, beside their published row.
- 04
One command a row
Every row reruns with one command; machine, threads and commit are recorded.
- 05
Separate teams
The team that measures does not tune the router; a guard reruns the rows before router changes land.
How we verify boardsWant a row rerun in front of you? Write to support@pcbkit.io.
How it routes
Six ideas, all on by default.
Routing is a hard search: thousands of connections competing for the same few millimetres. Here is how PCBKit solves it in seconds, on a laptop, inside a browser tab.
Negotiate
All nets are routed at once, overlapping at first. Each pass makes contested space more expensive, until no two nets share it. The search grid has eight directions and spans every layer.
Exact where it counts
The grid guides the search, but every clearance is checked against exact geometry, to a fraction of a micron. Fine-pitch escapes with zero slack still fit.
Search the neighbourhood
Next it rips up a window around whatever is still unrouted, routes it again and keeps the result if it is better. Eight candidate states are searched side by side.
Pours, live
Copper pours are modelled while routing: the fill, the clearance around other nets, islands and thermal spokes. The router knows which pads a pour actually connects.
Pad access as a set
A pad on a dense part gets up to eight exact, full-width exits. Neighbouring pads negotiate for them instead of each getting a fixed stub.
Respects the mask
It knows where the solder mask opens, which vias are untented and where thin mask webs sit between pads, and routes so the fab can keep them.