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 directories are prefixed with “KMLib_” while .3dshapes 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 |
| Proto | Prototyping footprints for hand soldering and testing |
| Proto_Decorators | Prototyping decorator elements such as those for solder tracing |
Design Blocks
Design blocks are stored under kmlib-local/blocks/ and use KiCad 9’s native Design Block format for reusable schematic fragments.
At the top level, design blocks are organized into category directories with the suffix .kicad_blocks.
Each category directory is prefixed with KMLib_ and represents a logical grouping of reusable circuit designs (for example: ADCs, Power, Interfaces, Microcontrollers).
Within each .kicad_blocks directory, individual reusable designs are stored as .kicad_block subdirectories.
Each .kicad_block directory represents a single design block and contains:
- One
.kicad_schschematic file implementing the circuit - One
.jsonmetadata file describing the block (name, description, versioning, etc.)
They are categorized as follows:
| Category | Includes |
|---|---|
| ADCs | Analog-to-digital converter circuits |
| Analog | General-purpose analog signal conditioning |
| Digital | Digital logic support circuits |
| Interface | Communication and external interface circuits |
| Memory | Non-volatile and external memory devices |
| Microcontroller | MCU reference implementations |
| Networks_Active | Active network circuits |
| Networks_Passive | Passive networks |
| Power | Power management and regulation circuits |
| Sensor | Sensor devices and interfaces |
Several of the design blocks derived from: williamweatherholtz/kicad_subs.
The nRF54L design blocks are from hlord2000/nordic-lib-kicad.
Working with Design Blocks
Design blocks are reusable schematic fragments managed through KiCad’s Design Blocks panel. They allow you to save and reuse circuit designs across projects. See the KiCad documentation for more details: KiCad Design Blocks.
Using design blocks
- Ensure design block libraries are registered (see Getting Started).
- In the Schematic Editor, open View → Panels → Design Blocks.
- Browse the library tree or use the filter textbox to search by name, description, or keywords.
- Select a design block to preview it, then double click or right click → Place Design Block.
- Configure placement options:
- Place as sheet: Inserts as a hierarchical sheet (click twice to define corners).
- Keep annotations: Preserves symbol references instead of reannotating.
- Place repeated copies: Continues placing after each insertion (press Esc to cancel).
- Click in the canvas to place the block.
Creating design blocks for kmlib-local
Prerequisites: The appropriate KMLib_<Category>.kicad_blocks library must already exist. If you need a new category library:
- Right click in the Design Blocks panel → New Library…
- Choose Global library table (available to all projects).
- Set location to
${KMLIB_LOCAL}/blocks/and name asKMLib_<Category>.kicad_blocks.
To save a new design block:
- Create and test your circuit in a schematic (entire sheet or selected objects).
- Right click the target KMLib library in the Design Blocks panel and choose:
- Save Current Sheet as Design Block… for entire sheet, or
- Save Selection as Design Block… for selected objects.
- Configure in the Design Block Properties dialog:
- Name: Descriptive identifier (e.g.,
MCP73831_LiPo_Charger). - Description: Brief explanation of circuit function.
- Keywords: Space-separated search terms.
- Default Fields: Optional key/value pairs for hierarchical sheets.
- Name: Descriptive identifier (e.g.,
- Click OK. KiCad automatically creates a
.kicad_blockdirectory with.kicad_schand.jsonfiles.
To edit existing blocks: Right click the design block → Properties… to modify metadata.
Committing to the repository
git add kmlib-local/blocks/KMLib_<Category>.kicad_blocks/<BlockName>.kicad_block/
git commit -m "Add <BlockName> design block: <brief description>"
Adding Individual Components
The following steps cover adding or modifying individual symbols, footprints, and 3D models to kmlib-local.
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
${KMLIB_LOCAL}/3dmodels/<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 using
${KMLIB_LOCAL}/3dmodels, for example:${KMLIB_LOCAL}/3dmodels/<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.