fab_router
PCB autorouter in TypeScript for the FabPlane toolchain: SPECCTRA DSN in, SES out, with rip-up, fanout, push-and-shove, a gridless detailed router and a monotone optimizer. Carries a never-add-a-DRC-violation invariant and MCP-friendly adapters.
What it does and how it connects
fab_router is a PCB autorouter for the FabPlane toolchain, in TypeScript for Bun. It reads SPECCTRA DSN, checks DRC and connectivity, routes multilayer boards with vias, rip-up, fanout, push-and-shove, a gridless detailed router (line-search plus corner-stitch tiles) and a monotone optimiser, writes and applies SES, and drives the tscircuit SimpleRouteJson adapter as a second input. An off-by-default two-phase global-planning subsystem is included.
Its stated invariant R-1 is that it never adds a DRC violation, on any board at any setting. Milestones M0 to M10 are complete. Acceptance stated in the README: 401 non-routing cases pass, all feature routing cases (4- and 6-layer, plane layers, strict-DRC, item caps, DAC bm08) pass to their bounds, and the tscircuit SimpleRouteJson boards pass their hard metrics. The README reports 857 tests passing.
The README is also explicit about the completion frontier: on about 12 of the densest routing cases the router completes fewer nets than the best-known baseline, with zero added violations throughout, established from four independent directions. Closing it would need a deep reworking of the core routing algorithm or a topological and rubber-band router, both large and uncertain.
Alternatives
Compare side by side- DeepPCB
A cloud routing service for an already placed board, rather than an open autorouter in the FabPlane toolchain.
- TraceMaker
A tool that routes and places an existing KiCad .kicad_pcb file, rather than a SPECCTRA DSN to SES autorouter.
- kicad-mcp (blwfish)
An MCP server that lets an agent drive a full KiCad workflow including FreeRouter autorouting, rather than a standalone autorouter.
Recurring errors it addresses
Error Index entries this tool is built to reduce or work around.
- Interactive routing creates unwanted micro-segments and awkward paths that take time to clean up.Error Index
- KiCad lets a differential pair couple tighter than board clearance through a custom rule scoped to coupled pairs. This auto-router marks that rule unsupported and raises the pair gap to the net-class clearance instead; on thin dielectrics a 90 to 100 ohm pair needs a gap below board clearance, so the routed pair comes out at a different impedance than specified.Error Index
- Seven agent placement attempts on the 465-part TimIQ RF board produced six bolted-on workarounds, and even the first legal placement left 39 unrouted and 49 broken nets with power in the middle of the RF area.Error Index
Sources
Not verified
- Pricing: none stated on the repo; use is governed by the GPL unless the user holds a FabPlane commercial licence.
- No independent user voice found: recent repo activity is maintainer pull requests.
- No GitHub releases exist, so latest release fields are null.
- License: the GitHub API reports NOASSERTION, but the LICENSE file states a dual licence, GPL-3.0 OR a FabPlane Inc commercial licence, so that is recorded from the file. The catalog label open-source is consistent with the GPL leg.
- Thin source: 0 stars and no user issues; the entry rests on the README and the repo record.
Last verified November 6, 2026. Listings are informational. The evidence score measures public, verifiable evidence and is not an endorsement or a compatibility claim.