Skip to content

Command line

Every option of every program, as its own --help prints it. This page is generated from the build, so it is what the code accepts; the README's Common tasks table says which options to reach for first.

tracemaker

TraceMaker: placement-aware PCB autorouter for KiCad


tracemaker [OPTIONS] SUBCOMMAND


OPTIONS:
  -h,     --help              Print this help message and exit

SUBCOMMANDS:
  version                     Print the version
  gpu-info                    List GPU devices and their available memory budget
  inspect                     Read a .kicad_pcb and print a summary
  rules                       Detect component categories and report the component-aware layout
                              rules (doc 15)
  drc                         Check a board against its KiCad design rules
  route                       Route all unrouted connections of a board
  escape                      Escape feasibility of dense packages: pins that cannot leave
                              their package under the board's rules
  pairs                       Differential pairs of a routed board: coupled share, gap,
                              intra-pair skew
  buses                       Buses of a routed board: members routed, vias and layers per
                              member, lengths and skew (exit 4 when a limit is missed)
  return-paths                Reference-return audit of high-speed nets: copper under each
                              trace on its reference layer, the detour round voids, layer
                              changes without a stitch (read-only; doc 05 §42)
  footprint-check             Check every footprint against datasheet land patterns from a
                              reference library of trusted brands: pad count, positions, sizes,
                              drills, mirroring (read-only; doc 05 §43)
  advice-check                Check an advice file (doc 17) against a board: the refusals
                              `route --advice` would give, and what each hint does
  session                     Serve a board session to an agent over MCP (stdin/stdout) or JSON
                              lines: list open connections, route with hints, rip, undo, save
                              (doc 19)
  style                       Style metric of a routed board: bends, acute angles, stair-steps,
                              detours (doc 05 §39)
  srj-import                  Convert a Simple Route JSON problem (tscircuit) to a KiCad board
                              with its project and rules
  srj-export                  Write a routed board's copper as the `traces` of its Simple Route
                              JSON problem
  tui                         Choose the route options on a terminal screen, then run, print or
                              save them

tracemaker version

Print the version


tracemaker version [OPTIONS]


OPTIONS:
  -h,     --help              Print this help message and exit

tracemaker gpu-info

List GPU devices and their available memory budget


tracemaker gpu-info [OPTIONS]


OPTIONS:
  -h,     --help              Print this help message and exit

tracemaker inspect

Read a .kicad_pcb and print a summary


tracemaker inspect [OPTIONS] board


POSITIONALS:
  board TEXT:FILE REQUIRED    Board file

OPTIONS:
  -h,     --help              Print this help message and exit
          --json TEXT         Also write the board as JSON (KiCad truth schema)

tracemaker rules

Detect component categories and report the component-aware layout rules (doc 15)


tracemaker rules [OPTIONS] board


POSITIONALS:
  board TEXT:FILE REQUIRED    Board file

OPTIONS:
  -h,     --help              Print this help message and exit
          --json TEXT         Write the full report (every rule of every instance) as JSON
          --mode TEXT:{report,soft,on}
                              Which statuses to report: report (check only), soft (as placement
                              would apply them), on (with keep-outs)
          --dru TEXT          Write the generated custom rules (sidecar .kicad_dru) to this
                              file
          --roles-from TEXT   Detect and bind roles on this version of the board (e.g. the
                              placement input), measure on the given one
          --catalogue TEXT    Catalogue JSON to use instead of the built-in one
                              (scripts/crules_catalogue.py output)
          --rules-override TEXT:FILE
                              User override file (JSON, doc 15 §6.3): disable rules,
                              assert/deny categories, set parameters

tracemaker drc

Check a board against its KiCad design rules


tracemaker drc [OPTIONS] board


POSITIONALS:
  board TEXT:FILE REQUIRED

OPTIONS:
  -h,     --help              Print this help message and exit
          --json TEXT         Write the report as JSON (kicad-cli layout)
          --epsilon-um FLOAT  Tolerance below the required clearance, micrometres
          --refill-zones      Refill zones for the current copper before checking (not written)

tracemaker route

Route all unrouted connections of a board


tracemaker route [OPTIONS] board


POSITIONALS:
  board TEXT:FILE REQUIRED    Board file (.kicad_pcb)

OPTIONS:
  -h,     --help              Print this help message and exit
          --config TEXT:FILE  Read options from a file of `name = value` lines, as `tracemaker
                              tui` saves them; options on the command line win
  -o,     --output TEXT REQUIRED
                              Output .kicad_pcb
          --time FLOAT        Time limit, seconds (safety net; results then depend on machine
                              speed)
          --work INT          Deterministic work budget in search expansions per router (e.g.
                              50000000); with the default portfolio every variant gets the
                              whole budget, so a run does up to --variants times this work
          --pitch-um FLOAT    Lattice pitch in micrometres (default: automatic)
          --via-cost-mm FLOAT Cost of a via as equivalent track length
          --seed UINT
          --layer-assign      Prefer per connection the layer with the fewest crossings
                              (two-layer boards; doc 16 F2)
          --relax             Portfolio: route under 60 % and 80 % of the clearance first,
                              legalise (move vertices off the lattice) up to the real rules,
                              repeat on stalls; until complete, with --round-work (20 M
                              default)
          --relax-late        With --relax: begin under the real rules and relax only when
                              those stall (fresh start from the loosest stage)
          --heuristic-weight FLOAT
                              Weighted A* factor (1.0 = optimal searches)
          --no-rip-up{false}  Disable negotiated rip-up and reroute
          --micro-vias        Use micro vias (outer layer to the next) where a through via is
                              blocked (only on boards that allow them)
          --blind-vias        Use blind/buried vias where a through via is blocked (only on
                              boards that allow them)
          --diff-pairs        Route differential pairs (KiCad P/N or +/- names) as coupled
                              pairs first (doc 05 §15)
          --pair-twists, --no-pair-twists{false}
                              Coupled pairs may swap sides at a layer change, for pairs whose
                              pin order is mirrored between the ends (default on; only with
                              pair routing)
          --pair-skew-mm FLOAT
                              Intra-pair skew limit for coupled pairs: meanders on the shorter
                              half (0 = custom skew rules only)
          --global            Global routing first: detailed search follows coarse corridors
          --no-optimize{false}
                              Skip the post-routing clean-up pass (fewer vias, shorter tracks)
          --plan-gap, --no-plan-gap{false}
                              Plan connections by copper-to-copper distance between pads rather
                              than centre to centre (default on)
          --escape-plan, --no-escape-plan{false}
                              Reserve escape corridors for the pins of dense packages (QFP,
                              BGA) before routing
          --escape-flow       Escape plan v2: min-cost-flow channel and layer assignment for
                              deep BGA arrays (implies --escape-plan; experimental)
          --reroute           Remove every unlocked track and via first and route the whole
                              board again
          --halving           With more --variants than --threads: successive halving over all
                              the variants instead of running only the first ones
          --cut-report        Report straight lines across the board that more nets must cross
                              than tracks fit (proof that the placement cannot be routed)
          --escape-report     Report the pins of deep BGA arrays per ring and how many were
                              connected
          --fast-bends{false} Approximate bend costs (1 state per lattice point instead of 9)
          --no-gpu            Compute cost-to-go fields on the CPU instead of the GPU (same
                              results)
          --soft-zones        Zone fills do not block other nets (refill the zones afterwards);
                              unused fills become plane targets
          --no-refill-repair  With --soft-zones: only count what the zone refill leaves
                              unconnected, do not route it
          --via-in-pad        Inner balls / enclosed SMD pads may take a minimum-size via in
                              the pad (needs filled, capped vias)
          --keep-vias-off-pads
                              Vias keep clear of SMD pads narrower than --vias-off-pads-below
                              (via-in-pad excepted)
          --vias-off-pads-below FLOAT
                              Pad width (mm) below which --keep-vias-off-pads applies (default
                              2)
          --no-neck-nets TEXT ...
                              Comma-separated nets that are never narrowed below their class
                              width nor given the small neck-down via (power nets of a
                              rule-relaxed routing)
          --first-nets-ordered
                              Route the --first-nets in the order of the list (e.g. the pins of
                              a package round its perimeter), not in the router's own order
          --first-nets TEXT ...
                              Comma-separated nets routed first, also after restarts; other
                              nets do not rip them (e.g. crystal lines)
          --bus TEXT ...      Experimental. Route these nets as a bus, NAME=PATTERN
                              (repeatable): lane by lane on the same layers, e.g.
                              'DATA=/D[0-7]' or 'LCD=/LCD_*'. PATTERN matches whole net names:
                              * and ? as in net-class patterns, [N-M] a number in that range
                              (doc 05 §38)
          --buses             Experimental. Also find buses in the net names: nets differing
                              only in a trailing index, four or more between the same two
                              components
          --bus-first         Route the buses before everything else (default: each bus where
                              the router's order puts its first connection)
          --bus-skew-mm FLOAT Length-match the --bus groups: meanders until their lengths
                              (tracks and via height, as KiCad's skew check) differ by at most
                              this (0 = only the board's custom skew rules)
          --no-field{false}   Use the octile heuristic only (no cost-to-go fields)
          --kb TEXT           Knowledge base file (failure memory across runs)
          --no-kb             Do not read or update the knowledge base
          --threads INT       Threads for the portfolio (differently configured routers, best
                              kept). Without --variants it is also the portfolio size, except
                              with --work, where all variants run and the output is identical
                              for any thread count
          --variants INT      Portfolio size (1 = single router; default: all with --work, else
                              --threads); the output never depends on --threads with --work.
                              --time applies to each variant from its start
          --no-tracks-on TEXT ...
                              Copper layers that get no new tracks, e.g. In1.Cu,In2.Cu (vias
                              still pass through and reach zone fills there)
          --layer-cost TEXT ...
                              Track cost per layer as LAYER=FACTOR, e.g. In1.Cu=4,In2.Cu=4 (1 =
                              normal, at most 1000)
          --view              Stream the routing live to the browser viewer
          --return-paths TEXT ...
                              After routing, audit the reference return of nets matching these
                              KiCad wildcards (comma separated, e.g. 'DDR*'): copper under each
                              trace on its reference layer, the detour round voids, layer
                              changes without a stitching via. Read-only; the report is in the
                              log and the summary, the paths in the viewer (doc 05 §42)
          --return-path-classes TEXT ...
                              With --return-paths: also the nets of these net classes
          --return-path-pairs Audit the nets that are halves of a differential pair too
          --return-path-radius-mm FLOAT:POSITIVE
                              How far a stitching via or capacitor may be from a layer change
                              (default 5)
          --footprint-refs TEXT
                              Before routing, check every footprint against datasheet land
                              patterns from this reference library (a directory or a JSON file;
                              doc 05 §43). A footprint that differs from its datasheet is an
                              error and stops the job
          --footprint-trusted TEXT:FILE
                              With --footprint-refs: the trusted brand list (default:
                              trusted_brands.txt beside the references); references of other
                              brands give no verdict
          --footprint-trust-all
                              With --footprint-refs: use the references of every brand (nobody
                              vouched for them)
          --footprint-require TEXT ...
                              With --footprint-refs: designators (KiCad wildcards, comma
                              separated) that must have a trusted reference, else it is an
                              error
          --footprint-warn-only
                              With --footprint-refs: report the discrepancies and route anyway
          --footprint-tol-mm FLOAT:NONNEGATIVE
                              With --footprint-refs: tolerance of pad positions, sizes and
                              drills in millimetres (default 0.05; a reference may set its own)
          --si-rules          JLCPCB's three routing rules at once (doc 05 §44): critical nets
                              (from the component rules' roles and differential pairs) routed
                              first, dearer vias for them (x3), and a cost for their tracks
                              over a void of the adjacent reference plane (+4 pitches per
                              lattice step); each can be set with the options below instead
          --critical-nets TEXT ...
                              Nets that are critical whatever their role, KiCad wildcards comma
                              separated (e.g. 'CLK*,USB_D*'); they are tier 1, like clocks, and
                              the nets found by --critical-auto follow in their own tiers
          --critical-auto     Critical nets from the component rules' roles (clock, crystal,
                              USB, Ethernet, PCIe, DDR ...) and from differential pairs
          --critical-first    Route the critical nets before all others, tier by tier (clocks
                              and crystals, differential links, memory buses); --first-nets
                              stay in front
          --critical-via-cost FLOAT:FLOAT in [1 - 100]
                              A via costs a critical net this many times --via-cost-mm (default
                              1; 3 with --si-rules)
          --critical-via-max INT:NONNEGATIVE
                              Warn in the report when a critical net has more vias than this (0
                              = no limit)
          --split-cost FLOAT:NONNEGATIVE
                              Cost, in pitches per lattice step, of a critical net's track over
                              a void of the adjacent reference plane: a split, a slot or an
                              antipad field (default 0; 4 with --si-rules)
          --split-hard        Close plane voids to critical nets instead of charging for them:
                              a critical net with no way round a split stays unrouted
          --no-freeze         With --view: the viewer does not hold the scene on a routing
                              stall (it normally freezes on the stuck net, with the rejected
                              paths and what rejected them; Space resumes)
          --record TEXT       Write the routing events (JSON lines, time-stamped) to a file for
                              replay; zstd-compressed if FILE ends in .zst
          --view-host TEXT    Viewer bind address (default $TM_VIEW_HOST, else 127.0.0.1: this
                              machine only). 0.0.0.0 or a LAN address lets other machines
                              connect, and then a token is required
          --view-token TEXT   Token for a viewer that other machines can reach (16+ characters;
                              default: a random one, printed in the URL)
          --view-insecure     Serve a viewer that other machines can reach WITHOUT a token
                              (anyone who can reach the port can watch the board)
          --view-port INT     Viewer port (default 8766)
          --view-embed TEXT   Pages that may show the viewer in a frame, origins separated by
                              spaces (e.g. a dashboard: http://host:8771); default: none
          --hold              Keep serving the viewer after routing finishes
          --json TEXT         Write a result summary as JSON
          --component-rules TEXT:{off,report,soft,on}
                              Component-aware rules (doc 15): off (default); report/soft write
                              <output>.tracemaker.kicad_dru; on also routes with the generated
                              keep-outs (crystal, switching-regulator inductor) as in-memory
                              rule areas
          --rules-override TEXT:FILE
                              User override file for --component-rules (JSON, doc 15 §6.3):
                              disable rules, assert/deny categories, set parameters
          --advice TEXT:FILE  Advice file (JSON, doc 17): typed hints (nets first, connection
                              priority, layer costs, regions that reserve space for some nets).
                              They run as extra portfolio variants next to the unadvised ones,
                              so the result is never worse
          --advice-variants INT:INT in [1 - 8]
                              Advised variants to add (default: the file's "variants", else 4)
          --advisor TEXT      A command (run with sh -c) that reads the stuck report (JSON) on
                              stdin and writes an advice file on stdout; consulted only if the
                              route leaves connections open, then the board is routed again
                              with its advice (advisors/ has a reference one)
          --advisor-timeout FLOAT:POSITIVE
                              Seconds the advisor may take (default 120; not counted as routing
                              work)
          --advisor-rounds INT:INT in [1 - 8]
                              Consult the advisor again with the advised run's result while
                              connections are open (default 1)
          --advisor-redact    Send net and part names to the advisor as aliases (N1, P3),
                              without part values or library ids; the advice is mapped back
          --advice-out TEXT   Where the advisor's advice is saved (default
                              <output>.advice.json); route again with --advice FILE to repeat
                              the run
          --stuck-report TEXT Write the stuck report (what failed and why, JSON) of the run the
                              advisor sees, or the final one
          --emit-items TEXT   Write the new tracks and vias as JSON (for the KiCad plugin)
          --widen-power       After routing: widen new tracks that are narrower than their net
                              class width back up to it where there is room, and nets with a
                              target (--widen-net, or a width the component rules computed)
                              towards the target (doc 05 §39)
          --widen-net TEXT ...
                              With --widen-power: target width for nets as PATTERN=WIDTH_MM,
                              e.g. '+5V=0.8' or 'VBUS*=1' (repeatable)
          --stitch-vias TEXT:{planes,return,all}
                              After routing: add stitching vias. planes: vias of a plane's net
                              on a grid where its fills overlap on two or more layers; return:
                              a plane via near each via of the nets that need a reference plane
                              (component rules, --stitch-return); all: both
          --stitch-pitch FLOAT:POSITIVE
                              Grid pitch of plane stitching vias, mm (default 5.08, the
                              catalogue's value)
          --stitch-distance FLOAT:POSITIVE
                              Return-path stitching: largest distance from a signal via to its
                              plane via, mm (default: the rule's, else 5.08)
          --stitch-return TEXT ...
                              Return-path stitching for nets as PATTERN=PLANE_NET, e.g.
                              'USB_D*=GND' (repeatable). Return-path stitching from component
                              rules is experimental
          --pass-work INT:POSITIVE
                              Work budget of each after-route pass, in exact checks (default
                              2,000,000)

tracemaker escape

Escape feasibility of dense packages: pins that cannot leave their package under
the board's rules


tracemaker escape [OPTIONS] board


POSITIONALS:
  board TEXT:FILE REQUIRED

OPTIONS:
  -h,     --help              Print this help message and exit
          --json TEXT         Write the analysis as JSON
          --flow              Also plan deep BGA arrays by min-cost flow and report the
                              channel/layer assignment per ring
          --soft-zones        Zone fills do not block (as route --soft-zones): analyse what a
                              refill would leave
          --keep-vias-off-pads
                              Vias keep clear of SMD pads narrower than --vias-off-pads-below
                              (as route)
          --vias-off-pads-below FLOAT
                              Pad width (mm) below which --keep-vias-off-pads applies (default
                              2)

tracemaker pairs

Differential pairs of a routed board: coupled share, gap, intra-pair skew


tracemaker pairs [OPTIONS] board


POSITIONALS:
  board TEXT:FILE REQUIRED

OPTIONS:
  -h,     --help              Print this help message and exit
          --pair TEXT ...     Also measure this pair (NET_A,NET_B), e.g. USB nets named DP/DM
          --json TEXT         Write the measurements as JSON

tracemaker buses

Buses of a routed board: members routed, vias and layers per member, lengths and
skew (exit 4 when a limit is missed)


tracemaker buses [OPTIONS] board


POSITIONALS:
  board TEXT:FILE REQUIRED

OPTIONS:
  -h,     --help              Print this help message and exit
          --bus TEXT ...      A bus as NAME=PATTERN (repeatable), as in route
          --buses             Also find buses in the net names, as in route
          --bus-skew-mm FLOAT Skew limit of the --bus groups (0 = only the board's custom skew
                              rules)
          --json TEXT         Write the measurements as JSON

tracemaker return-paths

Reference-return audit of high-speed nets: copper under each trace on its
reference layer, the detour round voids, layer changes without a stitch
(read-only; doc 05 §42)


tracemaker return-paths [OPTIONS] board


POSITIONALS:
  board TEXT:FILE REQUIRED

OPTIONS:
  -h,     --help              Print this help message and exit
          --nets TEXT ...     Nets to analyse, KiCad wildcards, comma separated (e.g.
                              'DDR*,*CLK*')
          --netclass TEXT ... Also the nets of these net classes
          --diff-pairs        Also the nets that are halves of a differential pair (names
                              ending in P/N or +/-)
          --reference-layer TEXT ...
                              PATTERN=LAYER: the reference layer of the nets that match,
                              instead of the adjacent layer with the most copper under the
                              trace (repeatable)
          --stitch-radius-mm FLOAT:POSITIVE
                              How far a stitching via or a capacitor may be from a layer change
                              (default 5)
          --warn-detour-mm FLOAT
                              Warn when a net's return detours more than this (default 2)
          --warn-separation-mm FLOAT
                              Warn when the return gets farther than this from the trace
                              (default 1)
          --min-void-mm FLOAT Stretches without copper shorter than this are ignored (default
                              0.1)
          --sample-mm FLOAT:POSITIVE
                              Spacing of the samples along a trace (default 0.05)
          --refill            Refill every zone with the engine's refill instead of using the
                              fills in the file
          --no-refill         Do not refill zones that have no fill (they are then not
                              reference copper)
          --json TEXT         Write the report as JSON
          --strict            Exit 4 when any net has a warning (a threshold or a missing
                              stitch)
          --view              Serve the board and the return paths to the live viewer (until
                              interrupted)
          --view-port INT     Viewer port (default 8766)
          --view-host TEXT    Viewer bind address (default $TM_VIEW_HOST, else 127.0.0.1;
                              another address needs a token)
          --view-token TEXT   Token for a viewer other machines can reach (16+ characters;
                              default a random one)
          --view-insecure     A viewer other machines can reach, without a token

tracemaker footprint-check

Check every footprint against datasheet land patterns from a reference library
of trusted brands: pad count, positions, sizes, drills, mirroring (read-only;
doc 05 §43)


tracemaker footprint-check [OPTIONS] board


POSITIONALS:
  board TEXT:FILE REQUIRED

OPTIONS:
  -h,     --help              Print this help message and exit
          --refs TEXT REQUIRED
                              The reference library: a directory of JSON files (and a
                              trusted_brands.txt) or one JSON file
          --trusted-brands TEXT:FILE
                              The trusted brand list, one `Brand | alias` per line (default:
                              trusted_brands.txt beside the references)
          --trust-all         Use the references of every brand (nobody vouched for them; the
                              report says so)
          --only TEXT ...     Check only these designators (KiCad wildcards, comma separated)
          --require TEXT ...  Designators that must have a trusted reference; without one it is
                              an error (e.g. 'U*,J*')
          --mpn-field TEXT ...
                              Footprint properties that hold the manufacturer part number,
                              besides MPN, Manufacturer_Part_Number and the like
          --position-tol-mm FLOAT:NONNEGATIVE
                              Pad position tolerance (default 0.05; a reference may set its
                              own)
          --size-tol-mm FLOAT:NONNEGATIVE
                              Pad size tolerance (default 0.05)
          --drill-tol-mm FLOAT:NONNEGATIVE
                              Drill size tolerance (default 0.05)
          --all               Also list the footprints that are fine and those without a
                              reference
          --json TEXT         Write the report as JSON
          --strict            Exit 4 on warnings too (a reference from an untrusted brand, a
                              peg the datasheet does not show)
          --view              Serve the board and the findings to the live viewer (until
                              interrupted)
          --view-port INT     Viewer port (default 8766)
          --view-host TEXT    Viewer bind address (default $TM_VIEW_HOST, else 127.0.0.1;
                              another address needs a token)
          --view-token TEXT   Token for a viewer other machines can reach (16+ characters;
                              default a random one)
          --view-insecure     A viewer other machines can reach, without a token

tracemaker advice-check

Check an advice file (doc 17) against a board: the refusals `route --advice`
would give, and what each hint does


tracemaker advice-check [OPTIONS] board advice


POSITIONALS:
  board TEXT:FILE REQUIRED
  advice TEXT:FILE REQUIRED   Advice file (JSON)

OPTIONS:
  -h,     --help              Print this help message and exit
          --json TEXT         Write what each hint became as JSON

tracemaker session

Serve a board session to an agent over MCP (stdin/stdout) or JSON lines: list
open connections, route with hints, rip, undo, save (doc 19)


tracemaker session [OPTIONS] board


POSITIONALS:
  board TEXT:FILE REQUIRED

OPTIONS:
  -h,     --help              Print this help message and exit
          --out TEXT          Where the `save` tool writes the board (without it `save` is
                              refused; the agent cannot name a path)
          --seed UINT [1]     Router seed of a route call that gives none
          --work-limit INT [0]
                              Search work (steps) of the whole session; 0 = none
          --threads INT [4]   Portfolio threads of a route call with several variants (the
                              result does not depend on it)
          --log TEXT          Write every call, result digest and state digest here (JSON
                              lines), to replay the session
          --replay TEXT       Run the calls of this log again and check every digest instead of
                              serving an agent
          --jsonl             JSON lines ({"tool": NAME, "args": {...}} per line) instead of
                              MCP
          --gpu               Cost-to-go fields on the GPU (default: the CPU reference; same
                              results)
          --view              Stream the router's events to the browser viewer, so a person can
                              watch the agent
          --view-host TEXT    Viewer bind address (default $TM_VIEW_HOST, else 127.0.0.1;
                              another address needs a token)
          --view-port INT [8766]
                              Viewer port
          --view-token TEXT   Token for a viewer other machines can reach
          --view-insecure     A viewer other machines can reach WITHOUT a token

tracemaker style

Style metric of a routed board: bends, acute angles, stair-steps, detours (doc
05 §39)


tracemaker style [OPTIONS] board


POSITIONALS:
  board TEXT:FILE REQUIRED

OPTIONS:
  -h,     --help              Print this help message and exit
          --json TEXT         Write the metric as JSON
          --connections       With --json: also one row per connection

tracemaker srj-import

Convert a Simple Route JSON problem (tscircuit) to a KiCad board with its
project and rules


tracemaker srj-import [OPTIONS] problem


POSITIONALS:
  problem TEXT:FILE REQUIRED  Simple Route JSON file

OPTIONS:
  -h,     --help              Print this help message and exit
  -o,     --output TEXT REQUIRED
                              Output .kicad_pcb (the .kicad_pro, and a .kicad_dru if needed,
                              are written next to it)
          --clearance-mm FLOAT:NONNEGATIVE
                              Copper clearance (default: the problem's defaultObstacleMargin,
                              else tscircuit's fallback of 0.15 mm)
          --hole-to-hole-mm FLOAT:NONNEGATIVE
                              Drill edge to drill edge clearance (default: the problem's
                              via-hole / drill clearance fields, else no rule)
          --unpointed-keepout Pads of a net that no connection point lies on become keep-outs
                              (fan-out problems)
          --outline-margin-mm FLOAT:NONNEGATIVE
                              Grow the board outline by this on every side (breakout points on
                              the bounds)
          --json TEXT         Write the conversion summary (counts, rules used, warnings) as
                              JSON

tracemaker srj-export

Write a routed board's copper as the `traces` of its Simple Route JSON problem


tracemaker srj-export [OPTIONS] board


POSITIONALS:
  board TEXT:FILE REQUIRED    Routed .kicad_pcb made by srj-import

OPTIONS:
  -h,     --help              Print this help message and exit
          --problem TEXT:FILE REQUIRED
                              The Simple Route JSON problem the board was imported from
  -o,     --output TEXT REQUIRED
                              Output Simple Route JSON (the problem plus traces)
          --json TEXT         Write the export summary (routed and unrouted connections) as
                              JSON

tracemaker tui

Choose the route options on a terminal screen, then run, print or save them


tracemaker tui [OPTIONS] [board]


POSITIONALS:
  board TEXT                  Board file to route

OPTIONS:
  -h,     --help              Print this help message and exit
  -o,     --output TEXT       Output .kicad_pcb
          --config TEXT       Options file to start from (if it exists) and to save to

tracemaker-place

TraceMaker placer: quadratic + SimPL global placement, legalisation and
annealing


tracemaker-place [OPTIONS] board


POSITIONALS:
  board TEXT:FILE REQUIRED    Input .kicad_pcb

OPTIONS:
  -h,     --help              Print this help message and exit
  -o,     --output TEXT REQUIRED
                              Output .kicad_pcb
          --mode TEXT:{full,refine,auto,routable,eco}
                              full (place from scratch) or refine (improve the current
                              placement)
          --time FLOAT        Wall-time stop for the annealer, seconds (0 = none; budgets are
                              in moves)
          --seed UINT         Random seed
          --threads INT       Threads for parallel annealing runs (0 = min(cores, 16))
          --runs INT          Independent annealing runs (0 = one per thread)
          --effort FLOAT      Annealing moves per run = effort x 4000 x movable parts
          --alpha-cross-mm FLOAT
                              Cost of one airwire crossing in mm of signal HPWL
          --courtyard-clearance-mm FLOAT
                              Override the courtyard clearance (default: rules, else 0.25 mm)
          --move-connectors   Also move connectors that touch the board edge
          --scratch           The input has no placement (parts piled or beside the board, as
                              after importing a schematic): input positions of movable parts
                              carry no intent and are never fallen back to
          --repair-input      routable, eco and --route-check: an input placement with overlaps
                              or parts off the board is replaced, as the baseline and fallback,
                              by its minimal repair (only the conflicting parts moved to the
                              nearest legal spot). Off by default: the placement model is
                              stricter than KiCad's DRC
          --no-decap-affinity Do not tie decoupling capacitors to their IC's supply pins
          --component-rules TEXT:{off,report,soft,on}
                              Component-aware layout rules (doc 15): off, report (detect and
                              list only), soft (proximity pseudo-nets: crystal, ESD, regulator
                              caps, generalised decoupling); default soft (D52)
          --decap-weight INT:INT in [1 - 1000]
                              Weight of each decoupling-capacitor tie (D25); a signal net
                              weighs 10 (the default)
          --crules-weight INT:INT in [1 - 1000]
                              Scale of the component-rule proximity weights in percent (100 =
                              as the rules say)
          --crules-two-stage, --no-crules-two-stage{false}
                              Full mode with component rules (default on): place with the
                              decoupling ties first, lock those capacitors and their ICs, then
                              refine with the component-rule pulls
          --edge-attraction   With --component-rules soft/on: pull movable connectors (CONN-01,
                              USB2-11, DISP-02) toward the nearest board edge (objective only;
                              pin headers are not pulled)
          --rules-override TEXT:FILE
                              User override file for --component-rules (JSON, doc 15 §6.3):
                              disable rules, assert/deny categories, set parameters
          --json TEXT         Write the placement report as JSON
  -v,     --verbose           Log the spreading iterations
          --route-check INT   Route the input and the new placement with this work budget (A*
                              expansions per variant) and keep the placement that routes more
                              connections (0 = off)
          --route-threads INT Router portfolio size for --route-check
          --no-fallback       Full mode: keep the result even if some parts could not be placed
          --debug-part TEXT   Print the legality map of one part and exit
          --tempering         Parallel tempering over the annealing runs (replica exchange)
                              instead of independent runs
          --lns-rate FLOAT    Share of annealing steps that are large-neighbourhood (window
                              rip-up and re-place) moves
          --lns-window INT    Parts per LNS window (2..12)
          --lns-polish INT    LNS windows run on the annealing result
          --beta FLOAT        Routability weight: mm of signal HPWL per mm of RUDY overflow (0
                              = off)
          --flip              Side assignment (D48): movable surface-mount parts may move to
                              the other side (KiCad-mirrored footprints); through-hole, locked
                              and fixed parts never do
          --flip-via-mm FLOAT With --flip: cost of one estimated via (a net's surface-mount pin
                              on its minority side) in mm of signal HPWL
          --flip-rate FLOAT   With --flip: share of annealing moves that are flips
          --keep-side TEXT    With --flip: references that must stay on their side (comma
                              separated)
          --debug-flip TEXT   Write the input with these footprints (comma separated
                              references, or 'all') flipped in place, KiCad style, and exit
          --rounds INT        routable: re-placement rounds after the seeds
          --eco-rounds INT    eco: commit rounds
          --eco-candidates INT
                              eco/routable: moves routed per round
          --loop-beta FLOAT   routable/eco: routability weight in the loop
          --final-work INT    routable/eco: route the winner and the input again with this
                              budget; keep the winner only if not worse (default 4 x
                              --route-check, 0 = off)
          --record TEXT       routable: write the placement timelapse (JSONL: header, then one
                              frame per stage)
          --loop-time FLOAT   routable: wall-time stop in seconds; checked between seeds and
                              routes, keeps the best placement so far (0 = none)

tracemaker-view

TraceMaker live viewer server


tracemaker-view [OPTIONS] board


POSITIONALS:
  board TEXT:FILE REQUIRED    .kicad_pcb file to show

OPTIONS:
  -h,     --help              Print this help message and exit
          --port INT:INT in [0 - 65535]
                              TCP port (default 8766)
          --host TEXT         bind address (default $TM_VIEW_HOST, else 127.0.0.1: this machine
                              only; 0.0.0.0 or a LAN address lets other machines connect and
                              then needs a token)
          --token TEXT        token for a viewer other machines can reach (16+ characters;
                              default a random one, printed in the URL)
          --insecure          serve a viewer other machines can reach WITHOUT a token
          --web TEXT          directory of the built viewer (default $TM_VIEW_DIR, else
                              ../share/tracemaker/viewer beside the binary, else
                              <repo>/viewer/dist)
          --demo              stream synthetic routing events (tracks are cleared and re-routed
                              in a loop)
          --keep-tracks       with --demo: keep the board's existing tracks and vias
          --replay TEXT:FILE  replay a recording made with `tracemaker route --record FILE`
          --speed FLOAT:POSITIVE
                              replay speed (1 = real time)
          --loop              with --replay: start again after the end