Organizing personal (symbol) libraries?

So, I created a mess!
Adding a special symbol for some µC, a special IC or connector, here and there, I created a project specific symbol library. But - no wonder - these get used in other projects.
So it looks like the concept of project specific libs isn’t very helpful for such a case. What I need is a globally accessible private lib. But within this lib, I’d like to group things. Sub-libs within a lib.
In the KiCAD-libs, this problem also is creaping up. For example MCU_* They would need (my opinion) to have a top group MCU, then within that a group Microchip and then within that the families:

  • MCU
    • Microchip
      • ATTiny
      • PIC32
      • etc …
    • NXP
      • HC11
      • HC12
      • etc.
    • ST
      • etc…
    • Texas
      • etc…

Same for connectors, RF, Sensor, … almost everything.
I know, asking to rearrange the existing KiCAD libs is asking for way too much. This would break all existing schematics and layouts and I will end in hell for this stupid proposal,
I know, this grew historically. Excuse accepted.

But, at least, for my personal use. Is there a way to organize things in a more structured way?

  • MyLibs
    • µC
    • Connectors
      • JST
      • Mini-DIN
    • VReg

I need to fix this! It drives me crazy! I’ll have a walk now …

1 Like

My saying is: Keep things as simple as possible. A single centralized/globally library implies more cons than pros (constant maintenance, definition of structures and component groups, increased processing/parsing in software, etc). A waste of time and energy for which I have never found a justification.

Alternative: One library (symbols, footprints, 3D) for each project.

Here is a very simple example:
Programming µCs (Microchip) with ICSP.
I’m using pogo pins and that requires a different footprint than the existing ICSP. Furthermore, the KiCAD symbol uses an extra pin I do not use. Making it 6 pins that have no clear orientation. For development, I use pin headers with that extra pin removed, so it is impossible to orient it in the wrong way. And I’ll use that in all of my projects. But having a duplicate in every project is not very helpful and most of all, having to duplicate it before I can use it makes no sense to me.

This different footprint will be related to the project X and you can remove the existing ICSP in order to minimize the project X footprint library.

Modify this symbol as you wish and save it in the project X library symbol.

Why? Do you currently have many projects or do you plan to have many more?
IMO Duplicate parts is the only cons but I don’t see it as that serious.
Think about it carefully. It is an important decision and once the way of working with libraries is decided it is not usually changed.

I have more than one projects and I will continue using symbols and footprints I made. I don’t think that this is hard to understand.
In software-development I learned that copying code is an alarm signal for lack of structure. SW-development even has a word for it “double maintenace”.

Maybe the “_” in the KiCAD libs is an alarm signal too.
Aplifier_Buffer, Amplifier_Audio, Amplifier_Current, Amplifier_Video, instead of

  • Amplifier
    • Buffer
    • Audio
    • Current
    • Video

Database desgin also learned that. If you have to repeat information, you are doing something wrong. The name is “normalisation rules”. That “Amplifier_” will ring all bells of a DB-designer. First normalisation rule violated.

And whenever you ignore to put structure in your work, you’ll suffer later. Pile of “important notes”, pile of differently sized resistors still in their strips without any marking. And why does Mouser, Digikey, TME, $YouNameThem even have categories and subcategories? A simple flat list would do the job!
“Resistor_SMD_0603_ThickFilm_Vishay_Series4711_Reel_3k3_1Percent” is an obvious name.

Ah, but you can deselect libraries to be used! Well, Amplifier_Buffer, Amplifier_Video, Amplifier_ Its obvious that this is getting out of control (or already did, as you wish), and I want to avoid this at least with my stuff

I use only my libraries and only global libraries.
May be you will find something helping in:

The wishlist item to add categories in the normal symbol picker is here:

You can give it a “thumbs up” on Gitlab to show support (no comment necessary).

I believe the HTTP “database” library feature already provides categories of a sort, though I’ve not personally used them and I couldn’t quickly find a screenshot of them. Not sure if the OBC database library has that option.

AFAIK, the “project” libraries are a compatibility leftover from earlier versions (before 6.0), designed to avoid breaking designs when updating the global libraries.
In 6.0 and higher, the symbols used are included in the .kicad_sch file, making the feature obsolete.

Concerning the libraries, you seem to regard them as “component” libraries.
They’re not. They’re for symbols (=generic graphics).
There’s a database approach under way that might be more to your taste.

I use them as libraries for symbols. Symbols that don’t exist in the provided libs. I do not intend to modify KiCAD-provided libs, as they are not in my control and might get updated.
They should be strictly read only. And that’s how I consider them, not my property.

That seems to be the only solution to the problem.

They are strictly “read only”.
Now days you can modify/change a footprint or symbol; but only in a project, not in a Kicad library.

No, see https://klc.kicad.org/ G1 _ General Guidelines, G1.1

For whatever reason (probably lost in the mists of time), Kicad only has a single layer for library structure, hence: Amplifier_Buffer, Amplifier_Audio, Amplifier_Current, Amplifier_Video
instead of multi layer folders in folders.
Amplifier
* Buffer
* Audio
* Current
* Video

As @ML9104 suggests, the database approach is really the only solution to your requirements.

So, they are an alarm signal and should be treated that way. The underscore is abused to add additional levels.
Oh wait!
Connector Bus_PCI_Express_$
Transistor Q_PNP_$
Transistor Q_PNP_Darlington_$

You can find many more.

That flat hirachy initially worked. As more and more contributions followed (I’m not complaining about that!) the existing structure becomes more and more disfunctional.

Did you read:

If you did, you would find that spaces between letters are not permitted in library names, hence the use of underscores.
If you also read further down the KLC, you will find that it is recommended to have no more than about 200 (I think) items in any one library, to prevent very poor library loading times.

I must first admit that Kicad software is not my forte, BUT:

I can see multi-level libraries causing extremely slow loading times, especially in the case of items such as transistors.
How many symbols, in how many libraries, would need to be loaded every time a single transistor needed to be found?
On top of that, scroll to the transistor folder, click, scroll to the transistor type, click, scroll to the required transistor, click; every time you want a transistor?
How much more time would be wasted waiting and scrolling over the current system?

I hope the database approach is a little more than simple tuples associating symbols with footprints. The “Annotation” of a schematic is a lot more than just assigning unique refdes. Take a resistor for example, how many resistor symbols do you really need in a schematic lib? I suggest one or two. How many footprints? Maybe a dozen. How many manuf part numbers? zillions. The construction of a “Complete” schematic / BOM is a multilayer annotation process from schematic through PBC design through purchasing. The library structures need to support this and doing so would greatly simplify both the library and usage.

But folks need to re-think how they do things and that seldom happens.

Bob K.

I prefer to have as many symbols as individual resistors we use. This just helps me (when drawing the schematic) to know which values we already use (so stock them) and think every time before increasing the number of drawers for resistors.

You are suggesting 1000sof resistor symbols. You cannot be serious. Stock storage is a completely different item. For a single purchased part you could have reels, pieces of tape and then parts in kits. Sliding that kind of info into a schematic library just does not work. Schematic library structures just don’t support that type of data.

Bob K.

Yes, and that’s why the database library system exists.

I’m serious and the task is exactly to not have 1000 but may be 50…100 only.
My way is that after inserting symbol from library I don’t touch any parameters of it.
So if I have 1k 0603 resistor in library and put it on schematic then find that I have to replace it with 2k than I never ever change its value but I replace the whole symbol with 2k symbol from library. If I don’t have 2k in library then I have to insert it into library but before it I have to consider if I really need 2k and may be I can use 2k2 that I already have in library (and we just have them from past orders).
For many years we were using haf-automat to put elements at PCB. This automat had a ring with 50+ small drawers for elements. Using the limited number of different values help a lot as changing from assembling one PCB to the other needed to replace contents of less number of drawers. The best would be 0 changes needed.
It was not me who had to prepare the automat to assemble PCBs so I could say - not my problem but this is not consistent with my approach to other people.

I’m not writing about having information about store in schematic, but only about helping myself to not use too many not needed values just because calculator said it should be used. For me the easiest way is that when I want to put symbol at schematic I see I don’t have it in library. And when I see I have it than we obviously use this element for some other PCB so we can use also for this just designed one.
Like in my example - in probably 99% cases when from calculation you get 2k you can use 2k2.

That’s the way i do it.

Yes, it adds duplicates, and getting all the symbols/footprints ready is some initial work.

But: in nearly every project, i need some modifications at least on some symbols. Its not even uncommon to have 2 slightly different symbols for 2 identical parts in one and the same schematic - just to optimize the drawability and readability of the schematic.

Im not a fan of the “heap of randomly placed symbols with nothing but global labels” - style “schematics” (or glorified netlists as they are). I try to draw schematics “old style”, with wires, and buses etc. And for that, I’ve seen over and over again that project specific variations are needed. A global library would just not do.

Same with footprints. I recreate many historic boards, for the Commodore PET range mostly. And thus i need rather customized footprints for every project. Different pad styles, different (or absent) silkscreen etc etc. Having them in project specific libraries offers a much cleaner approach as filling a global library with all the variants and sub variants that are used in only one specific project anyway.

Recent example: 6551 ACIA. One Part, 2 Projects, two completely different symbols, depending on the rest of the schematic.

PS: and yes, the right one violates the inputs left, outputs right mantra, but that was a necessity there

What is surprising in these schematics is that:

  • in one 1M paralel to quartz was used and in second not,
  • when capacitor was added that only at one quartz end.

Yea. Right one is a recreation of the SUPERPET addon for the cbm PET. Left one is a addon card im designing, and i used the recommendations from the still produced W65C51N variant.