Skip to main content
Built-in Elements

<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.

PCB Circuit Preview
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.

PCB Circuit Preview
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 />:

PropertyDescription
paddingSpace around the fanout region.
paddingLeft / paddingRight / paddingTop / paddingBottomSet padding on individual sides.
autorouterEscape router or configuration. Defaults to fanout.
pcbTracePathsSaved port-to-exit wire/via routes covering all routing connections in the fanout.
busFanoutDirectionsMaps named buses to preferred escape directions.
fanoutBoundaryPaddingPadding between source pads and the shared boundary where fanout traces terminate.
fanoutRoutingLayersRouting layers; the destination layer for local dogbones.
fanoutPourNetMapMaps 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.