What this error means
ERC takes every label that sits on a net — local, hierarchical, and
global — lowercases its text, and groups labels by the result. Two labels
in one group whose actual spellings differ trigger this warning. That is
the entire test: equal after lowercasing, different before it. Nothing
fuzzier — DATA vs DAT_A or VCC vs VCC1 passes silently.
It matters because net names are case-sensitive: Data and DATA are
two separate nets, wires carrying them never join, and the netlist gets
both. A case-only difference is therefore usually a typo that has
silently split one net in two.
One exemption, since 9.0: two local labels on different sheets never
trigger it. Local labels are scoped to their sheet, so Data on one
sheet and DATA on another are deliberately distinct nets. If either of
the pair is a global or hierarchical label, the comparison spans the
whole design again.
Common causes
1. One net, retyped with a different case somewhere
The dominant case. You typed MISO at the peripheral and Miso at
the controller, or a rename pass missed one instance. The net is now
two nets, and the half without its driver often drags in follow-on
violations (input pin not driven). This warning is usually the first
and clearest symptom of the split.
2. Two genuinely different nets distinguished only by case
Sometimes deliberate — clk and CLK for unrelated domains, or a
schematic imported from a tool with other case conventions. Nothing
is electrically wrong, but the naming is one shift key away from an
accidental merge, so ERC flags the convention itself.
How to fix it
Retype the odd label to the exact spelling
- Read the report: it names both spellings and their coordinates.
- Click the wrong label, press E, and retype it to match the other spelling exactly.
- Re-run ERC (Inspect → Electrical Rules Checker) and confirm the net really merged.
Use when: The two spellings were meant to be one net. In the checked-in repro, retyping `Data` to `DATA` clears the warning and collapses the netlist from two nets to one.
Rename one net so they differ by more than case
- Pick a name that survives lowercasing — a suffix or prefix, not a case change: CLK_IO instead of clk.
- Use Edit → Find and Replace with Match case enabled to catch every instance of the spelling you are retiring.
- Re-run ERC; any difference beyond case silences the check.
Use when: Both nets are real and should stay separate. Renaming beats excluding: nobody can land on the wrong net by case alone again.
When it’s safe to exclude
Rarely. When the warning is right about a typo, excluding it hides a net that no longer connects end to end. When the two nets are intentional, renaming one (fix 2) removes the hazard instead of the reminder: keeping case-only twins means one miscased label later joins the wrong net, with no warning at all.
If you keep them anyway, exclude the single marker (right-click the violation in the ERC dialog → Exclude this violation) rather than setting the check to Ignore in Schematic Setup → Electrical Rules → Violation Severity — the check-wide switch also silences the next real typo, and since cross-sheet local labels stopped firing in 9.0, there is little legitimate noise left to suppress.
Gotchas
- The pair can span sheets. A global label on one sheet collides with a local label on another; only local-vs-local across sheets is exempt. Converting a local label to global can therefore surface a warning that was not there before.
- Fixing by retype merges the nets. That is the point when it was a typo, but if the two nets carried different signals you have just connected them, and ERC will not object — one net is one net. Glance at the netlist after the edit.
- Power symbols play by sibling rules. A
VCCsymbol against aVcclabel reports as similar_label_and_power, not here (9.0+) — same lowercase comparison, different check name, so a severity override on this check does not cover it.
Version notes
- KiCad 9.0: Two local labels on different sheets stopped triggering the warning (local labels are sheet-scoped, so they cannot collide). 9.0 also split power-symbol case collisions into their own checks: similar_power and similar_label_and_power.
Minimal reproduction
Label a wire between two pins DATA, and a second, separate wire
Data. Run ERC (Inspect → Electrical Rules Checker). The pair reports:
[similar_labels]: Labels are similar (lower/upper case difference only)
; warning
@(116.84 mm, 101.60 mm): Label 'DATA'
@(116.84 mm, 127.00 mm): Label 'Data'
The checked-in file data/erc/samples/similar_labels.kicad_sch
reproduces this with two labeled two-pin nets built from four embedded
one-pin symbols; its four lib_symbol_issues warnings about the missing
repro library are an artifact of the self-contained file, not part of
this error. Retyping Data to DATA clears the warning and the
netlist drops from two nets to one with all four pins on it.
Related errors
- Power pins are similar (lower/upper case difference only)
- Power pin and label are similar (lower/upper case difference only)
- More than one name given to this bus or net
FAQ
Are net labels case-sensitive in KiCad?
Yes. DATA and Data name two different nets, and wires carrying them never join. The similar-labels warning exists precisely because a case difference is easy to miss on the schematic but splits the net in the netlist.
Can I turn off the 'Labels are similar' warning?
Yes: Schematic Setup → Electrical Rules → Violation Severity, set "Labels are similar (lower/upper case difference only)" to Ignore. For a single accepted pair, right-clicking that violation in the ERC dialog and choosing Exclude is safer, because the check keeps catching new case typos elsewhere in the design.
Why doesn't ERC flag other near-miss names, like VCC and VCC1?
The check lowercases both names and tests exact equality, nothing fuzzier. VCC1 is still vcc1 after lowercasing — a different name on its own net, like any other. KiCad has no edit-distance typo detection for labels; anything beyond a pure case difference only surfaces through other checks or a netlist review.