HELP! Libraries are not recognized (schematic symbols)

bear in mind, now that i figured out how to solve this problem, and solved it myself, i am asking: 1) for more understanding of where libraries cna go and how they ought to be configured - in general and b) better documentation for all users – e.g.: added to your already existing and otherwise useful FAQ. TIA

Everywhere where your operating system allows KiCad to read from. You just need to point KiCad to the correct location. If the lib table uses path variables then point the path variables to the correct location. If not then you need to set the file path correctly in the lib table.
See Library management in KiCad version 5

Adding my comments to those from Rene,

You have {KICAD_SYMBOL_DIR} pointing to a local directory. It’s OK but bear in mind that the directories in all your machines must contain the same libraries if you want to work in the same projects.

And {KIPRJMOD} variables are different, so they also see different libraries. Same as before, trevor-riaa… or riia-discrete… should contain the same libraries in order to share the same projects.

When you say " i have"… pointing to a local directory - I didn’t point them anywhere. I have no idea how to point it to directories. Whatever is there was done by KiCAD itself. I am, in part, asking how i set my library location.

Now, you also emphasize the point of “local” directories. I presume you mean “on this machine”. Yes. It, IMO, needs to be that way or i could not work remotely - on a plane, in some airports - anywhere i don’t have good internet connection. So yes, i have everything local. I would prefer to have them in dropbox and synchronized, but again, i have no idea how to do that. KiCADs admin features are far from intuitive.

Can you help?

That’s right. With local I meant on this machine. I also work this way. But one must be careful to have libraries in all machines updated and synchronised.
At office one can have several computers that get the libraries from a unique server. And then keep a copy of the libary tree in the laptop.

From my experience with computers, intuitive is something personal. Back in 1986 for me it was not intuitive to double-click on an icon in order to open a document in a mac. I never argue about intuitive GUIs.

Well, @Rene_Poschl gave you an excellent link above.

You can also read about environment variable substitution in the manual
https://docs.kicad.org/5.1.5/en/eeschema/eeschema.html

Let’s go with {KICAD_SYMBOL_DIR}. Its use it’s not mandatory but it helps a lot.
It contains the path to the symbol libraries. And it is local to every machine (or to every kicad installation, but let’s make things easy and state we have only one version of kicad per machine).
So the {KICAD_SYMBOL_DIR}=/home/laptop/otherdicrectory/symbol variable in the laptop is different from the {KICAD_SYMBOL_DIR}= /home/user/dropbox/kicadsymbol at the office computer. But the trees under {KICAD_SYMBOL_DIR} are equal in both machines.
/home/user/dropbox/kicadsymbol/connector.lib and /home/laptop/otherdicrectory/symbol/connector.lib can be written {KICAD_SYMBOL_DIR}/connector.lib in both machines.
Otherwise, the long full path must be explicity written for every library.

Do not use the KiCad default path variables for personal libraries! If you must use path variables then generate your personal variables for your personal libs. See my FAQ for more details.

4 posts were split to a new topic: Which path variables to use for my personal lib vs the official lib?

OK, so i followed your link. It says that I shoudl go to preferences --> manage symbol libraries and… do exactly what? I see a window with a table in it and dozens of libraries (with their paths). Surely i don’t have to change them one by one, longhand?

Reading on it says i can add libraries (but do i want to add them? I just want to set the directory location where i will put them/create them…?)

Anyway, to do this it says to use the library manager. I cannot find a “library manager” under any of the menus. what is the library manager? How do i find it? And How does it relate to the manage symbol [footprint] libraries dialog that i currently have open?

Thanks, but this is none of this is clear to me. I would expect a button or field with “set library location” or something similar.

As always, thank you,

Grant

p: can i simply point these to a local dropbox folder so that they automatically synch across two or more laptops?

One more question: can I have KiCAD look in TWO places? One truly local and one a synced dropbox folder? Is there a problem if they contain duplicates?

That depends how they are added. The libs that are shipped with kicad use environment variables so these are easy to change by changing these variables.

If your personal libs do not use variables then yes you will need to change their path manually (the lib table is a simple text file so you can change it outside of kicad by use of a text editor)


At the very beginning of the linked article:

Again answered in the article

I remain confused. KiCAD most certainly does have a standard library location. When i installed KiCAD it somehow created libraries somewhere, filled in those paths, and later found the libraries. I had nothing to do with this process, and I have done nothing since to change it - in fact all i did is move my libraries to where KiCAD seemed to think they ought to be. KiCAD or its installer did it all. Same thing for users.

And i still don’t understand how to easily change that library location. You indicated to use the “library manager.” I maintain there is no library manager. You later say that “library manager” is actually “manage symbol library” dialog. Do you realize how confusing this is??? If oyu mean functionality of those dialogs, specify those dialogs and which functionality in them to use, not some mysterious and nonexistent “library manager”. I looked everywhere.

Now, moving on to the “manage symbol libraries” menu box, I don’t see any functionality that is labeled as “set library location”. I do see some text boxes with code in them below. I also see some buttons/icons, but no help, no explanation and no label for what exactly they do. Is this what you mean? If so, how exactly do they work? If i use them can i point to a folder, for example “dropbox/KiCAD Libraries” and set that location for all my libraries? Then all i need do is drop new libraries in there or create them at that location?

Note that i have read the article you reference, twice now. I realize this is the problem with open source - no one has the responsibility to document it from the user’s perspective - but documentation – written for a user not a developer – is crucial to helping bring new users to the product.

Please help me understand how the library location is set. It is still fuzzy to me.

1 Like

I think your confusion comes from the frame of thinking that kicad has some central library location where all libraries are expected to be. That is not the case.

It really doesn’t. It only has a default location for it’s own libraries. That’s just where the installation process happens to put them.

  1. You don’t have to put your libraries in the same location. In fact it’s discouraged to do so because you may experience data loss when installing next kicad update.
  2. You can move kicads libraries to another location if you want.
  3. You can even put every library in it’s own folder on different disks, network mounts, dropboxes/gdrives, etc. As long as it’s treated by system as normal file path (i.e. not a ftp:// or \smb share or something like that) you can store your library there. Standard permissions rules apply: if you want kicad to be able to modify the library the user running kicad has to have write permissions to the location where library is stored.

Manage symbol library dialog is just a GUI to modify a simple table that looks like this:

(fp_lib_table
  (lib (name Battery)(type KiCad)(uri ${KISYSMOD}/Battery.pretty)(options "")(descr "Battery and battery holder footprints"))
  (lib (name Button_Switch_Keyboard)(type KiCad)(uri ${KISYSMOD}/Button_Switch_Keyboard.pretty)(options "")(descr "Buttons and switches for keyboard applications"))
  (lib (name Button_Switch_SMD)(type KiCad)(uri ${KISYSMOD}/Button_Switch_SMD.pretty)(options "")(descr "Buttons and switches, surface mount"))
...

This is for footprints but symbols library looks similar.
To ignore the optional stuff there is just 2 fields there: library name and library path. Path can be any valid path, it doesn’t have to begin with variable or have a variable at all.
Variables just make it easy to refer to some central location, that way for example you can have all your libs be in D:\mylibs\footprints, create a variable ${MYFOOTPRINTS} with that value and then use that variable as a shortcut in library table. In fact the GUI will automatically substitute the portion of the path that equates to the variable if you add a library from anywhere within D:\mylibs\footprints.

Now here is the benefit: when you need to move your libraries from D:\mylibs\footprints to E:\Gdrive\kicadlibs all you have to do is move the files and then update ${MYFOOTPRINTS} to point to E:\Gdrive\kicadlibs instead of updating every single entry in lib table.

Regarding icons in the dialog hover over them to get a tooltip with explanation what they do.
To edit existing entries in the table just click in the field and enter text. For path field when you click on it a helper button that will launch system file selection dialog will appear. You can either edit path directly as text or use the selection dialog.

2 Likes

Hey thanks!

I need more time to dig into what you are saying, but so far, you are spot on what i have been slowing thinking myself. 1) KiCAD libraries can be anywhere. 2) They can be many places. 3) The tool (manage X libraries) let’s me point to ANY or ALL of them. If its that simple, i am flabbergasted at the documentation…

By the way i did some library tests and figured out that i cannot simply add locations to the list, i need to add specific libraries. This seems to be a pretty bad design. Easy i suppose. I also noted that if i add the contents of two, it creates duplicates in the table. I can see that leading to bad things ( data model corruption)

Yes KiCad comes with its own set of libraries. YOU AS THE USER ARE NOT SUPPOSED TO TOUCH THEM. This is why they are placed in read only directories protected by your operating system. (This is made clear in every tutorial i ever wrote about the topic of KiCads libraries)


You are supposed to make your own libraries living in their own file structure (see the graphics in the tutorial!)

If you move files after KiCad already has them in the lib table then of course KiCad will lose the knowledge of them. I stress it again:
KiCad has no special library location. There is no file system directory that is searched for library files to be used. You MUST add every library to the library table by use of the library managers for them to be available to you

I now know why a lot of people state “never go in customer support”.

Should i always write “use the footprint library manager or symbol library manager depending on which asset type you want to work on”? I mean a bit of logical thinking is to be expected!

I am not a developer! I am a user. I might however be an experienced KiCad user (after all a beginner will not write a good tutorial). The tutorials explain the best process i found.

And i got a lot of feedback by other users telling me that my tutorials are quite good (in person and also here on the forum). So while i acknowledge they are not perfect i would still argue you might be an exception here.
Also remember that the lecture is there to teach you how the library system works. It is not specifically written to solve your current problem! (A tutorial never is.) But if you understand the library system then you will be able to find a solution on your own.


Edit: The thing about the lib manager confusion made me so angry i did not even notice that @qu1ck already answered. So i also missed everything below that :wink:

So here the answers for that

Well is the below not enough to let you figure this out? (again from the lecture):

What to you mean by that?

1 Like

I agree. IMO the most natural expectation is that you just add a folder path in settings and KiCad would search and find all footprints and/or symbols there. But that’s not how it works, and I think that’s what Rene referred to: there’s no that kind of special library location.

Instead,

  • you have libraries somewhere
  • you add them to the library table
  • you can use path variables in the library table
  • by default KiCad comes with its own libraries, the path variables for those are predefined and those libraries are added to the default library tables
  • you can add your own libraries to the library tables and define your own path variables
  • you shouldn’t add your own libraries (footprint/symbol files) to the same place where the KiCad’s libraries are

I would not argue that this is a natural view. Like with a lot of things in technology different people have different expectations. I for example would not really expect a software to just add stuff without user interaction.

Additionally the use of the library manager really only is for large scale edits (advanced usecases).

If you add a lib in the normal way then you do not need to worry about this stuff as the symbol and footprint editors abstract the interaction away from the user (they only ask if you want this lib to be added globally or locally). This is also the case for adding a single downloaded asset (you either import the one symbol or footprint or you add an existing lib via the symbol or footprint editors)

It would however be nice to have a central program that i can use to add downloaded libraries in one go without needing to open both the symbol and footprint editor (possibly with a special library package file format. Then adding downloaded libs would truly be similar to installing extensions to other software making the use of the lib managers really only necessary for advanced usecases)

That wouldn’t be without user interaction; I would just add add a path to a path list where KiCad would search for libraries.

I’m not of course arguing this would be better for KiCad. That’s just how I would expect a simple system to work.

KiCad can definitely be made more intuitive in some areas. But to be honest i personally prefer powerful features over ease of entry (there are limited development resources available and a tradeoff must be made).
And to be honest KiCad is quite intuitive if you compare it to professional tools like for example cadence and catia (i assume altium will also work as an example but i personally never worked with it). For these tools you really need a week long training to even get the basics down while most of KiCads features can be discovered just by intuition and working with the tool.

However, some advanced features really need lectures to understand. One of them is proper library management IFF one wants it to be scalable or portable (most people do not discover on their own how to setup a system that way, but most don’t need that so it is ok).

from renee:

Yes KiCad comes with its own set of libraries. YOU AS THE USER ARE NOT SUPPOSED TO TOUCH THEM.

Renee - maybe this is the basic problem. I thought I was clear, but all I want is for KiCAD to recognize its own libraries. KiCAD, not me, installed them when i installed KiCAD, and when i updated libraries ( i got some message to update libraries, a script did it). I never touched them. When i would open a schematic, KiCAD could not find them. In my help request, I pointed out that they were in my user/library but KiCAD needs them in the /Library. How did i figure this out? I guessed, based on the paths shown in the manage symbol libraries dialog.

And yes, more work or not, i do think you need to refer to dialogs and tools by the name that KiCAD doe sin the UI -otherwise how will i know if it is the correct tool? remember, I was confused to begin with. Using an incorrect name just made me wonder if I was even in the right place. In fact, i initially assumed I was not. Its actually the only logical conclusion: you say X, I see Y I assume X is not Y.