Error: Multiple footprints found

Until you ask KiCad to “Re-link …based on their reference designators”.

When at the project end I reorganize references (I do it by dividing schematic into blocks, that I position far away of sheet, annotate, and then move them back), thanks to everything being linked by uids I can just update pcb and all references are correctly updated.

During years I found that if I forget to do that order in references nothing wrong happens. Computer reading P&P file doesn’t protest :slight_smile:

Based on what you assume they are changed?
I think they are never changed, but I have never did any experiments to check it and never looked for them in schematic/pcb files.

I changed them earlier on myself in the schematic and now end up with the duplicates in the pcb.

The problem is, I now have many duplicates (C3, C4, C5 etc, see screenshot). I don’t know exactly what went wrong. I tried to clean up, no matter what I do (checking Re-link, tried several combinations), I cannot get rid of the duplicates!

There must be some function to fix the PCB especially if the components are linked by a unique ID.
afbeelding

You should be running the Schematic Editor and the PCB layout via the Project Interface ? . . . if you start them directly (rather than from the Project I/F) this kind of thing can happen as they are not properly linked.

1 Like

It was my question on you writing “if these unique IDs are removed or changed”.
Now you write that you have changed them.
How did you changed unique IDs?
I don’t know the way to do it. May be by using text editor and finding these IDs and changing them randomly.

I agree with you. I have never met situation when after updating from schematic I had elements doubled.

What always help is to turn back time using yesterday backup.

I wasn’t quite clear on that, I meant when the symbols with these unique IDs are removed or changed, the appropriate pattern on the PCB should be removed or changed (stay in sync as they are not linked to the reference designators).

Altium also works with unique IDs and never had the problem with syncing schematic <> pcb.

So I wonder what went wrong and what I can do to fix it. I will share the project.

@RaptorUK i opened all from the main project interface and also when selecting components they correspond over the schematic and pcb editor.

Are you able to share this project ? You can ZIP it up from the project I/F and attach it here.

It crashed when I tried to save, second time within a few days. Attached the log file as well.

Anyway, see the project attached.

Scherm­afbeelding 2025-08-15 om 14.03.41

IsoDap.zip (862.7 KB)

The first question is easy to answer. The second one is more difficult.

First: you are now having (in the state which you uploaded the zip file) for example two C4 capacitors in the PCB. You are trying to “Re-link footprints to schematic symbols based on their reference designators”.

For KiCad this means it’s trying to ignore old UUIDs and create new UUDIDs, using for example “C4” as the link between the schematic and the PCB. Now it doesn’t know what it should do with two C4 footprints. The situation is impossible to handle automatically. Because you seem to have no PCB yet, only the randomly placed footprints, the easiest way to fix this is delete everything and do the update with correct settings.

Normally the “correct settings” are without the “Re-link” option. That option is reserved for some special situations. See more about this in Update PCB from Schematic's match methods - #2 by eelik.

From the information you have given I can only guess an answer for the second question. You have imported from Altium something: maybe the schematic only? But you have footprint library called “AltiumImport”, so I don’t know if you have imported only the library and started the schematic from scratch in KiCad. It’s difficult for me to follow the previous comments in this thread. The current state of the project doesn’t tell how the situation emerged. If you tell all the steps which you did in order, we may be able to tell. But maybe you understand it already if you read the FAQ article.

1 Like

For now, I done this and this is okay. What if one spent days on a layout and find out later? Then it’s not realistic to delete all the components. How hard can it be to show a dialog to delete abundant components? All discrepancies can be easily solved when the user does an ‘import from SCH’.

Normally the “correct settings” are without the “Re-link” option. That option is reserved for some special situations. See more about this in Update PCB from Schematic’s match methods - #2 by eelik .

I did change that option to see if it would fix the problem. I understand the way the symbol linking works, the UID is similar to what Altium uses. With Altium it’s possible to automatically match or do manual (per component matching. I never had any issues here and used automatic matching 95% of the time.

You have imported from Altium something: maybe the schematic only? But you have footprint library called “AltiumImport”, so I don’t know if you have imported only the library and started the schematic from scratch in KiCad.

The schematic was built from scratch and I used symbols from my Altium library.

I think it’s not hard to come up with a better and more user-friendly matching flow which solves all mismatches either by prompting or default setting.

Symbol ID match > OK
Symbol ID match but properties don’t > (prompt for) update
Symbol ID exist at SCH but not at PCB. Is reference designator present at PCB?

  • yes > (prompt for) update
  • no > (prompt to) add to PCB

Symbol ID exist at PCB but not at SCH > (prompt to) add to SCH. Is reference designator present at SCH?

  • yes > (prompt for) update
  • no > (prompt to) add to SCH

This way syncing can work both ways easily.
I made a quick demo to show how things can be easily and very user friendly solved:
KiCad - Sync with schematic

I just can’t see how this could be possible. You noticed the problems right away, right? Who would do layout with doubled components for a day without noticing it, especially when KiCad actually told about the problem?

Not all. If you have in one way or another created a situation where there are doubled footprints and try to Re-link by refdes, KiCad can’t decide which of the footprints are to be deleted.

Yes, it happens already, when using the default matching method (by UUID).

It doesn’t need to prompt when using the default matching method, it just updates the refdes.

KiCad does that without prompting when using the default matching method.

I’m not sure you have understood how KiCad works in this respect. When doing Update PCB from Schematic, KiCad updates only the PCB, and that’s what it must do. There’s Update Schematic from PCB which is a different function and it can’t work as a mirror compared to Update PCB.

In KiCad it’s possible to create situations which are unsolvable without user intervention, and they require some user knowledge about what should be done to fix the situation. This may not be ideal or optimal, but behind it is the logic that the schematic and the PCB aren’t tied together tightly and updates don’t happen on the fly. The situation is different in for example Eagle where the reference designators are the only link and you can’t separate the schematic from the PCB. That logic causes other problems which KiCad avoids.

KiCad could be more user friendly in this respect. A need for an FAQ article often shows some deficiency in usability. I agree that something could be done. But I think your table just doesn’t work for KiCad, although it can be used as a checklist for possible situations.

I just can’t see how this could be possible. You noticed the problems right away, right?

I worked on LARGE designs with 1000+ components. It can be just one symbol which catches your attention in the last stage…

Not all. If you have in one way or another created a situation where there are doubled footprints and try to Re-link by refdes, KiCad can’t decide which of the footprints are to be deleted.

There’s at least the option to come up with a prompt which show solutions, for example:

  • (force) delete non-linked symbols from PCB
  • add and link symbols to SCH

It doesn’t need to prompt when using the default matching method, it just updates the refdes.

Yes, it depends on if the user doesn’t have to be notified (like a logical action to update the refdes).

I’m not sure you have understood how KiCad works in this respect. When doing Update PCB from Schematic, KiCad updates only the PCB, and that’s what it must do. There’s Update Schematic from PCB which is a different function and it can’t work as a mirror compared to Update PCB.

Yes I understand that, this is exactly similar to Altium. I think Altium lacks a ‘sync’ function in this respect too, but at least it didn’t give any unsolvable problems.

But I think your table just doesn’t work for KiCad, although it can be used as a checklist for possible situations.

I presented it as an idea, it will probably not be rock solid but maybe it can be a source for inspirational motivation / brainstorming / discussion. I am curious tho in what situation it won’t work.

If you used the Re-link option once, the UUID’s get hussled around, and unchecking the checkbox does not repair the project.

You should not have used the Re-link option in the first place. If you had left that off, the problem would not have occurred.

KiCad also already has: PCB Editor / Tools / Update Schematic from PCB, and this also has the option to Re-link footprints to schematic symbols based on their reference designators.

I’m guessing that the biggest problem here is that you’re inexperienced with KiCad, and intuitively attempting to find the exact same functions as you are used to. Also, when you are experienced with a program, you usually have a fixed set of workflows you use from which you know they work. When you are inexperienced in a new software suite and trying things out, you’re much more likely to make mistakes, and also to bump into bugs, as unusual workflows are often less thoroughly debugged.

It’s nice and enthusiastic and want to help, but get acquainted with KiCad first. You may discover that a lot of your wishes are already implemented (but in a slightly different manner). And if you know KiCad better, you can also come up with ideas that fit better in KiCad’s workflow.

Well, I work with students and LOVE working with them to build tools from an unbiased perspective, since they’re not used to the application yet. To make it more intuitive, I listen to suggestions and think ideas through to see whether it’s worth improving or changing the tool.

I think my ideas could be valuable at this stage, and I’d love to share them.

Good ideas never hurt; bad ideas can be easily tested, learned from, and discarded.

Yes, that is definitely also true. People who have used a piece of software for a long time have often gotten so used to the (smaller) quirks that they don’t even realize it anymore. And both newcomers and people who have experience with other programs can have good ideas (for improving KiCad). But also: There is no lack of ideas or improvements for KiCad. There are around 1500 open issues on gitlab, and I guess that around 1000 are for new idea’s or for features not yet implemented. Each month around 300 issues get fixed / resolved, but each month also the around the same number of new issues are added, so the total of open issues has been surprisingly constant for a few years.

I see, and I know a lot has changed as I tried it about two years ago. I see many new features and I really value KiCad’s current state / intuitive workflow. I am positively surprised.

I already mentioned that I don’t feel experienced enough to do ‘solid’ feature requests at GitLab, but I feel free to share my initial ideas here (that’s what a forum is for IMHO, unless it’s not appreciated).

When you look at: About - KiCad.info Forums You’ll see that this forum has 16k registered users, and 1k active users in the last month. If they all start posting all the ideas they have, this would be a very busy forum, and there would be a lot of duplicates.

I have created over 100 issues on gitlab myself, some are bug fixes, others are ideas, and when I search gitlab before creating an issue for an Idea, I quite often found a very similar idea was already posted by someone else. The number of ideas is really quite sufficient to keep all of KiCad’s devopers busy for a few years.

I didn’t use the Re-link option initially (off by default), I enabled it hoping it should solve the abundant symbols.

I don’t know what I did exactly and I am pretty sure it’s due my inexperience that it went wrong. Unfortunately I don’t know at what point it failed.

When you look at: About - KiCad.info Forums You’ll see that this forum has 16k registered users, and 1k active users in the last month. If they all start posting all the ideas they have, this would be a very busy forum, and there would be a lot of duplicates.

I understand the concern about volume and duplicates. I did search on duplicates or similar threads before posting, but I may have missed an existing thread. I’m happy to consolidate or move my posts.

Thanks for the earlier comments. I’d like to move this conversation forward and stay on the technical topic.

Finding (current project)
While checking the .kicad_pcb, I see duplicate entries for the same reference and sheet path, which triggers “Error: multiple footprints found.” For example:

(line 4652) C4, path “/2d2016b1-dbd6-457d-8a9a-407bfc6e520e”
(line 5050) C4, path “/2d2016b1-dbd6-457d-8a9a-407bfc6e520e”

For clarity: Re-link was off initially. I only enabled it later hoping to clean things up. Earlier I added a new C4 (with the correct footprint) and deleted the old C4. I wouldn’t expect that to create duplicates, so either I missed a step or an orphan footprint remained.

Rather than re-litigating the cause, I’d like to discuss a design that could make this safer and more intuitive.

Proposal: unified two-way sync (SCH <> PCB) dialog

Mockup: https://codepen.io/Rolf-Nooteboom/full/JoYpGgG

Goal: One command: Sync that makes symbols / footpatterns match, direction-agnostic. Quiet when the mapping is deterministic; surface a dialog only for conflicts (think Google Drive/Dropbox sync behavior).

It auto-matches parts by current IDs. If those aren’t available, it uses simple rules (reference/ value / footprint) and shows three clear lists: missing in SCH, missing on PCB, and conflicts, so you can link, choose SCH or PCB, or park conflicts.

Looking for feedback on:

Are the following rules sufficient?

  • ID not linked > Link (default)
  • Not matching symbols > update PCB / update SCH
  • Not present on PCB > add to PCB (default) / remove from SCH
  • Not present on SCH > add to SCH (default) / remove from PCB

Any edge cases?
Would “auto when deterministic, prompt on conflict” be acceptable?

Happy to iterate the mockup based on your input. :partying_face:

My ½¢ opinion is that a simple UI change should discourage people from turning on option 1.

Change the check box:

[_] Re-link footprints to schematic …

to two mutually exclusive radio buttons:

(*) Re-link footprints to schematic … based on UUID (recommended)
(_) Re-link footprints to schematic … based on reference designators (special uses only)

I think that’s at least more clear for inexperienced users. Although I cannot come up with a reason that one would like to re-link ALL tightly ID linked symbols? That is a potential for a mess up.

Maybe it is good for the symbols which lost the ID and have this option for the unlinked symbols only. Breaking the tight link without warning and by just checking a checkbox as it is now is recipe for issues I got in.

1 Like