Changelog¶
Changelog¶
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased¶
[0.20.0] - 2026-10-02¶
Changed¶
- chore(deps): bump soupsieve from 2.8 to 2.8.4 (https://github.com/nordstad/PinViz/pull/286)
- chore(deps-dev): bump mkdocstrings from 1.0.4 to 1.0.6 (https://github.com/nordstad/PinViz/pull/291)
- chore(deps-dev): bump mypy from 2.1.0 to 2.2.0 (https://github.com/nordstad/PinViz/pull/290)
- chore(deps-dev): bump hypothesis from 6.155.7 to 6.156.6 (https://github.com/nordstad/PinViz/pull/289)
- chore(deps-dev): bump zensical from 0.0.46 to 0.0.50 (https://github.com/nordstad/PinViz/pull/288)
- chore(deps-dev): bump ruff from 0.15.20 to 0.15.21 (https://github.com/nordstad/PinViz/pull/287)
- chore(deps-dev): bump zensical from 0.0.50 to 0.0.51 (https://github.com/nordstad/PinViz/pull/295)
- chore(deps-dev): bump ruff from 0.15.21 to 0.15.22 (https://github.com/nordstad/PinViz/pull/294)
- chore(deps-dev): bump platformdirs from 4.10.0 to 4.10.1 (https://github.com/nordstad/PinViz/pull/293)
- chore(deps-dev): bump mypy from 2.2.0 to 2.3.0 (https://github.com/nordstad/PinViz/pull/292)
- chore(deps): bump typer from 0.26.8 to 0.27.0 (https://github.com/nordstad/PinViz/pull/296)
- chore(deps-dev): bump platformdirs from 4.10.1 to 4.11.0 (https://github.com/nordstad/PinViz/pull/298)
- chore(deps): bump pymdown-extensions from 10.21.3 to 11.0 (https://github.com/nordstad/PinViz/pull/300)
- chore(deps-dev): bump hypothesis from 6.156.6 to 6.161.6 (https://github.com/nordstad/PinViz/pull/297)
- chore(deps-dev): bump ruff from 0.15.22 to 0.16.0 (https://github.com/nordstad/PinViz/pull/299)
- chore(deps-dev): bump hypothesis from 6.161.6 to 6.164.0 (https://github.com/nordstad/PinViz/pull/305)
- chore(deps): bump mcp from 1.28.1 to 2.0.0 (https://github.com/nordstad/PinViz/pull/304)
- chore(deps-dev): update uv-build requirement from <0.12.0,>=0.8.20 to >=0.8.20,<0.13.0 (https://github.com/nordstad/PinViz/pull/301)
- chore(deps-dev): bump twine from 6.2.0 to 7.0.0 (https://github.com/nordstad/PinViz/pull/302)
- chore(deps-dev): bump zensical from 0.0.51 to 0.0.52 (https://github.com/nordstad/PinViz/pull/303)
- chore(deps): bump typer from 0.27.0 to 0.27.1 (https://github.com/nordstad/PinViz/pull/310)
- chore(deps-dev): bump ruff from 0.16.0 to 0.16.1 (https://github.com/nordstad/PinViz/pull/309)
- chore(deps-dev): bump zensical from 0.0.52 to 0.0.53 (https://github.com/nordstad/PinViz/pull/308)
- chore(deps): bump pymdown-extensions from 11.0 to 11.0.1 (https://github.com/nordstad/PinViz/pull/307)
- chore(deps): bump cryptography from 48.0.1 to 50.0.0 (https://github.com/nordstad/PinViz/pull/306)
- chore(deps): bump drawsvg from 2.4.1 to 2.4.2 (https://github.com/nordstad/PinViz/pull/315)
- chore(deps): bump pydantic-settings from 2.14.2 to 2.15.0 (https://github.com/nordstad/PinViz/pull/314)
- chore(deps-dev): bump platformdirs from 4.11.0 to 4.11.3 (https://github.com/nordstad/PinViz/pull/313)
- chore(deps-dev): bump hypothesis from 6.164.0 to 6.165.7 (https://github.com/nordstad/PinViz/pull/312)
- chore(deps-dev): bump zensical from 0.0.53 to 0.0.54 (https://github.com/nordstad/PinViz/pull/311)
- chore(deps-dev): bump hypothesis from 6.165.7 to 6.165.10 (https://github.com/nordstad/PinViz/pull/320)
- chore(deps-dev): bump pygments from 2.20.0 to 2.21.0 (https://github.com/nordstad/PinViz/pull/319)
- chore(deps-dev): bump mypy from 2.3.0 to 2.3.1 (https://github.com/nordstad/PinViz/pull/318)
- chore(deps-dev): bump zensical from 0.0.54 to 0.0.56 (https://github.com/nordstad/PinViz/pull/317)
- chore(deps-dev): bump mkdocstrings-python from 2.0.5 to 2.0.7 (https://github.com/nordstad/PinViz/pull/316)
- chore(deps-dev): bump zensical from 0.0.56 to 0.0.57 (https://github.com/nordstad/PinViz/pull/324)
- chore(deps-dev): bump ruff from 0.16.1 to 0.16.5 (https://github.com/nordstad/PinViz/pull/323)
- chore(deps-dev): bump platformdirs from 4.11.3 to 4.11.5 (https://github.com/nordstad/PinViz/pull/322)
- chore(deps): bump mcp from 2.0.0 to 2.1.1 (https://github.com/nordstad/PinViz/pull/321)
- chore(deps): bump pydantic from 2.13.4 to 2.13.5 (https://github.com/nordstad/PinViz/pull/329)
- chore(deps-dev): bump zensical from 0.0.57 to 0.0.59 (https://github.com/nordstad/PinViz/pull/328)
- chore(deps-dev): bump platformdirs from 4.11.5 to 4.11.7 (https://github.com/nordstad/PinViz/pull/327)
- chore(deps-dev): bump hypothesis from 6.165.10 to 6.167.1 (https://github.com/nordstad/PinViz/pull/326)
- chore(deps): bump typer from 0.27.1 to 0.27.2 (https://github.com/nordstad/PinViz/pull/325)
- chore(deps): bump httpcore2 from 2.9.1 to 2.10.0 (https://github.com/nordstad/PinViz/pull/331)
- chore(deps): bump httpx2 from 2.10.0 to 2.12.0 (https://github.com/nordstad/PinViz/pull/330)
- chore(deps-dev): bump platformdirs from 4.11.7 to 4.11.8 (https://github.com/nordstad/PinViz/pull/336)
- chore(deps-dev): bump ruff from 0.16.5 to 0.16.7 (https://github.com/nordstad/PinViz/pull/335)
- chore(deps-dev): bump zensical from 0.0.59 to 0.0.60 (https://github.com/nordstad/PinViz/pull/334)
- chore(deps): bump soupsieve from 2.8.4 to 2.9 (https://github.com/nordstad/PinViz/pull/337)
- chore(deps-dev): bump hypothesis from 6.167.1 to 6.168.0 (https://github.com/nordstad/PinViz/pull/333)
- chore(deps-dev): bump mkdocstrings-python from 2.0.7 to 2.0.8 (https://github.com/nordstad/PinViz/pull/332)
- chore(deps): bump anyio from 4.11.0 to 4.14.2 (https://github.com/nordstad/PinViz/pull/338)
- chore(deps): bump mcp from 2.1.1 to 2.2.0 (https://github.com/nordstad/PinViz/pull/342)
- chore(deps-dev): bump platformdirs from 4.11.8 to 4.11.10 (https://github.com/nordstad/PinViz/pull/341)
- chore(deps-dev): bump zensical from 0.0.60 to 0.0.62 (https://github.com/nordstad/PinViz/pull/340)
- chore(deps-dev): bump ruff from 0.16.7 to 0.16.8 (https://github.com/nordstad/PinViz/pull/339)
- chore(deps-dev): bump zensical from 0.0.62 to 0.0.65 (https://github.com/nordstad/PinViz/pull/347)
- chore(deps-dev): bump ruff from 0.16.8 to 0.16.9 (https://github.com/nordstad/PinViz/pull/346)
- chore(deps-dev): bump mkdocstrings-python from 2.0.8 to 2.0.9 (https://github.com/nordstad/PinViz/pull/345)
- chore(deps-dev): bump platformdirs from 4.11.10 to 4.11.13 (https://github.com/nordstad/PinViz/pull/344)
- chore(deps-dev): bump hypothesis from 6.168.0 to 6.168.1 (https://github.com/nordstad/PinViz/pull/343)
- chore(deps): bump urllib3 from 2.7.0 to 2.8.0 (https://github.com/nordstad/PinViz/pull/349)
- chore(deps): bump pyjwt from 2.13.0 to 2.15.0 (https://github.com/nordstad/PinViz/pull/348)
- Breadboard layout and stepper parts (builds on #350) (https://github.com/nordstad/PinViz/pull/351)
[0.20.0] - 2026-10-02¶
Added¶
- Breadboard layout (
layout: breadboard) draws the board artwork beside an upright solderless breadboard with plug-in modules seated on its holes, and colored jumper wires. Schematic layout is unchanged. Contributed by @r2DoesInc (https://github.com/nordstad/PinViz/pull/350). - Modules stack top to bottom in YAML order, so listing them in header order keeps their wire ribbons from crossing.
- Each module's header wires travel as one parallel ribbon, with a white halo and a fixed lane spacing. A wire whose pin sits above pins that leave the header before it (the stepstick's EN) lands below the ribbon and climbs the left edge of the board, so the only crossing is that one visible hop. A white wire is drawn with a thin dark edge so it stays visible on the white page.
- Rail power is drawn as short stubs (MS1, MS2, VM, both GNDs) or a lane under the module (VDD); motors sit beside their own module with straight coil leads; a polarized capacitor plugs into two rails with its stripe marked.
- Logic and motor ground rails are tied at the bottom of the board when motor ground is used.
- Rendering fails when any device has no connection, so a floating part cannot be drawn.
- Experimental: supports a TMC2209 on a Raspberry Pi 4 or 5; other boards and module types fail with a clear error.
themeandshow_legendare honored. EXT_POWERpin role for external/motor supplies. Validation reports an error when it is connected to a board3V3or5Vpin.powerdevice category.- CI runs
pinviz validate-devices. - Devices:
tmc2209(16-pin stepstick seated as the BIGTREETECH pinout card reads from above: EN, MS1, MS2, PDN, PDN, CLK, STEP, DIR down the left and VM, GND, A2, A1, B1, B2, VDD, GND down the right),nema17(four leads),psu_24v(two-terminal motor supply),electrolytic(polarized capacitor), andbreadboard_rail(GND, +3V3, MGND, and +24V strips). A device opts in with abreadboardseat (role: module, motor, supply, capacitor, or rail, plus an optional firstrow).
[0.19.0] - 2026-07-07¶
Added¶
- ESP32-S3-DevKitC-1 board - full 2Γ22 (44-pin) J1/J3 header, in two variants:
esp32_s3_devkitc1(default): realistic board artwork (black PCB, USB-C, ESP32-S3-WROOM module, BOOT/RST buttons, per-pin silkscreen GPIO labels) so the diagram maps onto the physical board at a glance. Aliases:esp32s3,esp32_s3,esp32_s3_devkit(https://github.com/nordstad/PinViz/pull/282)esp32_s3_devkitc1_schematic: lightweight artwork-free rendering with GPIO names drawn directly on the pin bubbles. Aliases:esp32s3_schematic,esp32_s3_schematic- Board artwork is generated by
scripts/gen_esp32_s3_devkitc1_svg.py(reproducible; pad coordinates match the config) - New
show_pin_namesboard option: draws each pin's short name (GPIO number / power rail) on the bubble instead of the physical index. Backwards compatible (defaultfalse, existing boards unchanged) - SN65HVD230 CAN transceiver device (
iocategory) with logic-side (3V3/GND/CTX/CRX) and bus-side (CANH/CANL) pins - π New example:
examples/esp32_s3_can_transceiver.yaml(ESP32-S3 TWAI β SN65HVD230) (https://github.com/nordstad/PinViz/pull/284)
Changed¶
- chore(deps): bump typer from 0.25.1 to 0.26.8, mcp from 1.27.1 to 1.28.1, starlette from 0.50.0 to 1.3.1, cryptography from 46.0.7 to 48.0.1, structlog from 25.5.0 to 26.1.0, pydantic-settings, beautifulsoup4, python-multipart, pyjwt, and dev tooling (ruff, pytest, hypothesis, zensical, mkdocstrings-python, platformdirs, pytest-asyncio)
- chore: gitignore local PR-review comparison artifacts (https://github.com/nordstad/PinViz/pull/285)
Fixed¶
- Wires no longer kink where they join device pins β the curve's exit tangent is now aligned collinear with the straight lead-in into the pin, so wireβpin joins are smooth (https://github.com/nordstad/PinViz/pull/283)
[0.18.1] - 2026-05-31¶
Changed¶
- chore(deps-dev): bump hypothesis from 6.152.4 to 6.152.5 (https://github.com/nordstad/PinViz/pull/240)
- chore(deps): bump mcp from 1.27.0 to 1.27.1 (https://github.com/nordstad/PinViz/pull/239)
- chore(deps-dev): bump mypy from 1.20.2 to 2.0.0 (https://github.com/nordstad/PinViz/pull/238)
- chore(deps): bump pydantic from 2.13.3 to 2.13.4 (https://github.com/nordstad/PinViz/pull/237)
- chore(deps): bump python-multipart from 0.0.26 to 0.0.27 (https://github.com/nordstad/PinViz/pull/236)
- chore(deps): bump urllib3 from 2.6.3 to 2.7.0 (https://github.com/nordstad/PinViz/pull/241)
- chore(deps): bump pydantic-settings from 2.14.0 to 2.14.1 (https://github.com/nordstad/PinViz/pull/246)
- chore(deps-dev): bump mypy from 2.0.0 to 2.1.0 (https://github.com/nordstad/PinViz/pull/245)
- chore(deps-dev): bump ruff from 0.15.12 to 0.15.13 (https://github.com/nordstad/PinViz/pull/244)
- chore(deps-dev): bump hypothesis from 6.152.5 to 6.152.7 (https://github.com/nordstad/PinViz/pull/243)
- chore(deps-dev): bump zensical from 0.0.39 to 0.0.42 (https://github.com/nordstad/PinViz/pull/242)
- chore(deps): bump idna from 3.11 to 3.15 (https://github.com/nordstad/PinViz/pull/248)
- chore(deps): bump pymdown-extensions from 10.21.2 to 10.21.3 (https://github.com/nordstad/PinViz/pull/247)
- chore(deps-dev): bump hypothesis from 6.152.7 to 6.152.9 (https://github.com/nordstad/PinViz/pull/251)
- chore(deps-dev): bump ruff from 0.15.13 to 0.15.14 (https://github.com/nordstad/PinViz/pull/250)
- chore(deps-dev): bump zensical from 0.0.42 to 0.0.43 (https://github.com/nordstad/PinViz/pull/249)
[0.18.1] - 2026-05-31¶
Changed¶
- chore: bump dependencies (ruff, hypothesis, mypy, zensical, mcp, pydantic, urllib3, pymdown-extensions, idna, python-multipart)
[0.18.0] - 2026-05-04¶
Added¶
- fix: add cross-validation to both assembly paths (https://github.com/nordstad/PinViz/pull/234)
Changed¶
- refactor: extract board pin knowledge to Board.pins_by_role() (https://github.com/nordstad/PinViz/pull/232)
- refactor: extract PinAssigner to shared top-level module (https://github.com/nordstad/PinViz/pull/233)
- refactor: decompose WireRouter into focused internal classes (https://github.com/nordstad/PinViz/pull/235)
[0.18.0] - 2026-05-04¶
Changed¶
- WireRouter: Decomposed into focused internal classes for improved maintainability (#235)
- PinAssigner: Extracted to shared top-level module, used by all assembly paths (#233)
- Board: Extracted pin knowledge to
Board.pins_by_role()(#232)
Fixed¶
- Assembly: Added cross-validation to both assembly paths to catch pin mismatches (#234)
[0.17.7] - 2026-05-04¶
Changed¶
- chore(deps-dev): bump mypy from 1.20.0 to 1.20.2 (https://github.com/nordstad/PinViz/pull/224)
- chore(deps-dev): bump zensical from 0.0.34 to 0.0.36 (https://github.com/nordstad/PinViz/pull/223)
- chore(deps): bump typer from 0.24.1 to 0.25.0 (https://github.com/nordstad/PinViz/pull/222)
- chore(deps-dev): bump hypothesis from 6.152.1 to 6.152.3 (https://github.com/nordstad/PinViz/pull/221)
- chore(deps): bump pydantic-settings from 2.13.1 to 2.14.0 (https://github.com/nordstad/PinViz/pull/220)
- chore(deps-dev): bump ruff from 0.15.11 to 0.15.12 (https://github.com/nordstad/PinViz/pull/230)
- chore(deps-dev): bump zensical from 0.0.36 to 0.0.39 (https://github.com/nordstad/PinViz/pull/229)
- chore(deps-dev): bump hypothesis from 6.152.3 to 6.152.4 (https://github.com/nordstad/PinViz/pull/228)
- chore(deps): bump pydantic from 2.13.2 to 2.13.3 (https://github.com/nordstad/PinViz/pull/227)
- chore(deps): bump typer from 0.25.0 to 0.25.1 (https://github.com/nordstad/PinViz/pull/226)
Fixed¶
- fix(legend): dynamic name column width to prevent overlap with description (https://github.com/nordstad/PinViz/pull/231)
[0.17.7] - 2026-05-04¶
Fixed¶
- Legend: Device name column width is now dynamic, preventing long names from overlapping the description column
[0.17.6] - 2026-04-22¶
Changed¶
- chore(deps-dev): bump pytest-cov from 7.0.0 to 7.1.0 (https://github.com/nordstad/PinViz/pull/194)
- chore(deps-dev): bump zensical from 0.0.27 to 0.0.28 (https://github.com/nordstad/PinViz/pull/193)
- chore(deps-dev): bump ruff from 0.15.6 to 0.15.7 (https://github.com/nordstad/PinViz/pull/192)
- chore(deps): bump requests from 2.32.5 to 2.33.0 (https://github.com/nordstad/PinViz/pull/195)
- chore(deps): bump cryptography from 46.0.5 to 46.0.6 (https://github.com/nordstad/PinViz/pull/196)
- chore(deps-dev): bump ruff from 0.15.7 to 0.15.8 (https://github.com/nordstad/PinViz/pull/200)
- chore(deps-dev): bump zensical from 0.0.28 to 0.0.30 (https://github.com/nordstad/PinViz/pull/199)
- chore(deps-dev): update uv-build requirement from <0.11.0,>=0.8.20 to >=0.8.20,<0.12.0 (https://github.com/nordstad/PinViz/pull/198)
- chore(deps-dev): bump hypothesis from 6.151.9 to 6.151.10 (https://github.com/nordstad/PinViz/pull/197)
- chore(deps): bump pygments from 2.19.2 to 2.20.0 (https://github.com/nordstad/PinViz/pull/201)
- chore(deps): bump mcp from 1.26.0 to 1.27.0 (https://github.com/nordstad/PinViz/pull/206)
- chore(deps-dev): bump ruff from 0.15.8 to 0.15.9 (https://github.com/nordstad/PinViz/pull/205)
- chore(deps-dev): bump hypothesis from 6.151.10 to 6.151.11 (https://github.com/nordstad/PinViz/pull/204)
- chore(deps-dev): bump zensical from 0.0.30 to 0.0.31 (https://github.com/nordstad/PinViz/pull/202)
- chore(deps): bump cryptography from 46.0.6 to 46.0.7 (https://github.com/nordstad/PinViz/pull/207)
- chore(deps-dev): bump mypy from 1.19.1 to 1.20.0 (https://github.com/nordstad/PinViz/pull/203)
- chore(deps): bump python-multipart from 0.0.22 to 0.0.26 (https://github.com/nordstad/PinViz/pull/213)
- chore(deps): bump rich from 14.3.3 to 15.0.0 (https://github.com/nordstad/PinViz/pull/212)
- chore(deps-dev): bump ruff from 0.15.9 to 0.15.10 (https://github.com/nordstad/PinViz/pull/211)
- chore(deps-dev): bump pytest from 9.0.2 to 9.0.3 (https://github.com/nordstad/PinViz/pull/208)
- chore(deps-dev): bump platformdirs from 4.9.4 to 4.9.6 (https://github.com/nordstad/PinViz/pull/209)
- chore(deps-dev): bump ruff from 0.15.10 to 0.15.11 (https://github.com/nordstad/PinViz/pull/214)
- chore(deps): bump pydantic from 2.12.5 to 2.13.2 (https://github.com/nordstad/PinViz/pull/216)
- chore(deps-dev): bump mkdocstrings from 1.0.3 to 1.0.4 (https://github.com/nordstad/PinViz/pull/217)
- chore(deps-dev): bump hypothesis from 6.151.11 to 6.152.1 (https://github.com/nordstad/PinViz/pull/215)
- chore(deps-dev): bump pygments from 2.19.2 to 2.20.0 (https://github.com/nordstad/PinViz/pull/218)
- chore(deps): bump python-dotenv from 1.2.1 to 1.2.2 (https://github.com/nordstad/PinViz/pull/219)
[0.17.6] - 2026-04-22¶
Fixed¶
- Docs site 404 caused by pygments 2.20 incompatibility with zensical; upgraded zensical to 0.0.34
Dependencies¶
- Bump pydantic from 2.12.5 to 2.13.2
- Bump python-dotenv from 1.2.1 to 1.2.2
- Bump rich from 14.3.3 to 15.0.0
- Bump mcp from 1.26.0 to 1.27.0
- Bump python-multipart from 0.0.22 to 0.0.26
- Bump cryptography from 46.0.6 to 46.0.7
[0.17.5] - 2026-03-18¶
[0.17.5] - 2026-03-18¶
Fixed¶
- Homebrew formula now pushed directly to tap main instead of opening a PR
- Brew publish workflow now triggers on
release: publishedevent instead ofworkflow_run, eliminating ambiguoushead_branchresolution - Brew publish workflow no longer fires on non-tag publish runs
[0.17.4] - 2026-03-18¶
Fixed¶
- Homebrew formula update now uses inline shell instead of a separate Python script, removing it from ruff's scope
- CHANGELOG push no longer fails when commits land on main between tag push and publish completion
[0.17.3] - 2026-03-18¶
Changed¶
- Homebrew workflow now triggers via
workflow_runafter PyPI publish completes, ensuring correct ordering and independent re-runnability
[0.17.2] - 2026-03-18¶
Changed¶
- Homebrew formula update moved to dedicated
brew-publish.ymlworkflow; can be re-run independently from the PyPI publish step
[0.17.1] - 2026-03-18¶
Changed¶
- Homebrew tap migrated to dedicated
nordstad/homebrew-pinvizrepository; users can now tap withbrew tap nordstad/pinviz(no custom URL required) - Formula auto-update on release now opens a PR on the tap repo instead of committing directly to main
[0.17.0] - 2026-03-17¶
Added¶
- Shared
BoardSelectionStrategyprotocol andAliasBoardSelectionStrategyβ centralises board alias resolution across config and MCP flows (https://github.com/nordstad/PinViz/pull/190) DiagramBuilderβ step-by-step builder shared by config and MCP assembly paths (https://github.com/nordstad/PinViz/pull/190)McpDeviceAdapterβ typed adapter from MCP device records to coreDevicemodel objects (https://github.com/nordstad/PinViz/pull/190)- Protocol-specific
PinAssignmentStrategyclasses (I2CPinAssignmentStrategy,SPIPinAssignmentStrategy,DefaultPinAssignmentStrategy) (https://github.com/nordstad/PinViz/pull/190) - Golden SVG snapshot tests for representative rendered diagrams (https://github.com/nordstad/PinViz/pull/190)
FIXED_ROLE_PINSandPWM_PINSclass constants onPinAssigner(https://github.com/nordstad/PinViz/pull/190)
Changed¶
ConfigLoadernow reads validated Pydantic schema fields instead of raw dict keys (https://github.com/nordstad/PinViz/pull/190)ConnectionBuilderdelegates device adaptation toMcpDeviceAdapterand board resolution toAliasBoardSelectionStrategy(https://github.com/nordstad/PinViz/pull/190)show_legendschema default changed fromtruetofalse(https://github.com/nordstad/PinViz/pull/190)- ci: update GitHub Actions to Node.js 24-compatible versions (checkout v6, setup-uv v7, upload-artifact v7, download-artifact v8, github-script v8, upload-pages-artifact v4)
Fixed¶
- PWM pin list corrected β physical pin 32 was missing, pin 12 was duplicated (https://github.com/nordstad/PinViz/pull/190)
McpDeviceAdapter._apply_metadata_overridesno longer mutatesDevicedirectly; usesdataclasses.replaceconsistently (https://github.com/nordstad/PinViz/pull/190)
[0.16.2] - 2026-03-17¶
Added¶
- feat: add ESP32/add-device demos, refresh GIFs, fix wizard and logging bugs (https://github.com/nordstad/PinViz/pull/171)
- chore: add Claude Code automations (hooks, skills, subagent) (https://github.com/nordstad/PinViz/pull/172)
Changed¶
- chore(deps-dev): bump mkdocs-material from 9.7.1 to 9.7.2 (https://github.com/nordstad/PinViz/pull/177)
- chore(deps-dev): bump ruff from 0.15.1 to 0.15.2 (https://github.com/nordstad/PinViz/pull/176)
- chore(deps-dev): bump mkdocstrings-python from 2.0.1 to 2.0.3 (https://github.com/nordstad/PinViz/pull/175)
- chore(deps): bump rich from 14.3.2 to 14.3.3 (https://github.com/nordstad/PinViz/pull/174)
- chore(deps-dev): bump hypothesis from 6.151.6 to 6.151.9 (https://github.com/nordstad/PinViz/pull/173)
- docs: migrate from Material for MkDocs to Zensical (https://github.com/nordstad/PinViz/pull/179)
- chore(deps): bump typer from 0.23.1 to 0.24.1 (https://github.com/nordstad/PinViz/pull/183)
- chore(deps): bump pydantic-settings from 2.13.0 to 2.13.1 (https://github.com/nordstad/PinViz/pull/182)
- chore(deps-dev): bump zensical from 0.0.23 to 0.0.24 (https://github.com/nordstad/PinViz/pull/181)
- chore(deps-dev): bump ruff from 0.15.2 to 0.15.4 (https://github.com/nordstad/PinViz/pull/180)
- chore(deps-dev): bump platformdirs from 4.9.2 to 4.9.4 (https://github.com/nordstad/PinViz/pull/185)
- chore(deps-dev): bump ruff from 0.15.4 to 0.15.5 (https://github.com/nordstad/PinViz/pull/184)
- chore(deps-dev): bump ruff from 0.15.5 to 0.15.6 (https://github.com/nordstad/PinViz/pull/188)
- chore(deps-dev): bump zensical from 0.0.24 to 0.0.27 (https://github.com/nordstad/PinViz/pull/187)
- chore(deps): bump pyjwt from 2.10.1 to 2.12.0 (https://github.com/nordstad/PinViz/pull/186)
Fixed¶
- fix: clean JSON output, Bezier loop bug fix, modernize MCP tests (https://github.com/nordstad/PinViz/pull/189)
0.16.1 - 2026-02-18¶
Added¶
- Homebrew formula (
Formula/pinviz.rb) β install on macOS via: Shell completions for bash, zsh, and fish are installed automatically. - Auto-update workflow:
publish.ymlnow includes anupdate-homebrewjob that bumps the formula URL and SHA256 on every version tag release usingmislav/bump-homebrew-formula-action.
Fixed¶
- Add
communicationtoVALID_DEVICE_CATEGORIESso devices using that category (esp8266, hc05, mcp2515, nrf24l01, rc522, sim800l, sx1278) pass validation (#170) - Remove duplicate
mcp3008.jsonfromdevice_configs/io/β the more completesensors/mcp3008.json(with analog channels) is kept (#170)
0.16.0 - 2026-02-16¶
Added¶
- ESP32/ESP8266 board support (#161)
- ESP32 DevKit V1 board with 30 GPIO pins (dual-sided layout)
- ESP8266 NodeMCU board with full GPIO pinout
- Wemos D1 Mini board for compact ESP8266 projects
- New
esp32_weatherbuilt-in example with BME280 sensor and OLED display - Smart pin assignment feature for automatic GND/VCC pin distribution
- Documentation and examples for all ESP boards
-
SVG assets with proper pin alignment and scaling
-
Complete inline components support - All three component types now fully functional
- β Capacitor symbol rendering with parallel plates and value labels
- β Diode symbol rendering with anode/cathode orientation and triangle symbol
- β All component types (resistor, capacitor, diode) render correctly at any angle
- π New example configurations:
led_with_capacitor.yaml,relay_with_diode.yaml,all_components.yaml - π Comprehensive documentation added to
docs/guide/yaml-config.md - β All tests pass including new component rendering tests
Fixed¶
- Validation warnings for I2C/SPI bus devices sharing power pins - now correctly recognizes that power sharing on shared buses is normal and expected
- Inline components feature now matches README advertising (previously only resistors worked)
- ESP board pin rendering with correct scaling and text alignment
Contributors¶
- Special thanks to @f2daz for contributing the ESP32/ESP8266 board support (#161) - their first contribution to PinViz! π
0.15.0 - 2026-02-12¶
Added¶
- Complexity checking and validation (#Phase1.3)
- New
--max-complexityflag forpinviz rendercommand - Enforces hard limit on connection count (useful for CI/CD pipelines)
- Automatic warnings when diagrams exceed 30 connections or 20 devices
- Clear error messages suggesting to split diagrams or increase limits
- Configurable thresholds via
LayoutConfig - Example:
pinviz render diagram.yaml --max-complexity 50
Improved¶
- Error messages now include examples and actionable fixes (#Phase1.2)
- All connection validation errors show example of correct usage
- Configuration errors include fix suggestions
- Users can resolve issues without consulting documentation
-
Errors are concise (<5 lines) and well-formatted
-
Device registry fail-fast validation (#Phase1.4)
- Registry now tracks failed device configurations
- Raises
RuntimeErrorif zero devices load (instead of cryptic errors later) - Logs health check on startup showing loaded/failed counts
- Warning logged if some (but not all) device configs fail
- New methods:
get_failed_configs()andget_health_status()
Changed¶
- Layout engine refactored into modular package (#Phase1.1)
- Split 1,666-line
layout.pyinto 7 focused modules - New package structure:
layout/engine.py,layout/positioning.py,layout/routing.py, etc. - Improved maintainability and code organization
- No breaking changes - all public APIs remain backward compatible
- All 911 tests passing
Internal¶
- Improved structured logging throughout
- Better separation of concerns in layout system
- Enhanced code quality and maintainability
0.14.0 - 2026-02-12¶
Added¶
- feat: Explicit pin side placement for device pins (#158)
- New
"side"field in device pin configurations ("left" or "right") - Works in both JSON device configs and inline YAML definitions
- Precedence order: explicit position > side > automatic detection > default
- Enables proper layout for devices like relays (control pins left, output pins right)
- Case-insensitive validation with clear error messages
- 35 comprehensive tests (all 911 tests passing)
- Fully backward compatible (side field is optional)
- Updated documentation in guides/adding-devices.md
- Production-ready relay_module device config in actuators/ category
- Improved pin alignment: equal pin counts on both sides are now perfectly aligned
- Smart centering: side with fewer pins is automatically centered
0.13.0 - 2026-02-11¶
Added¶
- Named color support for devices and connections - can now use color names like "red", "green", "blue" in addition to hex codes (#155, #156)
- 15 named colors available: red, green, blue, yellow, orange, purple, black, white, gray, brown, pink, cyan, magenta, lime, turquoise
- Color names are case-insensitive
- Whitespace is automatically trimmed from color inputs
- Invalid colors fall back to default gracefully
- Works for both device colors and wire colors
- Backward compatible with existing hex code configurations
- Code quality score: 10/10 (comprehensive code review passed with improvements)
Changed¶
- chore(deps): bump cryptography from 46.0.3 to 46.0.5 (#154)
- Schema validation now accepts both named colors and hex codes for device and connection colors
- Color resolution utility with robust error handling and fallback behavior
- Documentation updated with named color examples and reference table
0.12.1 - 2026-02-09¶
Changed¶
- chore(deps): bump rich from 14.2.0 to 14.3.2 (#144, #148)
- chore(deps): bump python-multipart from 0.0.20 to 0.0.22 (#147)
- chore(deps): bump mcp from 1.25.0 to 1.26.0 (#145)
- chore(deps-dev): bump hypothesis from 6.150.2 to 6.151.5 (#142, #149, #152)
- chore(deps-dev): bump ruff from 0.14.13 to 0.15.0 (#146, #150)
- chore(deps-dev): bump mkdocstrings from 1.0.0 to 1.0.3 (#143, #153)
- chore(deps-dev): update uv-build requirement (#151)
Fixed¶
- fix: update enums to use StrEnum for ruff 0.15.0 compatibility (#150)
0.12.0 - 2026-01-25¶
Added¶
- feat: Dark mode support for diagrams (https://github.com/nordstad/PinViz/pull/141)
- New theme system with LIGHT and DARK color schemes
- Dark canvas background (#1E1E1E) optimized for dark UIs
- Light text and stroke colors for visibility in dark mode
- Pin labels inverted for better contrast (white bg, black text in dark mode)
- Wire colors preserved to maintain electrical conventions
- Theme support in YAML config:
theme: "dark" - CLI
--themeflag to override config:pinviz render config.yaml --theme dark - New examples:
bh1750_dark.yaml,pico_led_dark.yaml,i2c_spi_dark.yaml - Comprehensive themes guide in documentation
- 38 new tests (theme unit + integration tests)
- 8 CLI tests for --theme flag coverage
- Perfect for dark-themed documentation, presentations, and GitHub dark mode
0.11.2 - 2026-01-25¶
Added¶
- feat: Dynamic halo color for light-colored wires (https://github.com/nordstad/PinViz/pull/139)
- Automatic visibility detection using WCAG 2.0 luminance calculation
- Light wires (luminance > 0.7) get dark gray halos for visibility
- Dark/medium wires keep traditional white halos
- No configuration needed - works automatically for all wire colors
- Includes comprehensive test suite with 19 new tests
- New example:
examples/wire_visibility.yamlshowcasing the feature
0.11.1 - 2026-01-25¶
Changed¶
- chore(deps-dev): bump hypothesis from 6.150.0 to 6.150.2 (https://github.com/nordstad/PinViz/pull/136)
- chore(deps-dev): bump ruff from 0.14.11 to 0.14.13 (https://github.com/nordstad/PinViz/pull/137)
Fixed¶
- fix: correct IR LED Ring pin name from CTRL to EN (https://github.com/nordstad/PinViz/pull/138)
0.11.0 - 2026-01-18¶
Added¶
- feat: Add ConnectionGraph utility class for topology analysis (#72) (https://github.com/nordstad/PinViz/pull/91)
- [Phase 1.5] Add Phase 1 Integration Tests (https://github.com/nordstad/PinViz/pull/94)
- fix: Sync MCP module version with package metadata and add Codecov badge (https://github.com/nordstad/PinViz/pull/95)
- feat: Add Pydantic schemas for multi-level connections (Phase 2.1) (https://github.com/nordstad/PinViz/pull/97)
- docs: Add supported boards table to README (https://github.com/nordstad/PinViz/pull/99)
- [Phase 3.1] Add multi-level connection examples (https://github.com/nordstad/PinViz/pull/102)
- feat: Implement multi-tier device layout positioning (Phase 3.2) (https://github.com/nordstad/PinViz/pull/103)
- feat: Implement canvas sizing and layout validation (Phase 3.3) (#81) (https://github.com/nordstad/PinViz/pull/104)
- test: Add multi-tier canvas sizing integration test (Phase 3.4) (https://github.com/nordstad/PinViz/pull/105)
- [Phase 4.2] Add Comprehensive Integration Tests for Multi-Level Features (https://github.com/nordstad/PinViz/pull/107)
- feat: Add professional example diagrams for Phase 4.3 (https://github.com/nordstad/PinViz/pull/108)
- feat: Add smart vertical device positioning based on pin connections (https://github.com/nordstad/PinViz/pull/113)
- fix: Eliminate wire stubs and add validation (fixes #112) (https://github.com/nordstad/PinViz/pull/114)
- docs: Add multi-tier diagram examples to documentation (fixes #115) (https://github.com/nordstad/PinViz/pull/116)
- docs: Add comprehensive multi-level device support documentation (fixes #86) (https://github.com/nordstad/PinViz/pull/117)
- fix: add bounds checking to wire conflict resolution (fixes #119) (https://github.com/nordstad/PinViz/pull/129)
Changed¶
- feat: Extend Connection model for device-to-device connections (https://github.com/nordstad/PinViz/pull/90)
- chore(deps): bump urllib3 from 2.5.0 to 2.6.3 (https://github.com/nordstad/PinViz/pull/92)
- [Phase 1.3] Pin Compatibility Matrix and Validation (https://github.com/nordstad/PinViz/pull/93)
- feat: Update ConfigLoader for multi-level connections (Phase 2.2) (https://github.com/nordstad/PinViz/pull/98)
- [Phase 2.3] Enhance CLI Validation Command (https://github.com/nordstad/PinViz/pull/100)
- feat: Enhance validate command with graph visualization (#78) (https://github.com/nordstad/PinViz/pull/101)
- [Phase 4.1] Comprehensive Integration Tests for Multi-Tier Layout (https://github.com/nordstad/PinViz/pull/106)
Fixed¶
- Potential fix for code scanning alert no. 8: Workflow does not contain permissions (https://github.com/nordstad/PinViz/pull/70)
- fix: centralize magic numbers into organized constant classes (fixes #121) (https://github.com/nordstad/PinViz/pull/128)
- perf: optimize device lookups and wire conflict detection (fixes #118, #122) (https://github.com/nordstad/PinViz/pull/130)
- perf: optimize wire conflict detection with early exit (fixes #122) (https://github.com/nordstad/PinViz/pull/131)
- fix: improve error handling and validation messages (fixes #123, #124) (https://github.com/nordstad/PinViz/pull/132)
- refactor: extract pin position calculation methods (fixes #120) (https://github.com/nordstad/PinViz/pull/133)
- feat: decouple layout and rendering via LayoutResult (fixes #125) (https://github.com/nordstad/PinViz/pull/134)
- feat: make device registry instantiable for better testing (fixes #126) (https://github.com/nordstad/PinViz/pull/135)
0.10.0 - 2026-01-14¶
Removed¶
- BREAKING: Removed config command group (
pinviz config show|path|init|edit) - BREAKING: Removed shell completion command group (
pinviz completion install|show|uninstall) - BREAKING: Removed global options:
--log-leveland--log-format - BREAKING: Removed TOML configuration file support
- BREAKING: Logging is now fixed to ERROR-only output (no verbose option)
Changed¶
- Simplified CLI to focus on core functionality (render, validate, example, list, add-device)
- CLI output is now quiet by default, showing only essential messages
Documentation¶
- Updated README with link to examples gallery
Migration Guide¶
- Config files: No longer needed or supported - the tool works without configuration
- Shell completions: Typer provides built-in completion support if needed
- Logging: If you need debug output, you'll need to modify the source code (rare use case)
- No action needed for most users - the core commands work the same way
0.9.2 - 2026-01-13¶
Added¶
- fix: address critical and high-priority code quality issues (https://github.com/nordstad/PinViz/pull/65)
- fix: add pin validation and consolidate exception handling (https://github.com/nordstad/PinViz/pull/66)
- feat: add contribution message to device wizard (https://github.com/nordstad/PinViz/pull/68)
Fixed¶
- fix: correct questionary Choice parameter order in device wizard (https://github.com/nordstad/PinViz/pull/67)
0.9.1 - 2026-01-13¶
Added¶
- feat: Add smart pin role suggestions to add-device wizard (https://github.com/nordstad/PinViz/pull/64)
Fixed¶
- fix: prevent traceback when exiting device wizard (https://github.com/nordstad/PinViz/pull/63)
[0.9.0] - 2026-01-13¶
Added¶
- Raspberry Pi Pico Support - Raspberry Pi Pico board support with horizontal pin layout (https://github.com/nordstad/PinViz/pull/61)
- Complete support for Raspberry Pi Pico with dual 20-pin headers (40 pins total)
- New dual-header layout system for boards with GPIO pins on multiple edges
- Horizontal pin positioning (single row per header) vs traditional vertical columns
- Reversed pin order on top header (pin 20 on left, pin 1 on right)
- Factory function
raspberry_pi_pico()with comprehensive documentation - Board name aliases:
raspberry_pi_pico,pico - JSON configuration in
board_configs/raspberry_pi_pico.json - 15 new comprehensive tests for Pico board functionality
- 4 new tests for Pico board alias support
- Example diagrams:
examples/pico_led.yaml,examples/pico_bme280.yaml, andexamples/pico_leds_with_specs.yaml - Documentation for dual-sided board configuration in
CLAUDE.md - Pico multi-LED example with specifications table demonstrating
--show-legendflag - Extended Schema Support for dual-sided boards (https://github.com/nordstad/PinViz/pull/61)
BoardLayoutConfigSchemanow supportstop_headerandbottom_headerconfigurationsBoardPinConfigSchemaincludes optionalheaderfield for pin placement- Board detection logic automatically identifies dual-header vs single-header layouts
- Pattern established for future boards (ESP32, Arduino Nano, etc.)
- MCP Server Support for Raspberry Pi Pico and Pi 4 (https://github.com/nordstad/PinViz/pull/61)
- Added board aliases to MCP parser:
pico,raspberry pi pico,rpi picoβraspberry_pi_pico - Added board aliases for Pi 4:
pi4,rpi4,raspberry pi 4βraspberry_pi_4 - 5 new parser tests for board alias recognition (Pi 4 and Pico)
- Updated MCP documentation with all supported board aliases
- MCP server now supports natural language prompts like "Connect LED to pico"
- Dynamic Board Discovery in CLI list command (https://github.com/nordstad/PinViz/pull/62)
- Added
get_available_boards()function that automatically discovers boards fromboard_configs/ - No need to manually update CLI when adding new boards
- Automatically displays all boards: Pi 4, Pi 5, and Pico with their aliases
Changed¶
- Improved Wire Colors in Pico BME280 example for better visibility (https://github.com/nordstad/PinViz/pull/61)
- Changed I2C wire colors from yellow to blue (#2196F3) and orange (#FF9800)
- Yellow wires were hard to see against white background
- New colors provide better contrast and readability in documentation
- Enhanced Exception Handling in completion commands (https://github.com/nordstad/PinViz/pull/62)
- Replaced broad
except Exceptionwith specific exception types - Added
subprocess.SubprocessError,FileNotFoundError,PermissionError,OSError - Provides actionable error messages with troubleshooting hints
- Dependency Updates
- Bump pydantic from 2.12.4 to 2.12.5 (https://github.com/nordstad/PinViz/pull/57)
- Bump ruff from 0.14.10 to 0.14.11 (https://github.com/nordstad/PinViz/pull/58)
- Bump platformdirs from 4.5.0 to 4.5.1 (https://github.com/nordstad/PinViz/pull/59)
Fixed¶
- Layout Spacing Issues - Fixed title overlap and specs table positioning (https://github.com/nordstad/PinViz/pull/61)
- Dynamic board margin calculation based on whether title is shown
- Title now has proper spacing (title_height + title_margin) above board and wires
- Specs table positioned relative to bottommost device with configurable margin
- Added
specs_table_top_marginparameter to LayoutConfig (default: 30px) - Renamed
board_margin_toptoboard_margin_top_basewith dynamic calculation - Prevents wires from overlapping with title text
- Prevents devices from being too close to specifications table
- All layout spacing now calculated dynamically for proper visual separation
Tests¶
- Comprehensive ValidationResult Tests (https://github.com/nordstad/PinViz/pull/62)
- Added 9 new test cases for
ValidationResultclass - Tests cover success/error/warning scenarios in strict and non-strict modes
- Tests validate console and JSON output formatting
- Increased total test count from 33 to 41 tests
0.8.1 - 2026-01-11¶
Changed¶
- Move show_legend to CLI flag and improve specs table layout (https://github.com/nordstad/PinViz/pull/55)
- Modernize CLI with Typer + Rich (https://github.com/nordstad/PinViz/pull/56)
0.8.0 - 2026-01-10¶
Added¶
- Raspberry Pi 4 Support (https://github.com/nordstad/PinViz/pull/52)
- Complete support for Raspberry Pi 4 Model B with 40-pin GPIO header
- Board configuration JSON system for easy board addition
- Factory function
raspberry_pi_4()with proper documentation - Board name aliases:
raspberry_pi_4,rpi4,pi4 - Comprehensive test suite with pinout validation
- All Pi boards share identical 40-pin GPIO pinout (Pi 2, 3, 4, 5, Zero 2 W)
- User-Facing Documentation Guides (https://github.com/nordstad/PinViz/pull/54)
- Created
guides/directory for user-facing guides guides/ADDING_BOARDS.md- Step-by-step board addition guide for maintainersguides/DEVICE_CONFIG_GUIDE.md- Device configuration reference- Feature Showcase table in examples documentation linking capabilities to examples
Changed¶
- Streamlined README (https://github.com/nordstad/PinViz/pull/54)
- Reduced README from 799 to 171 lines (78.6% smaller)
- Focus on visual impact: logo, demo GIF, example diagram
- Essential information only: installation, quick start, features
- All detailed documentation moved to mkdocs
- PyPI-compatible image formatting with HTML img tags
- Improved Wire Routing (https://github.com/nordstad/PinViz/pull/53)
- Fixed missing wires in example diagrams
- Enhanced validation for example command
- Better wire connection handling to device pins
- Documentation Organization (https://github.com/nordstad/PinViz/pull/54)
- Moved detailed configuration docs from README to mkdocs
- Updated all documentation links to reference proper locations
- Enhanced examples page with categorized feature showcase
- Asset Credits Update
- Updated SVG asset credits to Wikimedia Commons (from FreeSVG.org)
Fixed¶
- Wire connections to device pins properly aligned (https://github.com/nordstad/PinViz/pull/50)
- Missing wires in example diagrams (https://github.com/nordstad/PinViz/pull/53)
- Board rendering standardization across different board types (https://github.com/nordstad/PinViz/pull/49)
Improved¶
- Code quality improvements with better test coverage (https://github.com/nordstad/PinViz/pull/51)
- Refactoring for maintainability
- Configuration file structure
0.7.0 - 2026-01-07¶
Added¶
- Hardware Validation System (https://github.com/nordstad/PinViz/pull/41)
- Comprehensive wiring diagram validation with 5 check categories
- Pin conflict detection (multiple devices on same GPIO)
- I2C address conflict warnings with device recognition
- Voltage compatibility checks (3.3V vs 5V protection)
- GPIO current limit warnings (16mA per pin)
- Connection validity checks (invalid pins, non-existent devices)
pinviz validateCLI command with--strictmode- Automatic validation during
rendercommand - Three severity levels: ERROR, WARNING, INFO
- Clear, actionable error messages with location context
- Legal disclaimer for validation limitations
- 12 comprehensive test cases covering all validation scenarios
- Detailed documentation in
docs/validation.md - Professional Structured Logging (https://github.com/nordstad/PinViz/pull/42)
structlog>=24.1.0integration for observability and debugging- Centralized logging configuration in
src/pinviz/logging_config.py - JSON format for machine-readable logs (log aggregation tools)
- Console format for human-readable output with colors
- Automatic callsite metadata (file, function, line number)
- Configurable log levels via
--log-levelflag (DEBUG, INFO, WARNING, ERROR) - Configurable log format via
--log-formatflag (json|console) - Default WARNING level for minimal noise
- Logs to stderr to avoid interfering with stdout/pipes
- 19 new tests for logging configuration and behavior
- MCP Server Validation Integration (https://github.com/nordstad/PinViz/pull/43)
- Automatic hardware validation in
generate_diagramtool - Enhanced response format with validation results
- Validation status field: "passed", "warning", or "failed"
- Categorized validation issues (errors, warnings, info)
- Human-readable validation messages
- Updated MCP server documentation with validation examples
- Google Analytics tracking for documentation site
- Demo video infrastructure with VHS tape files
- Validation demo video (
scripts/demos/validation_demo.tape) - JSON configuration examples in documentation
Changed¶
- MCP server builds complete
Diagramobjects usingConnectionBuilder - Documentation index now lists validation, MCP server, and structlog features
- CLI guide includes
validatecommand and logging options - MCP server usage docs include automatic validation section
Documentation¶
- Added
docs/validation.mdcomprehensive validation guide - Updated
docs/guide/cli.mdwith validate command and logging flags - Updated
docs/index.mdwith new features - Updated
docs/mcp-server/usage.mdwith validation examples - Added Validation page to User Guide navigation in
mkdocs.yml
0.6.1 - 2025-12-29¶
Fixed¶
- Fix broken demo GIF on PyPI by using absolute GitHub raw URL in README
0.6.0 - 2025-12-29¶
Added¶
- Professional wire routing system with intelligent spacing and z-order (https://github.com/nordstad/PinViz/pull/40)
- Comprehensive wire routing documentation in
docs/wire-routing.md - Wire spacing test suite with 5 tests for routing quality assurance
- Collision detection for dynamic rail position adjustment
- Configurable wire spacing parameters (
wire_spacing,bundle_spacing)
Changed¶
- Wire routing now uses horizontal rail spreading (8px spacing by default)
- Vertical fan-out at GPIO header for clear visual separation
- Three-level z-order sorting ensures all wires remain visible
- Wires from right GPIO column now properly rendered on top
- Improved wire bundling with natural grouping by destination
- Enhanced
LayoutConfigwith new spacing parameters
Fixed¶
- Wire overlap issues eliminated through intelligent spacing
- Wires from even-numbered pins no longer hidden under odd-numbered pins
- Improved wire visibility in dense diagrams
- Deterministic routing for consistent version control
0.5.1 - 2025-12-28¶
Dependencies¶
- Bump ruff from 0.14.6 to 0.14.7 (https://github.com/nordstad/PinViz/pull/28)
- Bump beautifulsoup4 from 4.14.2 to 4.14.3 (https://github.com/nordstad/PinViz/pull/29)
- Bump ruff from 0.14.7 to 0.14.8 (https://github.com/nordstad/PinViz/pull/30)
- Bump pytest from 9.0.1 to 9.0.2 (https://github.com/nordstad/PinViz/pull/31)
- Bump mcp from 1.22.0 to 1.23.1 (https://github.com/nordstad/PinViz/pull/32)
- Bump mkdocstrings-python from 2.0.0 to 2.0.1 (https://github.com/nordstad/PinViz/pull/33)
- Bump mcp from 1.23.1 to 1.24.0 (https://github.com/nordstad/PinViz/pull/35)
- Bump ruff from 0.14.8 to 0.14.9 (https://github.com/nordstad/PinViz/pull/34)
- Bump ruff from 0.14.9 to 0.14.10 (https://github.com/nordstad/PinViz/pull/38)
- Bump mkdocs-material from 9.7.0 to 9.7.1 (https://github.com/nordstad/PinViz/pull/37)
- Bump mcp from 1.24.0 to 1.25.0 (https://github.com/nordstad/PinViz/pull/36)
- bump version (https://github.com/nordstad/PinViz/pull/39)
0.5.0 - 2025-11-30¶
Added¶
- Add documentation links to all built-in device types (https://github.com/nordstad/PinViz/pull/27)
Changed¶
- Improve README.md structure and user experience (https://github.com/nordstad/PinViz/pull/26)
Fixed¶
- Fix docstring formatting: Change 'Example:' to 'Examples:' (https://github.com/nordstad/PinViz/pull/25)
Dependencies¶
- Bump ruff from 0.14.5 to 0.14.6 (https://github.com/nordstad/PinViz/pull/22)
- Bump mkdocstrings from 0.30.1 to 1.0.0 (https://github.com/nordstad/PinViz/pull/24)
- Bump mkdocstrings-python from 1.19.0 to 2.0.0 (https://github.com/nordstad/PinViz/pull/23)
0.4.0 - 2025-11-25¶
Added¶
- Raspberry Pi Zero 2 W board support with full 40-pin GPIO header
- Custom Pi Zero SVG board asset (scaled 1.6x for optimal visibility)
- Board-specific pin sizing for better clarity on compact boards
- Accurate pin positions extracted and scaled from official dimensions
- All standard pin roles supported (GPIO, I2C, SPI, UART, PWM, power, ground)
[0.3.0] - 2025-01-23¶
Changed¶
- BREAKING: CLI now requires explicit command for rendering diagrams
- Old:
pinviz diagram.yaml -o output.svg - New:
pinviz render diagram.yaml -o output.svg - Reason: Improved clarity and consistency with modern CLI tools (AWS, kubectl, etc.)
- Improved CLI help formatting with professional output
- Removed confusing
{render,example,list}syntax from help - Added properly formatted examples section with line breaks
- Added default values to all options (
--gpio/--no-gpio) - Made
--gpio/--no-gpiomutually exclusive groups - Better metavar names:
CONFIG_FILE,PATH,NAME - Enhanced CLI structure
- Changed "Positional Arguments" to "Commands:" section
- Added descriptions to each subcommand
- Custom help formatter preserves examples formatting
Fixed¶
- CLI help examples now display on separate lines (no wrapping)
- MCP server documentation updated with correct CLI commands
- All documentation updated to use new CLI format
Documentation¶
- Updated
docs/guide/cli.mdto show only new format - Updated MCP server docstrings with correct command syntax
- All examples in documentation now use
pinviz renderformat
[0.2.1] - 2025-01-23¶
Fixed¶
- Logo display on PyPI by using absolute GitHub URL instead of relative path
[0.2.0] - 2025-01-23¶
Added¶
- MCP Server Integration: AI-powered GPIO diagram generation via Model Context Protocol
- Natural language parsing: Generate diagrams from prompts like "connect BME280 sensor"
- Intelligent pin assignment: Automatic I2C bus sharing, SPI chip selects, power distribution
- URL-based device discovery: Parse device specs directly from documentation URLs
- 25-device database with I2C, SPI, GPIO, and UART devices
- User device database for custom devices
- MCP tools:
generate_diagram,parse_device_from_url,list_devices,get_device_info - Supported domains for URL parsing: Adafruit, SparkFun, Waveshare, Pimoroni, Raspberry Pi, Seeed Studio, peppe8o.com
pinviz-mcpcommand line entry point for MCP server- Comprehensive test suite with 325+ tests (71% code coverage)
Changed¶
- Restructured package as namespace package for better MCP server integration
- Moved assets into
src/pinviz/for proper packaging withuv build - Enhanced YAML generation with explicit
yaml_contentfield for Claude Desktop - Improved MCP tool documentation with clear usage instructions
Fixed¶
- YAML reconstruction errors when using MCP server through Claude Desktop
- Asset packaging issues with
uv_buildbackend
0.1.5 - 2025-01-21¶
Added¶
- Modern CLI with rich-argparse for beautiful, colorful help formatting
--version/-vflag to display package version- Automatic version detection from package metadata using importlib.metadata
Changed¶
- CLI help output now uses RichHelpFormatter for improved readability and visual appeal
- Enhanced user experience with color-coded help text and better formatting
0.1.3 - 2025-01-21¶
Changed¶
- Improved installation instructions in README and documentation
- Recommend
uv tool install pinvizas primary method for CLI usage - Clearly explain difference between
uv tool installanduv add - Add note about
uv runprefix requirement foruv addinstallations - Restructured Quick Start guide with progressive learning path
- Step 1: Try built-in examples (immediate success)
- Step 2: Create custom YAML diagrams
- Step 3: Use Python API for programmatic control
- Updated GitHub Pages documentation (docs/getting-started/) to match README improvements
Fixed¶
- Installation confusion where users couldn't find
pinvizcommand afteruv add
0.1.2 - 2025-01-21¶
Fixed¶
- Fixed image URLs in README to use raw.githubusercontent.com for proper display on PyPI
0.1.1 - 2025-01-21¶
Added¶
- PyPI publishing workflow with GitHub Actions following uv best practices
- Comprehensive CONTRIBUTING.md guide for contributors
- JUnit XML test result reporting to CI pipeline
Changed¶
- Moved example diagrams from
out/toimages/directory - Removed Codecov badge (will be re-added later with proper token)
- Consolidated dev dependencies to fix CI failures
Fixed¶
- Fixed test result publishing permissions in GitHub Actions
0.1.0 - 2025-01-20¶
Added¶
- Initial release of PinViz (formerly pi-diagrammer)
- Declarative YAML/JSON configuration for diagram creation
- Programmatic Python API for creating diagrams
- Automatic wire routing with configurable styles (orthogonal, curved, mixed)
- Inline component support (resistors, capacitors, diodes)
- Color-coded wires with automatic assignment based on pin function
- Built-in templates for Raspberry Pi 5 board
- Pre-configured device templates:
- BH1750 I2C light sensor
- IR LED ring module
- Generic I2C/SPI devices
- LED and button components
- Optional GPIO pin reference diagram
- SVG output for scalable, high-quality vector graphics
- CLI tool with commands:
pinviz render- Generate diagrams from config filespinviz example- Generate built-in examplespinviz list- List available templates- Comprehensive documentation with MkDocs + Material theme
- GitHub Actions CI workflow with automated testing
- Project badges (CI, docs, license, Python version, PyPI)
- Full test coverage (85%+) with pytest
- Type hints throughout codebase
- Ruff linting and formatting configuration
Documentation¶
- Complete README with installation, quick start, and examples
- CONTRIBUTING.md with development guidelines
- CLAUDE.md for AI assistant context
- Example configurations and diagrams