What this error means

ERC lowercases two sets of strings and looks for collisions: the text of every label — local, hierarchical, and global — and the Value field of every power symbol. A label and a power symbol value that match after lowercasing but are spelled differently trigger this warning.

The two offenders don't need to touch: the scan covers the whole design, any net, any sheet. The near-miss matters because net names keep letter case. A power symbol names its net after its value and a label names its net after its text, so VCC and Vcc are two nets that read as one rail — a label meant to put a load on the rail quietly puts it on a private net.

similar_labels (two labels) and similar_power (two power symbols) run on the same comparison; this one is the mixed pair.

Common causes

1. A rail tied together with a typed label instead of the power symbol

Someone wires a supply pin and types a label — Vcc, vdd, 3v3 — instead of placing the rail's power symbol. The label spells the rail from memory, the power symbol's value is the authority, and one case slip builds a second net that carries nothing.

2. A power symbol's value was edited and the labels didn't follow

On custom rails the symbol's value is the net name. Changing +VIN to +Vin in the symbol strands every label that spelled the old casing. The feature request behind the 9.0 similarity checks came from a schematic where +Vin and +VIN coexisted unnoticed.

How to fix it

Retype the label to the rail's exact spelling

  1. Open Inspect → Electrical Rules Checker and click the violation; it lists the power symbol and the label with their locations.
  2. Select the label, press E, and retype it to match the power symbol's Value character for character.
  3. To make the wire part of the rail everywhere, delete the label and place the power symbol on it instead (A, power library).
  4. Re-run ERC.

Use when: The label was meant to be the rail — the usual case. Matched exactly, a local label joins the power net on its own sheet; the power symbol joins it everywhere.

Rename the net if it genuinely is a separate net

  1. Select the label and press E.
  2. Give the net a name that differs from the rail by more than case: VCC_SW, VCC_SENSE, not Vcc.
  3. Re-run ERC.

Use when: The wire is intentionally not the rail — a switched branch, a sense line. A visibly distinct name also stops the warning from coming back on every run.

When it’s safe to exclude

Rarely. The two strings really do differ only by case, so excluding the marker commits you to a design where Vcc and VCC are different nets on purpose — a distinction every later reader will miss.

If you accept that trade, exclude the single violation (right-click the marker → Exclude) rather than downgrading the check in Schematic Setup → Electrical Rules → Violation Severity: the severity route also silences the next case collision, and that one will be a typo.

Gotchas

  • The report blames a hidden pin. The first item reads like a pin problem — Symbol #PWR01 Hidden pin 1 [VCC, Power input, Line] — but the compared string is the symbol's Value, not the pin's name. A symbol with value VRAIL and a hidden pin named VCC collides with a Vrail label, not with vcc.
  • Sheets don't isolate you. Two case-variant local labels on different sheets are deliberately not reported, since each is sheet-scoped. A label versus a power symbol fires across sheets, because the power net exists everywhere.
  • KiCad 9 compares labels against global power symbols only; KiCad 10 widened the check to every power symbol, including 10.0's local power symbols, so an upgrade can surface warnings 9 never showed.

Version notes

  • KiCad 9.0: Check introduced in this release.
Minimal reproduction

Drive a VCC power symbol from a supply output, then wire a load pin elsewhere on the sheet and type a local label Vcc on its wire. The label and the power symbol never touch; ERC still reports:

[similar_label_and_power]: Power pin and label are similar (lower/upper case difference only)
    ; warning
    @(99.06 mm, 101.60 mm): Symbol #PWR01 Hidden pin 1 [VCC, Power input, Line]
    @(119.38 mm, 101.60 mm): Label 'Vcc'

The checked-in file data/erc/samples/similar_label_and_power.kicad_sch reproduces this with embedded symbols: U1 (a power output pin) driving a VCC power symbol, U2 (two passive pins) on a wire labeled Vcc; the exported netlist splits into VCC and /Vcc. The three embedded symbols also emit three lib_symbol_issues warnings about the missing repro library — repro artifacts, not part of this error. Retyping the label to VCC clears the warning and merges the nets.

FAQ

Is a label called Vcc the same net as the VCC power symbol?

No. Net names are case-sensitive, so Vcc and VCC never merge. A local label spelled exactly VCC joins the VCC power net on its own sheet; the power symbol or a global label joins it on every sheet.

Can I keep a net separate from a power rail that has almost the same name?

The case difference does keep them separate — KiCad never merges nets across case. ERC still warns on every run, though, because the names are indistinguishable to a reader. Rename the private net to something visibly different, like VCC_SW, and the warning goes away without excluding anything.

Why didn't my labels follow when I renamed a power symbol?

In KiCad 9 and 10 a power symbol's net takes its name from the Value field, which is also the string this check compares against labels. Editing the value renames the rail; labels still spelling the old name land on their own net. Retype them to the new value exactly, including case.

Sources