What this error means
This check is a census, not a connectivity test. ERC walks every sheet, collects every global label, resolves any text variables in it, and counts how many times each resulting name occurs in the whole schematic. Every name that occurs exactly once gets one violation, placed at that label.
Nothing else is considered: not pins, not wires, not whether the net goes
anywhere. Two global labels with the same name silence the check even
when they sit on the same wire, because the name now "appears twice".
Names are compared after variable expansion, and MISO and miso are
different names.
The check exists because a global label's job is to connect places by name; a name used once connects nothing, which usually means its partner is missing or misspelled. It ships at Ignore severity in KiCad 9 and 10, because a single global label is also a legitimate way to name a net and nothing more. You only see this violation after raising it to Warning or Error in Schematic Setup → Electrical Rules → Violation Severity (under Connections).
Common causes
1. The counterpart label has a typo
SPI_MISO on one sheet, SPI_MIS0 on the other. Each name now
appears exactly once, so you get two violations, one at each label.
A pair of violations with near-identical names is the fingerprint of
this case, and it is the mistake the check was built to catch: the
two nets look connected on paper and are not.
2. The matching label was never placed, or got deleted
The second end of the connection doesn't exist yet (sheet still being drawn) or went away in an edit (a block of circuitry deleted, its labels with it). The surviving label names a net that no longer goes anywhere else.
3. The single use is deliberate
A global label is also the usual way to force a net's name, so it shows up nicely in the PCB editor, in netclass assignments, or in SPICE output. One label, one net, no second end intended. This is exactly why the check defaults to Ignore; if you enabled it, these nets will be flagged along with the real mistakes.
How to fix it
Place the matching label, or make the names match
- If you get two violations with near-identical names, it's a typo: edit one label (double-click it) to match the other exactly.
- If you get one violation, place the missing counterpart: select the flagged label, duplicate it (Ctrl+D), and drop the copy on the net it should connect to — duplicating guarantees the text is identical. Ctrl+L places a fresh global label if you'd rather type it.
- Re-run ERC (Inspect → Electrical Rules Checker). The violation disappears as soon as the name appears twice.
Use when: The label was supposed to connect to somewhere else. This is the case the check is for.
Change it to a local label
- Right-click the global label → Change to Label.
- Re-run ERC.
Use when: The label only ever needed to name or connect things on one sheet. A local label does that without claiming a schematic-wide connection, and the census only counts global labels.
When it’s safe to exclude
This check is opt-in — Ignore is the shipped default — so the honest
framing is the reverse of most ERC pages: when should you turn it on?
Enable it (Schematic Setup → Electrical Rules → Violation Severity →
Connections) if your house style says global labels exist only to form
cross-sheet pairs. It will catch typo'd and orphaned labels that
Label not connected to anything misses: a typo'd global label sitting
on a valid wire with pins is connected — to everything except its partner.
Once enabled, excluding individual markers (right-click → Exclude this violation) is reasonable for the deliberate single-use labels — a net named for layout or simulation. If you find yourself excluding most of what it reports, the default Ignore was right for you all along.
Gotchas
- The census counts text, not connections. Two same-named global labels on the same wire satisfy the check while connecting nothing new. Don't silence a violation by stacking a second label next to the first; fix the actual missing end.
- A typo produces two violations, not one. If the count of
single_global_labelmarkers is even, look for pairs of almost-equal names before anything else. - KiCad 9 also has a separate, connectivity-based check: "Global label
not connected anywhere else in the schematic" (
global_label_dangling, Warning by default). KiCad 10 dropped it; this census is what remains, so a KiCad 10 project wanting label hygiene has to enable it.
Version notes
- KiCad 9.0: Check introduced in this release.
Minimal reproduction
Two minutes in the editor: wire two pins together, put a global label
(Ctrl+L) named SPI_MISO on the wire, and don't use that name anywhere
else. Enable the check first — Schematic Setup → Electrical Rules →
Violation Severity → Connections → set "Global label only appears once in
the schematic" to Warning — then run ERC (Inspect → Electrical Rules
Checker). The label reports:
[single_global_label]: Global label only appears once in the schematic
; warning
@(116.84 mm, 101.60 mm): Global Label 'SPI_MISO'
The checked-in file data/erc/samples/single_global_label.kicad_sch
reproduces this with one SPI_MISO global label on a wire between two
embedded one-pin symbols; the companion single_global_label.kicad_pro
carries the severity override that turns the check on. The embedded
symbols cost two lib_symbol_issues warnings about the missing repro
library — an artifact of the self-contained repro, not part of this
error. Adding a second SPI_MISO global label anywhere in the file drops
the violation; renaming the second copy to SPI_MIS0 instead produces
two violations, one per name.
Related errors
- Global label not connected anywhere else in the schematic
- Label not connected
- Labels are similar (lower/upper case difference only)
FAQ
ERC reports one unused label when there are two — why?
Because this check counts names, not label instances. Two global labels sharing one name make that name appear twice, so neither is flagged even if both are unconnected; dangling ends are the job of "Label not connected to anything". Two labels with different names produce two separate violations.
How do I find all global labels that appear only once in my schematic?
Set "Global label only appears once in the schematic" to Warning in Schematic Setup → Electrical Rules → Violation Severity, then run ERC. Each single-occurrence name gets exactly one marker, at the label itself. This works in KiCad 9.0 and later; the check does not exist in KiCad 8.
Is it wrong to use a global label just to name a net?
No. A global label is the standard way to force a net name for the PCB editor, netclass rules, or SPICE, even when the net never leaves the sheet. KiCad ships this check at Ignore severity precisely so that single-use naming labels don't generate noise. Leave it at Ignore, or exclude the markers on the deliberate ones if you've enabled it.
Sources
- Check implementation — CONNECTION_GRAPH::ercCheckSingleGlobalLabel, eeschema/connection_graph.cpp at KiCad 10.0.3
- Check implementation — CONNECTION_GRAPH::ercCheckSingleGlobalLabel, eeschema/connection_graph.cpp at KiCad 9.0.9.1
- Default severity (Ignore) — eeschema/erc/erc_settings.cpp at KiCad 10.0.3
- KiCad 9 Schematic Editor manual — List of ERC checks
- KiCad 10 Schematic Editor manual — List of ERC checks