# diodeinc/pcb architecture

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

- Interactive diagram: https://gitdiagram.com/diodeinc/pcb
- Repository: https://github.com/diodeinc/pcb

## Overview

This is a Rust-based PCB design tool whose main user workflow is to describe a circuit in Zener, build the design, and generate KiCad layout files. The repository also includes schematic analysis, manufacturing-data editing and export, DFM checks, visualization, and publishing capabilities. The README establishes the main workflow; source-index references and excerpts support a few internal relationships. Many feature modules were not sampled, so their internal call paths are left unspecified.

Main entry points: [`crates/ipc2581/src/parse.rs`](https://github.com/diodeinc/pcb/blob/main/crates/ipc2581/src/parse.rs) (IPC parser), [`crates/pcb/src/main.rs`](https://github.com/diodeinc/pcb/blob/main/crates/pcb/src/main.rs) (PCB CLI), [`crates/ipc2581/src/dom.rs`](https://github.com/diodeinc/pcb/blob/main/crates/ipc2581/src/dom.rs) (IPC document tree), [`crates/pcb-zen-core/src/lang/eval.rs`](https://github.com/diodeinc/pcb/blob/main/crates/pcb-zen-core/src/lang/eval.rs) (Zener evaluation)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_design["Design and build"]
  node_cli["PCB CLI<br/>[main.rs]"]
  node_build["Zener build<br/>[build.rs]"]
  node_zener_eval["Zener evaluation<br/>[eval.rs]"]
  node_zener_modules["Zener modules<br/>[module.rs]"]
  node_schematic["Schematic model<br/>[physical.rs]"]
end

subgraph group_layout["KiCad and checks"]
  node_layout_gen["KiCad layout<br/>[lib.rs]"]
  node_schematic_analysis["Schematic analysis<br/>[analysis.rs]"]
  node_dfm["DFM checks<br/>[dfm.rs]"]
  node_rectify["Footprint alignment<br/>[raster.rs]"]
end

subgraph group_manufacturing["Manufacturing data"]
  node_ipc_parse["IPC parser<br/>[parse.rs]"]
  node_ipc_dom["IPC document tree<br/>[dom.rs]"]
  node_ipc_types["IPC data types<br/>[ecad.rs]"]
  node_ipc_edit["IPC editing<br/>[edit.rs]"]
  node_ipc_units["IPC units<br/>[units.rs]"]
  node_population_edit["Population editing<br/>[population_edit.rs]"]
  node_assembly_report["Assembly reports<br/>[report.rs]"]
  node_manufacturing_exports["Manufacturing exports<br/>[export.rs]"]
end

subgraph group_services["Publishing and services"]
  node_auth["API authentication<br/>[auth.rs]"]
  node_publishing["Project publishing<br/>[publish.rs]"]
  node_remote_sandbox["Remote sandbox<br/>[remote_sandbox.rs]"]
end

node_designer(("PCB designer"))

node_designer -->|"runs"| node_cli
node_cli -.->|"runs build"| node_build
node_cli -.->|"runs layout"| node_layout_gen
node_zener_eval -->|"evaluates"| node_zener_modules
node_ipc_parse -->|"parses into"| node_ipc_dom
node_ipc_parse -->|"constructs"| node_ipc_types
node_ipc_parse -->|"uses units"| node_ipc_units
node_ipc_edit -->|"edits"| node_ipc_dom
node_population_edit -.->|"supports reports"| node_assembly_report
node_auth -.->|"authenticates"| node_remote_sandbox

click node_cli "https://github.com/diodeinc/pcb/blob/main/crates/pcb/src/main.rs"
click node_build "https://github.com/diodeinc/pcb/blob/main/crates/pcbc/src/build.rs"
click node_zener_eval "https://github.com/diodeinc/pcb/blob/main/crates/pcb-zen-core/src/lang/eval.rs"
click node_zener_modules "https://github.com/diodeinc/pcb/blob/main/crates/pcb-zen-core/src/lang/module.rs"
click node_schematic "https://github.com/diodeinc/pcb/blob/main/crates/pcb-sch/src/physical.rs"
click node_layout_gen "https://github.com/diodeinc/pcb/blob/main/crates/pcb-layout/src/lib.rs"
click node_schematic_analysis "https://github.com/diodeinc/pcb/blob/main/crates/pcb-kicad-sch/src/analysis.rs"
click node_dfm "https://github.com/diodeinc/pcb/blob/main/crates/pcb-ipc2581-tools/src/commands/dfm.rs"
click node_ipc_parse "https://github.com/diodeinc/pcb/blob/main/crates/ipc2581/src/parse.rs"
click node_ipc_dom "https://github.com/diodeinc/pcb/blob/main/crates/ipc2581/src/dom.rs"
click node_ipc_types "https://github.com/diodeinc/pcb/blob/main/crates/ipc2581/src/types/ecad.rs"
click node_ipc_edit "https://github.com/diodeinc/pcb/blob/main/crates/ipc2581/src/edit.rs"
click node_ipc_units "https://github.com/diodeinc/pcb/blob/main/crates/ipc2581/src/units.rs"
click node_population_edit "https://github.com/diodeinc/pcb/blob/main/crates/pcb-ipc2581-tools/src/commands/population_edit.rs"
click node_assembly_report "https://github.com/diodeinc/pcb/blob/main/crates/pcb-ipc2581-tools/src/assembly/report.rs"
click node_manufacturing_exports "https://github.com/diodeinc/pcb/blob/main/crates/pcb-ipc2581-tools/src/manufacturing/export.rs"
click node_auth "https://github.com/diodeinc/pcb/blob/main/crates/pcb-diode-api/src/auth.rs"
click node_publishing "https://github.com/diodeinc/pcb/blob/main/crates/pcbc/src/publish.rs"
click node_remote_sandbox "https://github.com/diodeinc/pcb/blob/main/crates/pcbc/src/remote_sandbox.rs"
click node_rectify "https://github.com/diodeinc/pcb/blob/main/crates/rectify/src/raster.rs"

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_cli,node_build,node_zener_eval,node_zener_modules,node_schematic toneBlue
class node_layout_gen,node_schematic_analysis,node_dfm,node_rectify toneAmber
class node_ipc_parse,node_ipc_dom,node_ipc_types,node_ipc_edit,node_ipc_units,node_population_edit,node_assembly_report,node_manufacturing_exports toneMint
class node_auth,node_publishing,node_remote_sandbox toneRose
class node_designer toneIndigo
```

## Components

### Design and build

- [PCB CLI](https://github.com/diodeinc/pcb/blob/main/crates/pcb/src/main.rs): `crates/pcb/src/main.rs`
- [Zener build](https://github.com/diodeinc/pcb/blob/main/crates/pcbc/src/build.rs): `crates/pcbc/src/build.rs`
- [Zener evaluation](https://github.com/diodeinc/pcb/blob/main/crates/pcb-zen-core/src/lang/eval.rs): `crates/pcb-zen-core/src/lang/eval.rs`
- [Zener modules](https://github.com/diodeinc/pcb/blob/main/crates/pcb-zen-core/src/lang/module.rs): `crates/pcb-zen-core/src/lang/module.rs`
- [Schematic model](https://github.com/diodeinc/pcb/blob/main/crates/pcb-sch/src/physical.rs): `crates/pcb-sch/src/physical.rs`

### KiCad and checks

- [KiCad layout](https://github.com/diodeinc/pcb/blob/main/crates/pcb-layout/src/lib.rs): `crates/pcb-layout/src/lib.rs`
- [Schematic analysis](https://github.com/diodeinc/pcb/blob/main/crates/pcb-kicad-sch/src/analysis.rs): `crates/pcb-kicad-sch/src/analysis.rs`
- [DFM checks](https://github.com/diodeinc/pcb/blob/main/crates/pcb-ipc2581-tools/src/commands/dfm.rs): `crates/pcb-ipc2581-tools/src/commands/dfm.rs`
- [Footprint alignment](https://github.com/diodeinc/pcb/blob/main/crates/rectify/src/raster.rs): `crates/rectify/src/raster.rs`

### Manufacturing data

- [IPC parser](https://github.com/diodeinc/pcb/blob/main/crates/ipc2581/src/parse.rs): `crates/ipc2581/src/parse.rs`
- [IPC document tree](https://github.com/diodeinc/pcb/blob/main/crates/ipc2581/src/dom.rs): `crates/ipc2581/src/dom.rs`
- [IPC data types](https://github.com/diodeinc/pcb/blob/main/crates/ipc2581/src/types/ecad.rs): `crates/ipc2581/src/types/ecad.rs`
- [IPC editing](https://github.com/diodeinc/pcb/blob/main/crates/ipc2581/src/edit.rs): `crates/ipc2581/src/edit.rs`
- [IPC units](https://github.com/diodeinc/pcb/blob/main/crates/ipc2581/src/units.rs): `crates/ipc2581/src/units.rs`
- [Population editing](https://github.com/diodeinc/pcb/blob/main/crates/pcb-ipc2581-tools/src/commands/population_edit.rs): `crates/pcb-ipc2581-tools/src/commands/population_edit.rs`
- [Assembly reports](https://github.com/diodeinc/pcb/blob/main/crates/pcb-ipc2581-tools/src/assembly/report.rs): `crates/pcb-ipc2581-tools/src/assembly/report.rs`
- [Manufacturing exports](https://github.com/diodeinc/pcb/blob/main/crates/pcb-ipc2581-tools/src/manufacturing/export.rs): `crates/pcb-ipc2581-tools/src/manufacturing/export.rs`

### Publishing and services

- [API authentication](https://github.com/diodeinc/pcb/blob/main/crates/pcb-diode-api/src/auth.rs): `crates/pcb-diode-api/src/auth.rs`
- [Project publishing](https://github.com/diodeinc/pcb/blob/main/crates/pcbc/src/publish.rs): `crates/pcbc/src/publish.rs`
- [Remote sandbox](https://github.com/diodeinc/pcb/blob/main/crates/pcbc/src/remote_sandbox.rs): `crates/pcbc/src/remote_sandbox.rs`

### Other components

- **PCB designer**

## Connections

- PCB designer → PCB CLI: runs (evidence: `README.md`)
- PCB CLI → Zener build: runs build
- PCB CLI → KiCad layout: runs layout
- Zener evaluation → Zener modules: evaluates (evidence: `crates/pcb-zen-core/src/lang/context.rs`)
- IPC parser → IPC document tree: parses into (evidence: `crates/ipc2581/src/parse.rs`)
- IPC parser → IPC data types: constructs (evidence: `crates/ipc2581/src/parse.rs`)
- IPC parser → IPC units: uses units (evidence: `crates/ipc2581/src/parse.rs`)
- IPC editing → IPC document tree: edits (evidence: `crates/ipc2581/src/edit.rs`)
- Population editing → Assembly reports: supports reports
- API authentication → Remote sandbox: authenticates
