How do proper parts/components librarys, what have I missed?



Were thinking of switching over to kicad in my company and I don’t understand how the library creation works.

If I under stood correctly I have to make a single copy of the symbol for EVERY single component(consisting of a symbol+footprint+manufacturing data etc). Surely I must have misunderstood this as if this is true, then for our resistors I must save 1000 values10 footprints10 manufacrurers5 tolerances3temp ranges = 1500000 symbols instead of just 1 and then link all of this together in some kind of database. Not to mention the risk of having quite a few different symbols for resistors in your design.

How is this intended to work?

Kind regards



If you want each combination as a preassigned unique part, then there must be a data record associated with that. In KiCad that data record is a symbol. If you use 1.5 million parts, then that data needs to be held somewhere.

I think most people in KiCad use a generic symbol and fill in the details as needed. KiCad doesn’t allow default values, so that reduces the number quite a lot.

How does it work with your current tool?


Well normally the one making the schematic makes all the desig decisions so basically when placing a resistor you select resistor->sm or th->power->tolerance -> manufacturer -> then value.

The designer, maning the schematic has to make all these discussions when drawing the schematic, not 60 days later when the net list is generated to the pcb tool.
And certainly not by the person doing the layout.
(In our current system we have 15000+ different resistor and capacitor manufacturing numbers)


Sure, same with KiCad.


Yes Great! But how do I make the library and how do I make all parts when going over from our current? Ideally I’d like to extract all the data and make a script to get all the data in. Can you explain the file structure etc cuss I can’t figure out this unless I make a lot of library files, with x copies of the same symbol? What if I want to change my appearance of my symbol? Do I then have to change in all x?
Or can I make all parts pointing to the same symbol?


One reason why one might want one symbol per part is that you can then add a footprint connection and ordering information. The reason for having it in the symbol is that it allows you to have somebody approve these.

For resistors the lib would then explode. I would personally only use one resistor symbol per footprint. (so one R_0603_1608Metric and one for R_0805_2012Metric) And have everything else filled out by the designer via the value field. (But i am not doing this as a job.)

If you want to go further, make one symbol per possible footprint, tolerance and power combination. (At least power/footprint combination makes sense as they are linked.)

Having such a partly specified symbol now gives you the option to have some pre assigned fields (footprint code, tolerance code, power code)
The designer then chooses only the resistor value as required. (Everything else is already in the symbol)

This approach does not allow to have an order number or even a house part number directly in the symbol. (While making the symbol you are missing the information about which value it will have)

One option is a BOM script that builds the house part number from all the symbol defined fields plus the designer field(s) (Example for an easy to generate HPN: R_[footprint code][power code][value code]_[tolerance code]). This number can then be used to look up which resistor to buy.

A problem might be that it leaves too much degrees of freedom for your liking. To circumvent this you can to add a few more fields. This will increase either the work expected by the designer or the lib size.

Another problem with this approach is that your purchasing department might want to limit which resistors your designers can use. But this can be done with the same script. It can simply check if the combination of fields is in the approved parts list. (But it will rely on designers checking if their schematic fulfills this requirement.)

Another option is to have the part selection for such parts completely external to kicad. That external tool then makes a project specific symbol per the designer requirements. (This symbol can then hold all the ordering information as well to everything my partly specified example also holds.)

Just to make it clear, you don’t need one footprint per symbol. Many symbols can link to the same footprint. (But you might require a script that does combine the information from the BOM with the information of the pos file.)


Firstly thank you so much for your time and lengthy and very in-depth answers! Much appreciated!

So basically we would need to add another thing to it to make a library, where the scheme designer has a “limited” but unique part pool with all the necessary info we need. We can’t have designers being able to select parts that doesn’t exist as you point out would be the draw back on this.

Is this feature something that is in the Roadmap of KiCad or do you know of any external project similar to this? Is there a way we could add this (if we develop it) to the main program so it is ensured to have some life time?

Again thank you!


You will most likely want this tool to interface your already existing part management system.

I think i read here on this forum in the past that eda tools have a “standardized” interface api for such tools. I don’t know if such an interface is already on the roadmap but you can always ask on the mailing list or the bugtracker.


@Andy_P who is using this had put up some blog about how it works and what was involved.
It boils down to a script that you execute once you extract the BOM from KiCAD, which then uses a ‘lookup table’ to convert the house-part number + value from KiCAD into a order-able number.
KiCAD doesn’t have this kind of tool-chain on the Roadmap as of now afaik.


I have done something similar to and inspired by @Andy_P but instead of a spreadsheet based solution, I use PartKeepr as a backend which runs on a MySQL database. My solution will pick up specific components from the BOM that are in the database via the part number. Jellybean parts like resistors/MLCC are identified by their component value, footprint and tolerance/dielectric. If I need to specify an exact component, this option allows me to do this by providing the specific component number.

This way I can separate purchasing from the design. The solution allows me to identify my stock level (and does nice barcoded labels/picklist and prepares shortfall orders). It links to Octopart to bring in additional component information.


First of all I want to say that due to it’s Open Source nature all file formats specifications are also open. All of KiCad’s files (Schematics, Libraries, PCB, etc) are also in human readable ASCII. Component such as resistors / capacitors are usually < 20 lines of text. For IC’s which are drawn as a rectangular box with pins add 1 line of text for each pin.

About half a year ago I had an idea and wanted to play a bit with python, (of which my experience is almost non-existent). As a first program I decided to make a script for generating an EEschem lib for a custom connector symbol with different pin counts. It was less than a day’s work, including struggling with python itself and reading/ understaning the library file documentation.

There are also undoubtedly scripts on the 'net to generate components. You can use and modify them to your own needs.

There are also a bunch of side projects from KiCad. In one of the projects I saw, you can draw pin attributes (names input or output, orientation) in a spreadsheet and generate component symbols from that. In the example ( youtube vid ) it was used to make an EEschem symbol from a 200+ pin count IC by copying whole columns of text from the datasheet (PDF) to a spreadsheet, ad some attributes, run the script and you have a complete EEschem symbol. The process for the 200+ pin count component was < 2 minutes.

Komplete Kicad library simbols are also starting to appear directly from Digikey.
File formats are documented on KiCad file formats.
Or a direct link to launchpad:

(Damn I’m really struggling here with all this fancy forum auto formatting).


This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.