<fanout />
Overview
<fanout /> groups components for escape routing: tscircuit routes their
connections to exits, then connects those exits to the rest of the board.
It is an alias of <breakout /> and accepts the same props.
Like a breakout, it does not create a subcircuit, selector scope, or private net
scope. Components inside it remain accessible through selectors such as R1.1.
Automatic fanout
Place the components to escape inside <fanout /> and define their electrical
connections with <trace />. The default fanout autorouter
generates exits for connections leaving the region. Use padding to give those
routes room around the component pads.
const footprint = "bga36_grid6x6_p1mm_w6mm_h6mm_pad0.5mm_circularpads"
export default () => (
<board width={24} height={14} minTraceWidth={0.1}>
<fanout padding={1}>
<chip name="U1" footprint={footprint} pcbX={-6} />
</fanout>
<chip name="U2" footprint={footprint} pcbX={6} />
<trace from="U1.6" to="U2.1" />
<trace from="U1.12" to="U2.7" />
<trace from="U1.18" to="U2.13" />
</board>
)
For explicit exit locations, place a <fanoutpoint /> inside the fanout.
It is an alias of <breakoutpoint />, with the same
connection, pcbX, and pcbY props.
Local dogbones
autorouter="dogbone" creates short BGA pad-to-via escapes instead of routing to
a boundary. Connected signal, VCC and GND pads are included. Remaining board
routing continues from the vias; fanoutRoutingLayers chooses their destination.
This 36-pad footprint connects eight pads. Only those eight receive dogbones; the other 28 remain untouched.
export default () => (
<board width={10} height={10} layers={4} routeRemaining={false}
minTraceWidth={0.1} minViaPadDiameter={0.4} minViaHoleDiameter={0.15}>
<fanout autorouter="dogbone" fanoutRoutingLayers={["inner2"]}>
<chip name="U1" footprint="bga36_grid6x6_p1mm_w6mm_h6mm_pad0.5mm_circularpads"
connections={{
pin1: "net.DATA0", pin6: "net.DATA1", pin8: "net.VCC", pin15: "net.GND",
pin22: "net.CLOCK", pin29: "net.ENABLE", pin31: "net.DATA2", pin36: "net.DATA3",
}}
/>
</fanout>
<pcbnotetext pcbY={4} text="8 connected pads; 28 untouched" fontSize={0.3} />
</board>
)
For an explicit routing pass, see dogbone phase support and limitations.
Requires core 0.0.2026+ and props 0.0.672+. Use a two-dimensional SMT pad grid and an existing destination layer different from the pad layer.
Reuse saved routes
Pass pcbTracePaths to preserve edited routes and continue board routing from
their exits. Keep the electrical connections and supply every pad-to-exit path.
tsci build captures phase JSON in .tscircuit/autorouting-artifacts/. Copy it
to your source tree before editing; use fanout-local coordinates and recheck DRC.
Dogbone capture requires core 0.0.2027+.
Properties
<fanout /> accepts the layout props of <group />, plus the
routing props shared with <breakout />:
| Property | Description |
|---|---|
padding | Space around the fanout region. |
paddingLeft / paddingRight / paddingTop / paddingBottom | Set padding on individual sides. |
autorouter | Escape router or configuration. Defaults to fanout. |
pcbTracePaths | Saved port-to-exit wire/via routes covering all routing connections in the fanout. |
busFanoutDirections | Maps named buses to preferred escape directions. |
fanoutBoundaryPadding | Padding between source pads and the shared boundary where fanout traces terminate. |
fanoutRoutingLayers | Routing layers; the destination layer for local dogbones. |
fanoutPourNetMap | Maps plane layers to nets for source-only escapes; inferred from matching copper pours when omitted. |
For bus direction and power-plane examples, see the breakout reference. For a larger workflow with layer planning and skew constraints, see Routing DDR.