# devbisme/skidl architecture

> Architecture diagram of the GitHub repository devbisme/skidl, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/devbisme/skidl
- Repository: https://github.com/devbisme/skidl

## Overview

SKiDL is a Python electronic-circuit design package: users describe parts and connectivity in Python, check electrical rules, then generate netlists and other design outputs. The README also documents hierarchical designs, smart part search, schematic visualization, netlist conversion, and SPICE simulation. The graph uses those documented capabilities and the source tree; where implementation excerpts were not supplied, it avoids asserting detailed internal call wiring.

Main entry points: [`src/skidl/__init__.py`](https://github.com/devbisme/skidl/blob/master/src/skidl/__init__.py) (Python API), [`src/skidl/schlib.py`](https://github.com/devbisme/skidl/blob/master/src/skidl/schlib.py) (Symbol libraries), [`src/skidl/part_query.py`](https://github.com/devbisme/skidl/blob/master/src/skidl/part_query.py) (Part search), [`src/skidl/scripts/netlist_to_skidl_main.py`](https://github.com/devbisme/skidl/blob/master/src/skidl/scripts/netlist_to_skidl_main.py) (Conversion CLI)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_design["Circuit design"]
  node_api["Python API<br/>[__init__.py]"]
  node_circuit["Circuit hierarchy<br/>[circuit.py]"]
  node_part["Parts and pins<br/>[part.py]"]
  node_connectivity["Nets and buses<br/>[net.py]"]
  node_design_classes["Design classes<br/>[design_class.py]"]
end

subgraph group_libraries["Parts and libraries"]
  node_library["Symbol libraries<br/>[schlib.py]"]
  node_kicad_libraries["KiCad readers<br/>[lib.py]"]
  node_part_search[("Part search<br/>[part_query.py]")]
  node_skidl_parts["Built-in parts<br/>[__init__.py]"]
end

subgraph group_validation["Validation and conversion"]
  node_erc["Electrical checks<br/>[erc.py]"]
  node_netlist_import["Netlist conversion"]
  node_conversion_cli["Conversion CLI"]
end

subgraph group_outputs["Outputs and simulation"]
  node_backend["Tool selection<br/>[__init__.py]"]
  node_netlist["Netlist generation<br/>[gen_netlist.py]"]
  node_schematics["Schematic layout<br/>[__init__.py]"]
  node_schematic_backend["KiCad schematics<br/>[gen_schematic.py]"]
  node_spice["SPICE integration<br/>[pyspice.py]"]
  node_spice_tool["SPICE tool<br/>[spice.py]"]
end

node_designer(("Circuit designer"))
node_kicad(("KiCad tools"))
node_spice_engine(("SPICE engine"))

node_designer -->|"writes circuit code"| node_api
node_api -->|"builds design"| node_circuit
node_api -->|"creates parts"| node_part
node_api -->|"connects nets"| node_connectivity
node_api -->|"defines classes"| node_design_classes
node_api -->|"loads symbols"| node_library
node_library -->|"parses symbols"| node_kicad_libraries
node_library -->|"loads parts"| node_skidl_parts
node_designer -->|"searches parts"| node_part_search
node_part_search -->|"indexes libraries"| node_kicad_libraries
node_api -->|"checks design"| node_erc
node_designer -->|"converts netlist"| node_conversion_cli
node_conversion_cli -->|"invokes converter"| node_netlist_import
node_api -->|"selects tool"| node_backend
node_api -->|"generates netlist"| node_netlist
node_netlist -->|"writes netlist"| node_kicad
node_api -->|"creates schematic"| node_schematics
node_schematics -->|"generates schematic"| node_schematic_backend
node_schematic_backend -->|"writes schematic"| node_kicad
node_api -.->|"runs simulation"| node_spice
node_spice -.->|"uses tool"| node_spice_tool
node_spice_tool -.->|"simulates circuit"| node_spice_engine

click node_api "https://github.com/devbisme/skidl/blob/master/src/skidl/__init__.py"
click node_circuit "https://github.com/devbisme/skidl/blob/master/src/skidl/circuit.py"
click node_part "https://github.com/devbisme/skidl/blob/master/src/skidl/part.py"
click node_connectivity "https://github.com/devbisme/skidl/blob/master/src/skidl/net.py"
click node_design_classes "https://github.com/devbisme/skidl/blob/master/src/skidl/design_class.py"
click node_library "https://github.com/devbisme/skidl/blob/master/src/skidl/schlib.py"
click node_kicad_libraries "https://github.com/devbisme/skidl/blob/master/src/skidl/tools/kicad10/lib.py"
click node_part_search "https://github.com/devbisme/skidl/blob/master/src/skidl/part_query.py"
click node_skidl_parts "https://github.com/devbisme/skidl/blob/master/src/skidl/tools/skidl/libs/__init__.py"
click node_erc "https://github.com/devbisme/skidl/blob/master/src/skidl/erc.py"
click node_netlist_import "https://github.com/devbisme/skidl/blob/master/src/skidl/netlist_to_skidl.py"
click node_conversion_cli "https://github.com/devbisme/skidl/blob/master/src/skidl/scripts/netlist_to_skidl_main.py"
click node_backend "https://github.com/devbisme/skidl/blob/master/src/skidl/tools/__init__.py"
click node_netlist "https://github.com/devbisme/skidl/blob/master/src/skidl/tools/kicad10/gen_netlist.py"
click node_schematics "https://github.com/devbisme/skidl/blob/master/src/skidl/schematics/__init__.py"
click node_schematic_backend "https://github.com/devbisme/skidl/blob/master/src/skidl/tools/kicad10/gen_schematic.py"
click node_spice "https://github.com/devbisme/skidl/blob/master/src/skidl/pyspice.py"
click node_spice_tool "https://github.com/devbisme/skidl/blob/master/src/skidl/tools/spice/spice.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_api,node_circuit,node_part,node_connectivity,node_design_classes toneBlue
class node_library,node_kicad_libraries,node_part_search,node_skidl_parts toneAmber
class node_erc,node_netlist_import,node_conversion_cli toneMint
class node_backend,node_netlist,node_schematics,node_schematic_backend,node_spice,node_spice_tool toneRose
class node_designer,node_kicad,node_spice_engine toneIndigo
```

## Components

### Circuit design

- [Python API](https://github.com/devbisme/skidl/blob/master/src/skidl/__init__.py): `src/skidl/__init__.py`
- [Circuit hierarchy](https://github.com/devbisme/skidl/blob/master/src/skidl/circuit.py): `src/skidl/circuit.py`
- [Parts and pins](https://github.com/devbisme/skidl/blob/master/src/skidl/part.py): `src/skidl/part.py`
- [Nets and buses](https://github.com/devbisme/skidl/blob/master/src/skidl/net.py): `src/skidl/net.py`
- [Design classes](https://github.com/devbisme/skidl/blob/master/src/skidl/design_class.py): `src/skidl/design_class.py`

### Parts and libraries

- [Symbol libraries](https://github.com/devbisme/skidl/blob/master/src/skidl/schlib.py): `src/skidl/schlib.py`
- [KiCad readers](https://github.com/devbisme/skidl/blob/master/src/skidl/tools/kicad10/lib.py): `src/skidl/tools/kicad10/lib.py`
- [Part search](https://github.com/devbisme/skidl/blob/master/src/skidl/part_query.py): `src/skidl/part_query.py`
- [Built-in parts](https://github.com/devbisme/skidl/blob/master/src/skidl/tools/skidl/libs/__init__.py): `src/skidl/tools/skidl/libs/__init__.py`

### Validation and conversion

- [Electrical checks](https://github.com/devbisme/skidl/blob/master/src/skidl/erc.py): `src/skidl/erc.py`
- [Netlist conversion](https://github.com/devbisme/skidl/blob/master/src/skidl/netlist_to_skidl.py): `src/skidl/netlist_to_skidl.py`
- [Conversion CLI](https://github.com/devbisme/skidl/blob/master/src/skidl/scripts/netlist_to_skidl_main.py): `src/skidl/scripts/netlist_to_skidl_main.py`

### Outputs and simulation

- [Tool selection](https://github.com/devbisme/skidl/blob/master/src/skidl/tools/__init__.py): `src/skidl/tools/__init__.py`
- [Netlist generation](https://github.com/devbisme/skidl/blob/master/src/skidl/tools/kicad10/gen_netlist.py): `src/skidl/tools/kicad10/gen_netlist.py`
- [Schematic layout](https://github.com/devbisme/skidl/blob/master/src/skidl/schematics/__init__.py): `src/skidl/schematics/__init__.py`
- [KiCad schematics](https://github.com/devbisme/skidl/blob/master/src/skidl/tools/kicad10/gen_schematic.py): `src/skidl/tools/kicad10/gen_schematic.py`
- [SPICE integration](https://github.com/devbisme/skidl/blob/master/src/skidl/pyspice.py): `src/skidl/pyspice.py`
- [SPICE tool](https://github.com/devbisme/skidl/blob/master/src/skidl/tools/spice/spice.py): `src/skidl/tools/spice/spice.py`

### Other components

- **Circuit designer**
- **KiCad tools**
- **SPICE engine**

## Connections

- Circuit designer → Python API: writes circuit code
- Python API → Circuit hierarchy: builds design
- Python API → Parts and pins: creates parts
- Python API → Nets and buses: connects nets
- Python API → Design classes: defines classes
- Python API → Symbol libraries: loads symbols
- Symbol libraries → KiCad readers: parses symbols
- Symbol libraries → Built-in parts: loads parts
- Circuit designer → Part search: searches parts
- Part search → KiCad readers: indexes libraries
- Python API → Electrical checks: checks design
- Circuit designer → Conversion CLI: converts netlist
- Conversion CLI → Netlist conversion: invokes converter
- Python API → Tool selection: selects tool
- Python API → Netlist generation: generates netlist
- Netlist generation → KiCad tools: writes netlist
- Python API → Schematic layout: creates schematic
- Schematic layout → KiCad schematics: generates schematic
- KiCad schematics → KiCad tools: writes schematic
- Python API → SPICE integration: runs simulation
- SPICE integration → SPICE tool: uses tool
- SPICE tool → SPICE engine: simulates circuit
