pcbjam/docs/features/libraries/0001-library-management.md
Istvan Matejcsok 08796e1c5e docs: library management feature design notes
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 07:50:57 +02:00

2.8 KiB

How KiCad manages libraries — embedded vs. referenced

Question

If I create a design that uses some component parts and open it in a brand-new KiCad build (no libraries installed), are the parts burned into the file, or do I still need the original libraries downloaded?

Short answer

Mostly yes — KiCad caches/embeds the part definitions into the design file itself, so existing files open and render without the original libraries. The details differ between schematic symbols, PCB footprints, and 3D models.

This matters for the WASM build: it determines whether we need to ship library files to the browser to view/edit a given file.

Schematic symbols (.kicad_sch)

KiCad 6+ writes a (lib_symbols ...) block near the top of every schematic file. This is a full embedded copy of every symbol used on the sheet — pins, graphics, fields, the lot. On open:

  • KiCad renders and edits from this embedded cache, not from the original library.
  • Opening on a fresh install with zero libraries works fine — the parts are effectively burned in.
  • Each symbol keeps a lib_id (e.g. Device:R) which is just a name link back to the source library. That link is only used when you explicitly run Tools → Update Symbols from Library, or when placing a new instance.

In KiCad 5 and earlier the same caching was done via an external <project>-cache.lib sidecar file next to the project — same idea, just not inline.

PCB footprints (.kicad_pcb)

Footprints are always fully embedded — no caching ambiguity. Every footprint instance carries its complete geometry (pads, courtyard, silkscreen). A .kicad_pcb is entirely self-contained; the .pretty footprint libraries are never needed to open or edit a board.

3D models — the exception

By default, 3D models (.step / .wrl) are not embedded. They are stored as file path references, often via env vars like ${KICAD8_3DMODEL_DIR}. On a fresh machine the board still opens, but the 3D viewer shows nothing/placeholders unless those model files exist.

KiCad 7+ added an Embedded Files feature (Board / Schematic Setup → Embedded Files) to explicitly bundle 3D models, fonts, etc. into the design file for true portability.

Implications for kicad-wasm

A .kicad_sch or .kicad_pcb opened in the browser build will render and edit correctly without downloading any libraries, because symbol/footprint definitions travel inside the file. Libraries are only required for:

  1. Placing new parts — the symbol/footprint chooser needs library tables plus the .kicad_sym / .pretty files.
  2. 3D rendering — unless models are embedded.
  3. "Update from Library" workflows.

So for a viewer, or even a basic editor of existing files, we can skip shipping libraries entirely.