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

  1. Read the report: it names both spellings and their coordinates.
  2. Click the wrong label, press E, and retype it to match the other spelling exactly.
  3. 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

  1. Pick a name that survives lowercasing — a suffix or prefix, not a case change: CLK_IO instead of clk.
  2. Use Edit → Find and Replace with Match case enabled to catch every instance of the spelling you are retiring.
  3. 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 VCC symbol against a Vcc label 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.

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.

Sources