Thermal relief connection to zone incomplete

Diagnostic signature

Thermal relief connection to zone incomplete

KiCad PCB Editor's Design Rule Check (DRC) triggers this violation when a pad cannot connect to a surrounding solid copper zone with the required minimum number of thermal relief spokes.

What it means

The "Thermal relief connection to zone incomplete" violation (internally tracked as `starved_thermal`) is triggered by the KiCad PCB Editor (pcbnew) Design Rule Check (DRC) when it evaluates copper zone filling. Thermal reliefs are intended to provide electrical continuity to a copper plane while restricting heat flow during soldering, achieved by generating small copper spokes between the pad and the zone. This diagnostic signifies that the zone filler algorithm was unable to generate the minimum number of these spokes to satisfy the board's constraints. By default, KiCad often requires a minimum of two spokes to ensure an adequate thermal and electrical bond, though this threshold can be customized globally or through board-specific DRC custom rules. The DRC flags this condition to prevent a poor connection that could lead to cold solder joints or an inadequate current return path.

Why it happens

This diagnostic is emitted when the available physical space around the affected pad is too constrained for the zone filling algorithm to successfully spawn the required number of thermal spokes. A pad might be tightly surrounded by other tracks, vias, footprint keepouts, or the board outline, which "pinches off" the area where a copper spoke would otherwise be placed. Additionally, conservative thermal relief parameter settings—such as excessively wide spoke widths or large thermal clearance gaps defined in the zone properties or pad overrides—can prevent spokes from fitting into narrow corridors between adjacent pads. The error is also commonly raised when isolated "islands" of copper pour manage to touch a pad with a single spoke, but the island itself is severed from the main body of the copper zone due to intersecting routing paths.

Minimal reproduction

(kicad_pcb (version 20240108) (generator pcbnew)
  (net 0 "")
  (net 1 "GND")
  (net 2 "VCC")
  (footprint "Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical"
    (at 100 100) (layer "F.Cu")
    (pad "1" thru_hole rect (at 0 0) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") (net 1 "GND") (zone_connect 1))
  )
  (segment (start 98 102) (end 102 102) (width 0.25) (layer "F.Cu") (net 2))
  (segment (start 102 102) (end 102 98) (width 0.25) (layer "F.Cu") (net 2))
  (segment (start 102 98) (end 98 98) (width 0.25) (layer "F.Cu") (net 2))
  (zone (net 1) (net_name "GND") (layer "F.Cu") (hatch edge 0.5)
    (connect_pads (clearance 0.5) (min_spoke_count 2))
    (polygon (pts (xy 90 90) (xy 110 90) (xy 110 110) (xy 90 110)))
  )
)

How to fix it

Resolve the incomplete thermal relief by removing routing obstacles blocking the pad, adjusting the thermal relief dimension settings, lowering the minimum spoke count requirement, or manually routing a track to act as a spoke.

```kicad_pcb
(kicad_pcb (version 20240108) (generator pcbnew)
  (net 0 "")
  (net 1 "GND")
  (net 2 "VCC")
  (footprint "Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical"
    (at 100 100) (layer "F.Cu")
    (pad "1" thru_hole rect (at 0 0) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") (net 1 "GND") (zone_connect 1))
  )
  ;; Moved segments further away so zone fill can reach the pad from multiple directions
  (segment (start 95 105) (end 105 105) (width 0.25) (layer "F.Cu") (net 2))
  (segment (start 105 105) (end 105 95) (width 0.25) (layer "F.Cu") (net 2))
  (segment (start 105 95) (end 95 95) (width 0.25) (layer "F.Cu") (net 2))
  (zone (net 1) (net_name "GND") (layer "F.Cu") (hatch edge 0.5)
    (connect_pads (clearance 0.5) (min_spoke_count 2))
    (polygon (pts (xy 90 90) (xy 110 90) (xy 110 110) (xy 90 110)))
  )
)
```

Step 1

Step 2

Step 3

Step 4

Step 5

Upstream references

PCB Editor | 8.0 | English | Documentation

Issue #18657: "Thermal relief connection to zone incomplete" doesn't handle multi-layer fills well

kicad/code/kicad: pcbnew/drc/drc_item.cpp