π v0.18.2 is out β 25% less nets unrouted, 3Γ fewer real DRC errors, half the memory on big boards #425
drandyhaas
announced in
Announcements
Replies: 2 comments
|
it really seems like you never sleep and make improvements that normally take months in days π₯ |
0 replies
|
Fable doesn't get tired, it just runs out of usage. :) |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Hey everyone! π
New release β v0.18.2. Where 0.18.0 made the router honest about your netclass clearances, 0.18.2 is about finishing more of your board β and being honest about the rest. Across our 75-board stress corpus this release completes 25% more of the previously-unfinished nets (329 β 247 incomplete), cuts real DRC violations on routed copper by more than 3Γ (123 β 39), and routes large sparse boards (looking at you, split keyboards) in roughly half the memory.
π¦ How to get it: download KiCadRoutingTools-0.18.2.zip from the Releases page, then in KiCad open Plugin and Content Manager β Install from Fileβ¦ and pick that zip. Prebuilt router binaries for Linux/macOS/Windows are on the release too β
python build_router.pyfetches them automatically, no Rust toolchain needed.π More nets actually finish now
A stack of connectivity fixes, all on by default:
π§· A manufacturability class you couldn't see before
We found (and fixed) a subtle hazard: a track could terminate on the corner of a pad β electrically connected, DRC-clean, but joined only through a copper sliver thinner than your minimum track width. That joint can etch open at the fab. 0.18.2 both detects this class (
check_weird+ KiCad's ownconnection_widthcheck in our grading) and repairs it during cleanup by adding a short, clearance-checked connector into the pad β your routed track is never moved.Also in the correctness bucket: custom pads with stroked primitives (rings, complex RF pads) now resolve to their true copper size (they were under-modeled by the stroke width), and a rescue-pass edge case that could drop a via on copper it couldn't see is fenced off for good.
π§ Half the memory on big sparse boards
The Rust router (now 0.18.2) stores all permanent board geometry β edges, cutouts, everything immutable β in a compact bitmap instead of per-cell hash maps. Obstacle-map memory drops ~60β66%, and the worst case in our corpus (a split keyboard whose fine-grid retry previously ballooned past 8 GB and died) now completes its whole chain in under 5 GB. Routing results are bit-for-bit identical β we verified down to the exact A* iteration counts. A memory-allocator tweak also makes long runs return freed memory to the OS promptly, and the KiCad-oracle connectivity check that could take 10+ minutes on some boards now takes seconds.
π Better failure reporting
When something doesn't route, the JSON summary now tells you why, per net and per diff pair: the failure stage, a reason code (congestion, no escape path, pose-router failure, β¦), which copper blocked it, and what the rescue/reconciliation passes tried. If you use the AI planning tab or the
/diagnose-routing-failuresskill, they consume all of this automatically.A note on honesty, continued: 0.18.0's "no rewritten design rules" policy means KiCad DRC now shows real rule violations on boards that were planned with a single flat clearance tighter than their netclasses β those were always there, just hidden before. The fix is re-planning those boards with per-class clearances (the AI planning tab's tune mode does this); the router itself already respects your classes. And on extremely saturated boards, finishing deferred pair members early can occasionally trade away a coupled route β we track that as a known follow-up.
As always, bug reports and feedback are hugely welcome β open an issue or just reply here. Happy routing! π
All reactions