stripboard
Design stripboard (protoboard / veroboard) circuit layouts in Python, and render them to a PDF you can solder from — plus a silkscreen label, laser g-code, an SVG, and a 3D-printable carrier.
Stripboard is prototyping board with parallel copper strips running across one face. You place components on the grid, cut the strips where two nets must not share one, and add jumper wires where a net has to cross between strips. Doing that on paper is tedious and easy to get wrong. This library lets you write it down instead:
from stripboard import project
def draw(sb):
sb.text(1, 'A', 'BLINKER')
u1 = sb.dip(6, 'F', 3, 4, '555', pins=['GND', 'TRIG', 'OUT', 'RESET',
'CTRL', 'THRESH', 'DISCH', 'VCC'])
r1 = sb.resist(13, 'F', '10K', l=3)
led = sb.led(16, 'N')
sb.net('VCC', u1.pin('VCC'), u1.pin('RESET'), r1.pin(1), color='r')
sb.net('GND', u1.pin('GND'), u1.pin('CTRL'), led.pin('K'), color='k')
sb.autoroute()
project(draw, name='blinker', width=18, height='T')
You declare what is electrically true and autoroute() works out the copper — which
strips carry which net, where the jumpers go, and which tracks to cut. Or route it
yourself with jumper() / cut() / trace() and keep full control. Both workflows are
in examples/.
No runtime dependencies. Pure standard library, including the PDF writer and the autorouter.
Install
pip install stripboard
Requires Python 3.12 or newer.
Getting started
stripboard new my-board # scaffold my_board.py in the current directory
python my_board.py # -> my_board.pdf
Edit draw(sb), re-run, look at the PDF. When the layout is right, flip
designing = False to get the build sheet.
Output
project() decides what to emit from its keyword arguments:
| Argument | Produces | What it's for |
|---|---|---|
| (always) | <name>.pdf |
The board. designing=True gives a one-page DESIGN preview; designing=False gives the FRONT / BACK / DESIGN build sheet. |
label=True |
<name>-label.pdf |
Black-and-white silkscreen, for toner transfer or a laser. |
gcode=True |
<name>.nc |
GRBL laser g-code that etches that silkscreen onto the board top. |
carrier=True |
<name>.stl |
A 3D-printable carrier that the finished board slots into. Needs OpenSCAD. |
The three views on the build sheet are the three ways you actually look at the board: FRONT as you place components, BACK mirrored as you cut tracks and solder, and DESIGN with each net flood-filled in colour so you can check connectivity by eye.
Coordinates
A 1-based integer grid. Columns are numbers running along x; rows are letters
('A' = 1 … 'Z' = 26) or plain ints, running along y. Copper strips run
horizontally, so two pins on the same row are already connected — that is the whole
trick of the format, and most of the design work is deciding where to break it.
Board sizes take either spelling: width=18, height='T' is the same as
width=18, height=20.
Routing
Every part builder returns a handle whose .pin(name) gives a netlist reference:
u1 = sb.dip(6, 'F', 3, 4, '555', pins=['GND', 'TRIG', ...])
sb.net('GND', u1.pin('GND'), c1.pin(2), color='k') # a whole net at once
sb.connect(u1.pin('OUT'), r3.pin(1)) # or one edge at a time
result = sb.autoroute(seed=0)
autoroute() returns the solver's result — status, cost, per-net status, validation — and
draws the jumpers and cuts it chose. Pass locked=False to a part builder to let the
solver place that part too, and it will be drawn wherever it lands.
The solver lives in stripboard.router and is usable on its own; see
docs/router-spec.md.
Development
git clone https://github.com/Stocko-2073/stripboard-py
cd stripboard-py
pip install -e ".[dev]"
pytest # fast suite
pytest -m '' # everything, including the solver tests
ruff check src tests
mypy
Licence
MIT. See LICENSE.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file stripboard-0.1.1.tar.gz.
File metadata
- Download URL: stripboard-0.1.1.tar.gz
- Upload date:
- Size: 160.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ab5479205c362cc06ac1d4dca8adc4941aa78d064f9e8529e2aafa26859f00cf
|
|
| MD5 |
f0a30f40a6b4b1bbf99662aa6faf0c51
|
|
| BLAKE2b-256 |
4a5e4b4790aa042a356413ebadaed16000a1f16bfa51b43dee4bf579086894ec
|
Provenance
The following attestation bundles were made for stripboard-0.1.1.tar.gz:
Publisher:
publish.yml on Stocko-2073/stripboard-py
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
stripboard-0.1.1.tar.gz -
Subject digest:
ab5479205c362cc06ac1d4dca8adc4941aa78d064f9e8529e2aafa26859f00cf - Sigstore transparency entry: 2701235270
- Sigstore integration time:
-
Permalink:
Stocko-2073/stripboard-py@4404c8b385687e597643f55225c47410fb116cb6 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/Stocko-2073
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@4404c8b385687e597643f55225c47410fb116cb6 -
Trigger Event:
release
-
Statement type:
File details
Details for the file stripboard-0.1.1-py3-none-any.whl.
File metadata
- Download URL: stripboard-0.1.1-py3-none-any.whl
- Upload date:
- Size: 94.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
79ea295f194b6b4281e8fce16f18dca265a53e28d862faad396adb17debdc855
|
|
| MD5 |
a23afa9332d35473e327d6e16e9964c8
|
|
| BLAKE2b-256 |
97ce5f8696e6e04c25852e2b7bb3d3f97420b498ee4ecf5b9fb8bcb94524c048
|
Provenance
The following attestation bundles were made for stripboard-0.1.1-py3-none-any.whl:
Publisher:
publish.yml on Stocko-2073/stripboard-py
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
stripboard-0.1.1-py3-none-any.whl -
Subject digest:
79ea295f194b6b4281e8fce16f18dca265a53e28d862faad396adb17debdc855 - Sigstore transparency entry: 2701235429
- Sigstore integration time:
-
Permalink:
Stocko-2073/stripboard-py@4404c8b385687e597643f55225c47410fb116cb6 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/Stocko-2073
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@4404c8b385687e597643f55225c47410fb116cb6 -
Trigger Event:
release
-
Statement type: