How Do You Create and Manage KiCad Footprint and Symbol Libraries?
Last updated 30 June 2026 · 10 min read
Direct Answer
KiCad stores schematic symbols in .kicad_sym files and PCB footprints in .pretty directories containing .kicad_mod files. Create custom symbols in the Symbol Editor (Tools → Symbol Editor) and custom footprints in the Footprint Editor (Tools → Footprint Editor). Both can be saved to a project-scoped library that travels with the project folder, or to a global user library shared across all designs. All KiCad library files are plain text, making them straightforward to version-control with Git.
Detailed Explanation
KiCad manages schematic symbols and PCB footprints in separate library systems, each with its own editor and file format. This separation is intentional: a single resistor symbol covers every physical package, and the footprint choice is an independent layout-stage decision. The practical implication is that both assets must be correct and consistent — a mismatch between symbol pin numbers and footprint pad numbers produces wrong connections on the assembled board.
KiCad ships with an extensive official library covering thousands of standard parts. Engineers need custom library entries for proprietary connectors, company-specific component variants, parts released after the library was last updated, and package variants not yet in the official collection.
For a conceptual explanation of how symbols and footprints relate to each other, see PCB Footprint vs Schematic Symbol: What Is the Difference?.
KiCad Library File Formats
| Asset | Format | Notes |
|---|---|---|
| Symbol library | .kicad_sym | One file per library, containing multiple symbols; plain text |
| Footprint library | .pretty/ directory | Each .kicad_mod file inside is one footprint; the directory is the library unit |
| Individual footprint | .kicad_mod | Plain text; one file per footprint |
| 3D model | .step, .wrl | Referenced by footprint via path; not part of the library table |
KiCad 6 introduced the .kicad_sym format, replacing the older .lib + .dcm pair from KiCad 5. KiCad 8 can open (but not write back to) legacy .lib files — for any new library work, create .kicad_sym files. All formats are plain text, making them diff-friendly for version control.
The Library Table
KiCad discovers libraries through two library tables — one for symbols, one for footprints:
- Global table — stored in the KiCad user configuration directory (on Windows:
%APPDATA%\kicad\8.0\sym-lib-tableandfp-lib-table; on macOS/Linux:~/.config/kicad/8.0/). Lists libraries available in every KiCad project on that machine. - Project table — a
sym-lib-tableandfp-lib-tableplaced inside the project folder, adding libraries scoped to that project only.
Add and manage library table entries via Preferences → Manage Symbol Libraries (in the Schematic Editor or Symbol Editor) and Preferences → Manage Footprint Libraries (in the PCB Editor or Footprint Editor). Each entry has a Nickname (the identifier used in symbol/footprint references) and a Library Path.
| Scope | Table location | Best for |
|---|---|---|
| Global | KiCad config directory | Frequently reused parts across many projects |
| Project | Inside the project folder | Parts for this design only; deliverables sent to clients |
Project-scoped libraries keep each design self-contained: when you hand a project folder to a colleague or fabrication house, all custom parts travel with it.
Creating a Custom Symbol
Open the Symbol Editor via the Symbol Editor button in the KiCad project manager, or via Tools → Symbol Editor from the Schematic Editor.
1. Create or open a library. Go to File → New Library to create a new .kicad_sym file, then choose whether to add it to the global or project table. Alternatively, right-click an existing library in the left panel tree and select New Symbol to add to that library.
2. Set symbol properties. When creating a new symbol, set:
- Symbol name — use the manufacturer part number for IC-specific symbols (e.g.
STM32G030K8T6), or a generic descriptor for passives - Reference designator prefix —
Ufor ICs,Jfor connectors,Rfor resistors,Cfor capacitors,Qfor transistors - Default value — displayed as the value or part number on the schematic
3. Draw the body. Use the Add Rectangle tool to draw the symbol's body outline. KiCad symbols use a 100 mil (2.54 mm) grid — pins placed on this grid connect cleanly to schematic wires.
4. Add pins. Press P to place each pin. For every pin, set:
- Pin number — must match the physical pin number in the datasheet exactly; this number ties the symbol pin to the footprint pad via the netlist, so an error here silently assigns the wrong net to the wrong copper pad
- Pin name — the signal name from the datasheet (e.g.
PA0,NRST,VDD) - Electrical type —
Input,Output,Bidirectional,Power Input,Power Output,Passive,No Connect,Open Collector, etc.; ERC uses these types to detect conflicting drivers on a net and undriven inputs - Pin length — 100 mil is standard; place pin endpoints on the 100 mil grid so wires snap correctly
5. Multi-unit symbols. For ICs with repeated functional blocks (quad op-amp, dual comparator), use multi-unit symbols: each unit represents one functional block of the IC but they share a single BOM entry. Set the unit count in symbol properties when creating the symbol.
6. Save. Press Ctrl+S to save to the library file.
Creating a Custom Footprint
Open the Footprint Editor via the Footprint Editor button in the KiCad project manager, or via Tools → Footprint Editor from the PCB Editor.
1. Create or open a footprint library. Go to File → New Library to create a new .pretty directory, then add it to the footprint library table.
2. Locate the reference dimensions. Before drawing pads, identify:
- The component datasheet's Recommended PCB Land Pattern section (preferred) — pad dimensions derived by the manufacturer for solder fillet formation
- The package drawing — physical body and lead dimensions if no recommended land pattern is provided
- IPC-7351 (stable standard) — for SMD packages without a datasheet land pattern, the standard defines three density classes: Maximum (Class B), Nominal (Class M), and Minimum (Class C); KiCad's official library uses Nominal density
3. Add pads. Press O to place each pad. Key pad properties:
- Pad number — must match the symbol pin number for the same physical connection; the netlist links these
- Pad type —
SMD(copper on one side),Through-hole(plated, connecting front and back copper), orNPTH(non-plated mechanical hole) - Size — copper pad dimensions from the recommended land pattern
- Layer assignment — SMD pads typically use
F.Cu+F.Paste+F.Masktogether
Thermal / exposed pads. QFN, DFN, and similar packages have a large central exposed pad (EP) for thermal dissipation. Create this as a standard SMD pad with the correct dimensions. To control solder paste volume and reduce voiding under the pad, the stencil aperture should typically be subdivided into a grid of smaller apertures — commonly 25–50% paste coverage of the total pad area, with individual apertures no larger than approximately 1.5 mm × 1.5 mm (per IPC-7525 solder paste stencil design guidelines, though exact sizing depends on paste type and assembly process). Set aperture overrides in the pad's Paste/Mask Overrides properties.
4. Add the courtyard. Draw a closed shape on F.Courtyard around the complete component, extending typically 0.25–0.5 mm beyond the package outline. DRC flags courtyard overlaps between adjacent components. A footprint without a courtyard silently skips all courtyard-related DRC checks.
5. Add silkscreen and fabrication layers. Add the package body outline to F.Fab (the assembly drawing layer visible to the pick-and-place operator) and the component reference outline to F.SilkS. Silkscreen lines must not overlap copper pads — KiCad DRC flags this as a solder joint risk.
6. Assign a 3D model. In footprint properties, add a path to a .step or .wrl 3D model. Use ${KICAD8_3DMODEL_DIR} for models from the KiCad official 3D library, or ${KIPRJMOD} for project-local models. A 3D model enables component clearance checking in View → 3D Viewer during board layout.
7. Save. Press Ctrl+S to save the footprint file to the .pretty library directory.
Version Control for KiCad Libraries
KiCad's plain-text library files produce meaningful diffs in Git, making version control practical.
Include in Git:
project-libs.kicad_sym # custom symbol library
project-libs.pretty/ # custom footprint library directory
project-libs.pretty/*.kicad_mod # individual footprint files
sym-lib-table # project symbol library table
fp-lib-table # project footprint library table
Add to .gitignore (KiCad auto-generated files that must not be committed):
fp-info-cache
*.kicad_prl
*.lck
The fp-info-cache file regenerates automatically whenever KiCad scans footprint libraries and produces large, noisy diffs with no useful content — always exclude it. .lck files appear only while KiCad has a file open and must never be committed.
Team library pattern. A common approach for teams or multi-project organisations is a dedicated company-kicad-libs Git repository containing both .kicad_sym files and .pretty directories. Individual projects include it as a Git submodule and reference it via the project-level sym-lib-table and fp-lib-table. This gives every project access to the same verified library while keeping library history and project history independent.
Design Considerations
- Derive footprint pad dimensions from the recommended land pattern, not the package body. The package body drawing shows the physical component outline; the recommended land pattern gives the correct copper pad sizes for reliable solder joint formation. These differ — package lead dimensions do not account for solder fillet extension beyond the lead, and using body dimensions to set pad size typically produces undersized pads.
- Pin number agreement between symbol and footprint is mandatory. Symbol pin 1 connects to footprint pad 1 via the netlist. A mismatch silently crosses two signals at the PCB level. ERC cannot detect this (it operates on symbols only); DRC cannot detect it (it operates on footprints only). The mismatch only surfaces when the assembled board is powered up.
- Keep project-specific parts in project-scoped libraries. A growing global library becomes difficult to maintain and may contain outdated or superseded parts. Project-scoped libraries keep each design self-contained and prevent global library changes from silently affecting past projects.
- Back up custom library files before major KiCad version upgrades. KiCad has migrated its library format between major versions. Library files not tracked in version control can be lost if a format migration behaves unexpectedly.
- For designs with many proprietary or custom components where incorrect land patterns could cause assembly failures, Zeus Design's PCB design service handles full component library build-out as part of the design engagement, including IPC-7351-compliant land pattern derivation.
Common Mistakes
- Pin number mismatch between symbol and footprint. The most consequential library error — it silently crosses signals. Verify pin numbering against the datasheet immediately after creating a symbol and its paired footprint, and re-check when adapting an existing symbol for a new package variant.
- Building footprint pads from package body dimensions instead of the recommended land pattern. Package body dimensions describe where the component sits on the board. The recommended land pattern describes where the solder joints form. Using body dimensions typically produces undersized pads that fail inspection or cause poor solder joint formation.
- Missing courtyard boundary. KiCad skips courtyard overlap and clearance DRC checks for footprints without a courtyard. A footprint missing its courtyard can be placed so close to an adjacent component that pick-and-place equipment cannot seat it, or that the courtyard overlap would have caught a spacing violation.
- Creating a library file without registering it in the library table. Creating a
.kicad_symfile or.prettydirectory does not automatically make it visible to KiCad's editors. The file must be added to the symbol or footprint library table via Preferences → Manage Libraries before it appears in the chooser. - Relying on KiCad's auto-import of legacy
.libfiles for ongoing work. KiCad 8 can open.libfiles, but saving triggers a conversion to.kicad_sym. If the original.libfile is in version control but the converted file is not committed, the converted version exists only on the local machine and is invisible to teammates or after a clean checkout. - Not subdividing the thermal pad stencil aperture. A single large paste aperture over a QFN exposed pad deposits excess solder paste, which can lift the component body during reflow. Set per-pad paste aperture overrides in the footprint editor rather than relying on the stencil supplier to subdivide the aperture after the fact.
Frequently Asked Questions
- How do I know what pad dimensions to use when creating a KiCad footprint?
- Start with the component datasheet's recommended PCB land pattern — most datasheets include a section labelled 'Recommended Land Pattern' or 'PCB Footprint' with pad dimensions, spacing, and courtyard clearance. If only the package body dimensions are provided, use IPC-7351 Nominal (Class M) density calculations to derive pad sizes: the standard defines pad extension beyond the lead toe, heel, and side as a function of lead pitch. Avoid scaling KiCad's official library footprints by eye — KiCad's library uses IPC-7351 nominal density and its pad dimensions are deliberately set for solder fillet formation, not to match the package body outline.
- Can I use KiCad's official library symbols and footprints as a starting point for custom parts?
- Yes — in both the Symbol Editor and Footprint Editor you can copy an existing library entry and save the copy to your own library as the basis for a custom variant. This works well for standard packages (e.g. copying a generic 0402 resistor footprint and adjusting pad dimensions for a non-standard tolerance variant) or for ICs with nearly identical pinouts. Always verify every copied entry against the target component's datasheet before use — library mistakes propagate silently to every schematic and layout that references the part.
References
Related Questions
How to Use KiCad: Schematic Entry and PCB Layout Workflow
A practical guide to the KiCad PCB design workflow — schematic entry, ERC, footprint assignment, PCB layout, routing, DRC, and Gerber output.
How to Export Gerber Files from KiCad for PCB Fabrication
How to export Gerbers, drill files, and assembly data from KiCad 8 — layer selection, coordinate origin, and Gerber verification before fab submission.
PCB Footprint vs Schematic Symbol: What is the Difference?
A schematic symbol is a component's logical representation; a PCB footprint is its physical land pattern. Here's how the two relate and differ.
What Is Schematic Capture, and How Does It Actually Work?
Schematic capture is the process of drawing a circuit's components and connections in EDA software to produce the netlist that drives PCB layout.
What Are PCB Design Rules (DRC), and Why Do They Matter?
PCB design rules define the manufacturability and electrical constraints a layout must meet. DRC is the automated check that verifies them before fabrication.
What Files Do You Need to Send a PCB for Fabrication?
A PCB fabrication package needs Gerber files, an NC drill file, a stack-up drawing, and assembly data. Here's exactly what each file is for and when.
Related Forum Discussions
ERC errors I can't clear after first real schematic — 'PWR_PIN undriven' and 'pin not connected' in KiCad
First time drawing a schematic in KiCad that I actually intend to route a real board from, not just for reference. Components placed, wires
PCB design rule check keeps failing — annular ring and acid trap errors I don't understand
Doing my first real multi-component board (not a breadboard-to-perfboard thing, an actual two-layer PCB) and DRC is throwing a wall of red I