Overview
KiCad is organized as a monorepo with modular components, each serving specific purposes in the EDA workflow. The codebase follows a clear separation between core libraries, common utilities, application modules, and third-party dependencies.Top-Level Directory Structure
Core Application Modules
eeschema/
Schematic editor application containing:
- Symbol libraries and management
- Schematic capture tools
- Electrical rules checking (ERC)
- Bill of materials (BOM) generation
- Netlist generation
dialogs/- UI dialogs specific to schematic editingsim/- SPICE simulation integrationtools/- Interactive editing toolswidgets/- Custom UI widgets for schematic editor
pcbnew/
Printed circuit board editor containing:
- PCB layout and routing tools
- Design rule checking (DRC)
- Footprint libraries and management
- 3D visualization integration
- Manufacturing output generation
router/- Interactive and automatic routing enginedrc_engine/- Design rule validationtools/- PCB editing toolsgenerators/- PCB generators (teardrops, etc.)
3d-viewer/
Standalone 3D visualization module:
- OpenGL-based 3D rendering
- STEP/VRML model loading
- Ray tracing capabilities
- Export to various 3D formats
gerbview/
Gerber and drill file viewer:
- Multi-layer Gerber visualization
- Excellon drill file support
- Manufacturing file verification
cvpcb/
Component-to-footprint assignment tool:
- Interactive footprint selection
- Filtering and searching capabilities
- Library browsing
pagelayout_editor/
Drawing sheet (title block) editor:
- Custom title block design
- Template management
- Variable substitution support
pcb_calculator/
Electrical calculator utilities:
- Transmission line calculations
- Component value calculators
- PCB fabrication parameters
bitmap2component/
Bitmap to footprint/symbol converter:
- Image import and vectorization
- Footprint generation from artwork
- Symbol creation from images
kicad/
Project manager application:
- Project file management
- Application launcher
- Project tree view
- Version control integration
Libraries and Utilities
libs/
Core reusable libraries independent of EDA functionality:
core/ - Base utilities with no KiCad dependencies:
base64.cpp- Base64 encoding/decodingutf8.cpp- UTF-8 string handlingobservable.cpp- Observer pattern implementationprofile.cpp- Performance profiling utilitiesversion_compare.cpp- Semantic version comparison
kimath/ - Mathematical algorithms:
- Geometry primitives (points, vectors, boxes)
- Polygon operations
- Coordinate transformations
- Collision detection
- Bezier curve calculations
kiplatform/ - Platform abstraction layer:
- Operating system specific functionality
- File system operations
- UI integration (GTK, macOS, Windows)
- Hardware acceleration detection
sexpr/ - S-expression parser:
- Used for KiCad’s native file formats
- Fast serialization/deserialization
- Streaming support
kinng/ - NNG (nanomsg) wrapper:
- IPC communication for API
- Message queue implementation
- Request/response patterns
common/
Shared code used across all KiCad applications:
Key components:
tool/- Tool framework (actions, events, managers)gal/- Graphics abstraction layer (OpenGL, Cairo)view/- Canvas and viewport managementwidgets/- Reusable UI componentsio/- File format parsers and writersdrawing_sheet/- Title block renderingfont/- Font rendering (stroke and outline fonts)plotters/- Output format generators (PDF, SVG, PS, DXF)settings/- Configuration managementgit/- Version control integrationdatabase/- Database library support
kiway.cpp- Application communication buskiface_base.cpp- DSO/DLL interface implementationpgm_base.cpp- Program lifecycle managementeda_base_frame.cpp- Base window frameworkproject.cpp- Project data structure
include/
Public header files and interfaces:
- Organized by subsystem
- Defines public APIs
- Contains interface declarations
- Template implementations
tool/- Tool framework headersgal/- Graphics API headersview/- Visualization headersfont/- Font rendering headersplugins/- Plugin interfaces
External Integrations
scripting/
Python scripting support:
- SWIG bindings generation
- Python API exposure
- Plugin framework
- Interactive Python console
kicadplugins.i- SWIG interface definitionpython_scripting.cpp- Python integrationpython_manager.cpp- Plugin lifecycle
api/
Modern IPC API (introduced in KiCad 8):
proto/- Protocol Buffer definitionscommon/- Shared message typesboard/- PCB-specific commandssch/- Schematic-specific commands
schemas/- JSON schemas for validation
- Uses Protocol Buffers for serialization
- NNG for transport layer
- Supports external tools and automation
plugins/
3D model import plugins:
3d/idf/- IDF (Intermediate Data Format)3d/oce/- STEP file support via OpenCASCADE3d/vrml/- VRML/WRL model import
Build and Infrastructure
cmake/
CMake build system modules:
- Platform detection
- Dependency finding
- Compiler configuration
- Package creation
thirdparty/
Vendored third-party libraries:
- Modified or pinned versions
- Libraries not available in standard package managers
- Platform-specific dependencies
libcontext/- Coroutine supportpotrace/- Bitmap tracingfmt/- String formattingnlohmann_json/- JSON parsing
qa/
Quality assurance and testing:
unittests/- Unit test suitesqa_utils/- Testing utilitiespcbnew_utils/- PCB testing helperseeschema_utils/- Schematic testing helpers
tools/
Development and build utilities:
- Code formatting tools
- Documentation generators
- Build helpers
- Migration scripts
utils/
Utility applications:
- IDF tools
- STEP exporters
- File format converters
Resources
resources/
Non-code assets:
bitmaps_png/- UI icons and imagesproject_template/- Default project templates- Platform-specific packaging files
demos/
Example projects:
- Reference designs
- Feature demonstrations
- Tutorial projects
translation/
Internationalization:
.pofiles for various languages- Managed through Weblate
- Language resource compilation
Build Targets Organization
FromCMakeLists.txt, the build order is:
- Core libraries (
libs/) - Resources (
resources/) - Third-party (
thirdparty/) - Common library (
common/) - Scripting (
scripting/) - API (
api/) - ifKICAD_IPC_APIenabled - Applications:
- 3D viewer
- Eeschema
- Gerbview
- Pcbnew
- Page layout editor
- Bitmap converter
- PCB calculator
- Plugins (
plugins/) - must build before kicad - CvPCB - depends on pcbnew
- KiCad project manager - depends on pcbnew, eeschema, api
- Tools and utilities
- QA tests - if
KICAD_BUILD_QA_TESTSenabled
File Organization Patterns
KiCad follows consistent patterns:- Headers in
include/: Public interfaces - Implementation in module directories: Private implementation
- Dialogs: Separate subdirectory with UI files
- Tools: Dedicated
tools/subdirectory for interactive tools - Widgets: Reusable UI components in
widgets/ - IO: File format handlers in
io/or module-specific locations
Dependency Hierarchy
Module Independence
Each major application (eeschema, pcbnew, etc.) is built as a separate DSO/DLL:- Can be loaded independently
- Communicates via KIWAY interface
- Shares common code through libcommon
- Enables Python integration per module
- Supports separate testing
See Also
- Core Libraries - Detailed library documentation
- Plugin System - Plugin architecture
- File Formats - File format specifications