No description
- Python 100%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .forgejo/workflows | ||
| circuits.d | ||
| docs | ||
| generated | ||
| schemas | ||
| scripts | ||
| src/circuitci | ||
| tests | ||
| .gitignore | ||
| .pre-commit-config.yaml | ||
| .python-version | ||
| pyproject.toml | ||
| README.md | ||
| ROADMAP.md | ||
| uv.lock | ||
circuitci
CI/CD for electronics. Define circuits as YAML/JSON — circuitci generates KiCad netlists, schematics, BOM CSVs, runs PySpice simulations, and validates results against expected behavior.
Quick Start
# Install dependencies
uv sync --all-groups
# Set KiCad symbol path (KiCad 8/9 symbols required)
export KICAD9_SYMBOL_DIR=/usr/share/kicad/symbols
# Generate artifacts for all circuits
uv run python -m circuitci generator
Output lands in generated/<circuit_name>/:
<name>.py— SKiDL script<name>_bom.csv— Bill of Materials<name>.net— KiCad netlist<name>.kicad_sch— KiCad schematic
Add a Circuit
mkdir -p circuits.d/my_circuit
Create circuits.d/my_circuit/circuit.yaml with a BOM and netlist. See
docs/input-format.md for the full spec.
Documentation
How It Works
circuit.yaml/json ──→ SKiDL script ──→ .net netlist
──→ .kicad_sch schematic
──→ BOM CSV
──→ PySpice simulation ──→ validation report
──→ Lcapy symbolic analysis
Triggered by pushes to circuits.d/ — CI runs lint+tests on PRs, artifact
generation runs on merge to main and pushes to the assets branch.
Requirements
- Python 3.12+
- KiCad 8 or 9 symbol libraries (
kicad-symbols) - ngspice (optional, for simulation)