Repository navigation
Releases: DingoOz/TraceMaker
Release list
TraceMaker 0.9.0
TraceMaker 0.9.0 adds routing controls that users asked for and the first contributions from outside the project: plane-aware routing for all-SMD boards, custom KiCad rules in the router, a faster search, a macOS build, and limits on which layers carry tracks.
Results
PCBench, 8 router variants, 120 s per board, judged by KiCad's own DRC (kicad-cli pcb drc). No board has an error added by routing.
| Tier | Boards | 0.9.0 clean | 0.8.0 clean | Freerouting 2.5.0-RC12 (published) |
|---|---|---|---|---|
| A | 40 | 100% | 100% | 100% |
| B | 40 | 72.5% | 70.0% | 50.0% |
| C | 30 | 60.0% | 63.3% | 46.7% |
| D | 22 | 54.5% | 54.5% | 36.4% |
Mean completion is 100%, 97.4%, 97.6% and 96.7% (0.8.0: 100%, 97.2%, 97.5%, 95.3%). Each change in the clean share is one board: tier B gained one, tier C lost one (multisensor_cr2032, one connection short at the time limit; at a fixed work budget that board routes identically before and after the search changes).
Test suite: 165 tests, passing in the release and CPU-only builds.
New
- Layer limits (#6):
--no-tracks-on In1.Cu,In2.Cukeeps new tracks off the named layers while vias still reach the planes;--layer-cost In1.Cu=4makes a layer a last resort. On six 4-layer boards, track on the inner layers goes from 34% to 0%, or to 6% at factor 4. - Plane-aware routing for all-SMD boards (#1, @lucasbstn):
--soft-zones,--keep-vias-off-pads,--via-in-padand--first-nets, all opt-in. - Custom rules in the router (#3, @l3wi):
disallow trackanddisallow viarules by net, net class, type and layer, including blind, buried and micro vias, andphysical_hole_clearance.tracemaker routenames the rules it cannot apply. - Faster search (#3, @l3wi): 1.1 to 1.5 times faster on PCBench boards and about 2.2 times faster on boards whose net classes use name patterns, with identical output on the 48 boards compared.
- macOS build and Metal backend (#2, @l3wi): presets
macos-metalandmacos-cpu. Contributed and measured by its author; the project has no macOS machine or CI job, so it is untested here. - Placement:
tracemaker-place --repair-inputcompares a minimal repair of an illegal input placement instead of the input itself (#3, @l3wi; off by default).
Changed behaviour
- A rule area now blocks tracks when it forbids tracks and vias when it forbids vias, as KiCad reads it. Before, an area that forbade only tracks also blocked vias, and one that forbade only vias blocked nothing.
- Boards with custom
disalloworphysical_hole_clearancerules route differently, because the router now obeys them. Under an unconditionalphysical_hole_clearancerule a track cannot end on a plated pad of its own net, which is how KiCad reports it. - Footprints entirely outside the board outline count as unplaced: placement may move them, and they no longer stretch the inferred outline.
- Results at a time limit can differ from 0.8.0 because the search is faster. Results at a fixed work budget (
--work) with default options were byte-identical on every board compared.
Known limits
- The gates of 0.8.0 are still not met: from-scratch placement (85% against 90%) and dense-package boards (41% clean).
insideAreain a custom rule condition is read as "fully enclosed", where KiCad 10 treats it likeintersectsArea;routewarns about suchdisallowrules but TraceMaker's own DRC can miss them.- A dear layer that cannot be avoided makes that search slower. The Python bindings and the KiCad plugin do not expose the layer options yet.
- The address-sanitizer and thread-sanitizer presets were not run end to end for this release.
- CUDA 12.x is required for the GPU path.
Thanks
To @lucasbstn and @l3wi for the pull requests, and to @charlesh97 for the request behind the layer limits.
TraceMaker 0.8.0
TraceMaker 0.8.0 is the state of the project at the close of its roadmap (milestones M0 to M13). Every roadmap task is either built and measured or closed with the measurement that shows why it was not built.
Results
PCBench, 8 router variants, 120 s per board, judged by KiCad's own DRC (kicad-cli pcb drc). No board has an error added by routing.
| Tier | Boards | TraceMaker clean | Freerouting 2.5.0-RC12 (published) |
|---|---|---|---|
| A | 40 | 100% | 100% |
| B | 40 | 70.0% | 50.0% |
| C | 30 | 63.3% | 46.7% |
| D | 22 | 54.5% | 36.4% |
Test suite: 132 tests, passing in the release and CPU-only builds; the address-sanitizer build reports no memory error.
What is in it
- Routing: exact-geometry lattice router with rip-up and reroute, an eight-variant portfolio, GPU cost-to-go fields with an identical CPU path, escape planning, blind/buried and micro vias, length tuning, coupled differential pairs with twists.
- Placement: analytic placement, legalisation and annealing; routing-aware and ECO modes; from-scratch placement (
tracemaker-place --scratch) for boards whose parts have no placement yet. - Component-aware rules: part recognition, a rule catalogue, keep-outs, and net classes from impedance and current rules (
--component-rules on). - KiCad: native
.kicad_pcbreading and writing with byte-for-byte round trip of untouched content; a DRC that matches KiCad's; an IPC plugin (routing, re-routing, footprint moves, zone refill) checked in a running KiCad 10 GUI; a PCM package; Python bindings. - Determinism: a fixed work budget gives a byte-identical board at any thread count, with or without a GPU.
Fixed in this release
- Copper was routed across Margin-layer lines, which KiCad treats as the board edge.
- Pads without a hole that are listed on both sides were connected on the far side, which KiCad reports as unconnected.
- The DRC took minutes on boards with large zones (vme-wren 730 s, now 7 s; reports byte-identical).
- Failure reasons in the routing report could be stale after restarts.
Known limits
- Gates not met: from-scratch placement gives 85% clean boards on the held-out set against a gate of 90% (M8); 41% of the dense-package boards are clean (M9).
- Not measured: the placement comparison with SA-PCB (M7), and the viewer's frame rate.
- The address-sanitizer preset was not rerun end to end after its slow integration tests were adjusted; the thread-sanitizer preset was not run.
- The plugin's toolbar button after installing through KiCad's package manager was not checked.
- CUDA 12.x is required for the GPU path (the supported cards cannot use CUDA 13).
Documents
roadmap_testing.pdf(attached): every milestone and gate, all 132 tests, every benchmark run, the held-out sets and the experiments behind each decision.report.pdf(attached): design, method and benchmark results (2 October 2026; its tier figures predate this release).tracemaker-0.8.0.zip(attached): the KiCad PCM plugin package. It does not contain the engine; build it from source and pointTRACEMAKERat the binary (seekicad_plugin/README.md).
Licence: GPL-3.0-or-later with a CUDA linking permission.