pcb is a command-line tool for circuit board projects written in Zener.
Zener is a Starlark-based language for describing PCB schematics; pcb builds
those designs, manages dependencies, and generates KiCad layout files.
Documentation | Language reference
Install the pcb launcher on macOS, Linux, or WSL2:
curl -fsSL https://raw.githubusercontent.com/diodeinc/pcb/main/install.sh | bashFor native Windows, run this command in PowerShell:
powershell -ExecutionPolicy Bypass -c "irm https://raw.githubusercontent.com/diodeinc/pcb/main/install.ps1 | iex"The launcher downloads and runs the pcbc toolchain requested by each project.
The Unix installer writes pcb to $HOME/.local/bin by default. The Windows
installer writes pcb.exe to %USERPROFILE%\.pcb\bin by default. Set
PCB_INSTALL_DIR to choose a different directory.
KiCad 10.x is required only for generating and editing layouts. Building and validating Zener files does not require KiCad.
Native Windows support is experimental. Use WSL2 if a command does not work in the native environment.
pcb manages pcbc, the standard library, and bundled sidecars such as
pcb-rectify as one versioned toolchain.
pcb toolchain show # Show the active and latest matching versions
pcb toolchain show --offline # Use installed and cached data only
pcb toolchain install latest # Install the latest stable toolchain
pcb toolchain prune --dry-run # Preview removable downloads and old patches
pcb toolchain prune # Remove them
pcb toolchain repair latest # Validate and restore a toolchainInstall and repair accept latest, nightly, a lane such as 0.4, or an exact
version such as 0.4.9. Pruning preserves the newest patch in each lane, the
active version, prereleases, nightly, and local toolchains. pcb self update
updates the shim and managed channels and fails if any requested update fails.
git clone https://github.com/diodeinc/pcb.git
cd pcb
cargo build -p pcb -p pcbc
./install.sh --localCreate blinky.zen:
# ```pcb
# [workspace]
# pcb-version = "0.4"
# ```
Resistor = Module("@stdlib/generics/Resistor.zen")
Led = Module("@stdlib/generics/Led.zen")
VCC = Power()
GND = Ground()
LED_ANODE = Net()
Resistor(name="R1", value="1kohm", package="0402", P1=VCC, P2=LED_ANODE)
Led(name="D1", package="0402", color="red", A=LED_ANODE, K=GND)
Board(name="blinky", layers=4, layout_path="layout/blinky")Build the design:
pcb build blinky.zenGenerate a KiCad layout:
pcb layout blinky.zenZener projects use one of two repository shapes.
A board repository contains one board plus any local modules and components it owns:
MyBoard/
├── pcb.toml # Workspace and board manifest
├── MyBoard.zen # Board schematic
├── layout/ # KiCad layout files
├── modules/ # Reusable circuit modules
│ └── PowerSupply/
│ ├── PowerSupply.zen
│ └── pcb.toml
├── components/ # Custom component definitions
│ └── Manufacturer/
│ └── MPN/
│ ├── MPN.zen
│ └── pcb.toml
└── vendor/ # Vendored dependencies
Create one with:
pcb new board MyBoard https://github.com/myorg/MyBoardBoard repository pcb.toml:
[workspace]
repository = "github.com/myorg/MyBoard"
pcb-version = "0.4"
[board]
name = "MyBoard"
path = "MyBoard.zen"
description = "Replace with concise board description."A registry repository contains reusable packages and no board:
registry/
├── pcb.toml # Workspace manifest
├── components/ # Component packages
│ └── TPS54331/
│ ├── TPS54331.zen
│ ├── TPS54331.kicad_sym
│ ├── TPS54331.kicad_mod
│ └── pcb.toml
└── modules/ # Reusable module packages
└── UsbCSink/
├── UsbCSink.zen
└── pcb.toml
Registry pcb.toml:
[workspace]
repository = "github.com/myorg/registry"
pcb-version = "0.4"pcb new board <NAME> <REPO_URL> # Create a board repository
pcb build [PATHS...] # Build and validate designs
pcb sync # Reconcile imports and dependency manifests
pcb layout <FILE> # Generate layout files
pcb import <KICAD_SCH|KICAD_PRO> <OUTPUT_DIR> # Import a KiCad schematic or projectRun pcb help or pcb help <command> for the full command reference.
Diode-authored code and docs are licensed under the MIT License except where otherwise noted. See LICENSE and THIRD_PARTY_NOTICES.md.
- Made possible by the excellent KiCad PCB design suite.
- Built on starlark-rust by Meta.
- Inspired by atopile, tscircuit, and others.