Adds narrow_channel.dsn: a keepout wall with a narrow gap positioned off the routing grid, so no grid cell centre falls inside the gap's free centreline. The exact/grid track drops the net (cell quantization can't fit a centreline in the channel); the continuous room track routes it. This is the headline result that continuous free-space beats the grid. Tests: the room router's output is DRC-clean (exact has_violation is None) on simple/crossing/kicad/narrow_channel; it connects simple/crossing (with a via) and all four multi-pin KiCad nets; traces are orthogonal and end on pads; and the continuity contrast asserts exact routes 0 while rooms routes 1, both clean. Oracle-gated connectivity parity on simple/crossing.
freeroute
A native Python PCB autorouter — a Java-free port of the FreeRouting engine.
Why
kicad-mcp currently autoroutes by shelling out to freerouting.jar, which
drags in a JVM dependency. freeroute reimplements the routing engine in
pure Python so the toolchain needs no Java at all.
The contract
The entire integration surface is two Specctra files:
board.dsn ──▶ freeroute ──▶ board.ses
(unrouted) (routed session: traces + vias)
kicad-cli already exports .dsn and imports .ses, so freeroute is a
drop-in replacement for the JAR step — nothing else in the pipeline changes.
Status
Pre-alpha. Under active development. See docs/PORTING_PLAN.md
for the architecture and porting roadmap.
Usage (target)
freeroute board.dsn -o board.ses
Development
uv sync
uv run pytest
uv run ruff check src/ tests/
License
GPL-3.0-or-later, matching the FreeRouting source it is ported from.
Languages
Python
100%