Adding New Components
This guide documents the workflow for adding or modifying parts in kmlib-local. Use KiCad 9.x stable.
Before you start
- Collect the component datasheet, recommended footprint, and mechanical model.
- Use a unique, descriptive name. Prefer the manufacturer part number (for example
031-5431-1010). - Check for similar parts to avoid duplicates.
kmlib-local organization
The kmlib-local/ folder contains FEAST’s custom KiCad libraries. Components are organized into categorized KMLib_* libraries to avoid naming conflicts and improve discoverability.
Symbols
.kicad_sym files are prefixed with “KMLib_” and organized into the following categories:
| Category | Includes |
|---|---|
| Aesthetic | Logos, labels, decorative elements |
| Power | GND, +5V, VREF, net-ties, ferrite beads (logical role) |
| Passives | R, C, L, resistor networks |
| Discrete_Semiconductors | Diodes, BJTs, MOSFETs, TVS |
| IC_Analog | Op-amps, ADCs, DACs, comparators |
| IC_Digital | Logic gates, flip-flops, buffers |
| IC_MCU_MPU | MCUs, MPUs, SoCs |
| IC_Power | Regulators, PMICs, motor drivers |
| Sensors | Temp, pressure, IMU, light |
| Connectors | Headers, JST, USB, terminals |
| Switches | Tactile, rotary, DIP |
| Electromechanical | Relays, motors, buzzers |
| Misc | Crystals, jumpers, test points |
Footprints & 3D Models
.pretty files are prefixed with “KMLib_” while 3dmodels folders have no prefix. They are organized into the following categories:
| Category | Includes |
|---|---|
| Aesthetic | Logos, labels, decorative elements (no 3dmodels) |
| Boards_Modules | Discrete boards, modules, shields |
| Passives_SMD | 0402, 0603, 0805, 1206, 1210, 1812 resistors, capacitors, inductors |
| Passives_THT | Resistors, capacitors, inductors |
| IC_SMD | SOIC, TSSOP, QFN, BGA packages |
| IC_THT | DIP, SIP packages |
| Connectors | Headers, JST, USB, terminals |
| Switches | Tactile, rotary, DIP switches |
| Relays | Signal and power relays |
| TestPoints | Various test point footprints |
| Mounting | Mounting holes, standoffs |
1) Create or update the schematic symbol
- Open Symbol Editor and select the appropriate KMLib_* library based on component category.
- Create a symbol or duplicate a similar one.
- Populate properties:
Reference: family designator (U,J, etc.).Value: match the symbol name.Footprint:KMLib_<Category>:<footprint_name>once the footprint exists.Datasheet,Description,Keywords: copy from the datasheet.
- Set pin names, electrical types, and units. Follow KiCad’s symbol conventions for readability.
- Run Tools -> Symbol Checker and fix issues before saving.
2) Create or update the footprint
- Open Footprint Editor and select the appropriate KMLib_* library based on component category.
- Create the footprint in millimetres. Align the local origin sensibly (pin 1 or part centre).
- Add
F.SilkS,B.SilkS,F.CrtYd, andF.Fabgraphics following KiCad conventions. - In Footprint Properties -> 3D Models, reference
${KICAD_KML_CUSTOM_MODELS}/<category>/<model-file>. - Verify pad-to-pad spacing against the datasheet.
- Run Tools -> Footprint Checker and resolve errors.
3) Place the 3D model
- Put the STEP/WRL model in
kmlib-local/3dmodels/<Category>.3dshapes/matching the footprint category. - Reference it via the
${KICAD_KML_CUSTOM_MODELS}variable:${KICAD_KML_CUSTOM_MODELS}/<Category>.3dshapes/<model-file>. - Orient/scale in the 3D Models tab.
- Confirm with 3D Viewer.
4) Link symbol and footprint
- Update the symbol
Footprintfield toKMLib_<Category>:<footprint_name>matching the footprint library used. - If the part supports multiple packages, create aliases or variants with clear suffixes.
5) Validate
- Place the new symbol in a scratch schematic. Run ERC.
- Update the footprint on a dummy PCB. Run DRC and open 3D Viewer.
- Check
git statusfor unintended edits.
6) Commit and share
Stage the categorized files:
git add kmlib-local/symbols/KMLib_<Category>.kicad_sym
git add kmlib-local/footprints/KMLib_<Category>.pretty/<new-footprint>.kicad_mod
git add kmlib-local/3dmodels/<Category>.3dshapes/<model-file>
Commit with a clear message referencing the part number. If you updated a vendor submodule, commit that change separately so upstream updates stay traceable.