Skip to content

Releases

circsim v0.2.9 — documented, and a more honest Critic

Choose a tag to compare

@github-actions github-actions released this 22 Jul 19:35

Highlights

A full documentation site. circsim now has proper docs at epim.github.io/circsim — an install guide, the First Light tutorial, task how-tos (attach a schematic, ground & supply, energize, bench & leads, probe & scope, interactive MCU pins, run the Critic), and a complete reference (model library, instruments, Critic checks, pin maps, file formats, architecture). Written to explain both how and why, with real screenshots of the app.

A more honest Board Critic.

  • Loop area now says when it couldn't check. On a board with high-speed nets but no ground plane to measure against, the loop-area check used to report nothing — indistinguishable from "checked and clean." It now shows an explicit "loop area: not assessed — no ground copper" line, so the riskiest case (a fast signal with no return plane anywhere) is called out as not checked instead of implied fine.
  • Copy the findings. A new Copy button on the Critic panel puts the whole audit — the summary, every finding with its detail, assumption, and suggestion, and any not-assessed checks — on your clipboard as plain text, ready to paste into a design review or a note to your fab.

Fixes & reliability

  • Upstream ngspice/koffi teardown fix. circsim now ships stock koffi 3.1.2, which carries the upstream fix for the async-callback-during-shutdown crash (Koromix/koffi#271) that our own bug report drove. This also removes the last vendored native patch from the project — we're back on a clean upstream release, validated through the full Electron E2E gate on every platform.
  • Consistent "bench" wording. Retired the last leftover "instrument rack" strings from the v0.2.8 bench rebuild.

Quality

  • 1633 automated tests (87 files) plus the 6-scenario Electron E2E suite, green on Windows, macOS, and Linux.

Installers are unsigned (see the project notes on first-run prompts). Your design files are never modified.

circsim v0.2.8 — the bench, rebuilt

Choose a tag to compare

@github-actions github-actions released this 21 Jul 07:22

Highlights

The bench, rebuilt. Instruments now live on a bench shelf of front panels below the board, and you connect one by dragging a lead out of its jack onto the copper — the same "clip a probe onto the board" gesture you'd use at a real bench.

  • Front panels, not a rack. Each instrument (DC supply, function generator, logic input, voltage/current probe, potentiometer, ground) is a labeled front panel on the shelf with its own knobs, readouts, and colored jacks. + Add instrument drops a new one on the shelf, unwired, ready to connect.
  • Draw your own leads. Press a panel jack and drag — a sagging wire follows your cursor into the 3D view; release on copper to clip it to that net (or on a component, for a current-probe clamp). Drag a clip to re-route it, or off the board to detach. Each wired terminal shows its lead at all times, tracking the board as you orbit and zoom.
  • Turn the knobs live. Every panel control drives the running simulation the same way it always did — dial the supply voltage down and the LED dims in real time. First Light now walks through the full tactile path: energize, run a probe lead, turn the supply knob.

Under the hood this replaces the old right-dock instrument rack. Your design files are never touched — leads and wiring live only in the in-memory simulation model, as always.

Fixes

  • A net rewire while a simulation is running now correctly reloads the circuit instead of silently leaving it on the old net.
  • Leads attach to a net even when its copper sits directly under a component body (the case on tightly-packed boards).

Quality

  • 1628 automated tests (87 files) plus the 6-scenario Electron E2E suite, green on Windows, macOS, and Linux.

Installers are unsigned (see the project notes on first-run prompts).

circsim v0.2.7 — polarized parts, schematic-authoritative

Choose a tag to compare

@github-actions github-actions released this 16 Jul 15:26

Highlights

A correctness release for polarized parts, driven by a real pre-fab board review (an LED lantern, rev B).

  • JLC/EasyEDA diode polarity fixed. circsim's footprint-name heuristics assumed every diode footprint follows the KiCad convention (pad 1 = cathode). JLC/EasyEDA libraries use the opposite (pad 1 = anode), so boards routed with JLC parts simulated every diode backwards. All 7 diode-family model cards (1N4148, 1N4001, 1N5819/SS14, SS54, both zeners, SMAJ24A TVS) now recognize the EasyEDA dimension-pattern footprint names and apply the anode-first pin map.
  • The schematic now outranks footprint guesswork. When a schematic is attached, diode/LED pin maps are derived from the symbol's own A/K pin names — the design file's ground truth — instead of trusting name-pattern beliefs about library conventions. Precedence is now: your Model Doctor override → schematic pin names → footprint-name heuristics → safe default. When the schematic contradicts a confident footprint match, circsim auto-corrects the simulation and posts an informational note in the warnings bar (ⓘ pin map corrected from schematic) — no false "board risk" alarms for what can only be a circsim-side belief error.
  • Convention guard tests. A new test corpus of real JLC and KiCad footprint names locks every polarized model card's pin-map behavior against the actual matcher, so a silently wrong convention belief (or an accidental reordering of match keys) fails CI instead of shipping.

As always, circsim never writes to your design files — corrections affect only the in-memory simulation model.

Quality

  • 1574 automated tests (82 files) plus the 6-scenario Electron E2E suite, all green.

Installers are unsigned (see the project notes on first-run prompts).

circsim v0.2.6 — bench UX polish

Choose a tag to compare

@github-actions github-actions released this 15 Jul 07:37

Highlights

A UX polish release, driven by an external design review of the bench workflow.

  • Model Doctor, decluttered. Unresolved-part cards now lead with the three actions that fix most parts — Import .lib…, Pin map, and Stub open — with the rest (Stub short, Interactive pins, Ask your LLM) tucked into a ⋮ overflow menu. Same capabilities, far less visual noise per card.
  • Clearer first run. The empty state now has one obvious primary action: Open sample project — a 555 blinker that shows the full simulation flow in one click. First Light (a one-LED dimmer, the smallest possible start) and Open board… sit alongside as secondary options.
  • "Probe this net" you can actually see. The probe button in the instrument rack is now a high-contrast green with a probe-tip glyph (⌖) instead of low-contrast text.
  • Minimizable fidelity banner. The amber "approximate models" banner can be minimized (») to a compact badge in the header — ⚠ N approximate or ⓘ N open by design — so it stops covering the board without hiding the information. It automatically re-expands whenever the set of affected parts changes, and clicking the badge brings the full banner back.
  • Net Voltages discoverability. A dot cue appears on the Net Voltages tab the first time operating-point results land, so new users find the per-net readout.

Quality

  • 1520 automated tests (80 files) plus the 6-scenario Electron E2E suite, all green.
  • Every change is renderer-only; the simulation engine is unchanged from v0.2.5.

Installers are unsigned (see the project notes on first-run prompts).

v0.2.5 — op-informed rail sensing, Schmitt oscillators, koffi 3.1.1

Choose a tag to compare

@github-actions github-actions released this 14 Jul 16:23

Highlights

  • Op-informed rail sensing. Digital logic chips (CD4000 / 74HC) whose VDD sits on a switched or derived rail — e.g. a rail behind a high-side FET, with no bench supply directly attached — now get the correct logic swing. A first operating-point solve measures the actual rail voltage and a second pass regenerates the chip's output swing and input thresholds from it. Includes a per-net rail-voltage override (set it from the Net Voltages panel) and a gated-off warning when a switched rail reads ~0 V at the operating point (with a one-click "set rail voltage").
  • Schmitt-trigger oscillators self-oscillate. CD40106 / 74HC14 Schmitt inverters now model true hysteresis, so an RC Schmitt astable actually oscillates rail-to-rail instead of parking at mid-rail.
  • LM339 quad comparator — full 14-pin, four-unit support.
  • More accurate floating-net detection — per-subckt terminal-conductivity analysis refines which dangling nets get bled to ground.

Under the hood

  • ngspice FFI modernized to koffi 3.1.1 (stock, all platforms). The process-exit teardown race behind koffi issue #271 — an intermittent crash when quitting while a simulation was still streaming callbacks — is handled by circsim's clean simulation-host teardown (halt + join the background thread before exit). The native koffi fix is being submitted upstream.

Quality

  • 1496 automated tests, including real-ngspice integration coverage for the new rail-sensing pipeline (two-pass derivation, gated-off fallback, and the manual override).

Installers are unsigned (see the project notes on first-run prompts).

circsim v0.2.4

Choose a tag to compare

@github-actions github-actions released this 10 Jul 19:28

circsim v0.2.4

The real-board release: every part on the 130-part reference board now resolves or is accounted for, the whole-board transient runs, and the bench UI tells you the truth about what it solved.

Added

  • Model library — power path and logic: NCE4012S / NCE6005AS (dual) / AO3401 MOSFETs, SS54 schottky, SMAJ24A TVS, behavioral stubs for the LTC4020 buck-boost charger, BQ77915 battery protector, and AL8860 LED driver (with working CTRL dimming), and a CD4000 logic family (CD40106 schmitt inverter, CD4011 NAND). The reference board went from 14 unresolved parts at v0.2.3 to zero.
  • "Open by design" parts: library entries can now document why a part is deliberately not modeled (CH224K USB-PD sink, CD4538 monostable). They show a grey informational badge and note in Model Doctor instead of a red error — and the banner still tells you circuits they drive won't respond.
  • Net voltages readout: a filterable bottom-dock tab listing every net's operating-point voltage by name; click a row to highlight the net. Annotations on the 3D board now carry net names in the DOM for tooling.
  • Click-to-probe: select a net and press "Probe this net" — no more drag-only probing. Scope hint teaches both gestures; probe trace colors are allocated consistently across all attach paths.
  • Op solve honesty: operating-point results carry how they were solved; any fallback (gmin/source-stepping/transient-op) shows a persistent caveat instead of presenting 0.000 V readings as truth, and stale voltages are dimmed while a new solve runs.

Fixed

  • Whole-board transient no longer aborts ("Timestep too small"): boards with dangling subcircuits — e.g. off-board LED strings behind unstuffed connectors — produced a structurally singular matrix. Deck generation now detects floating islands and bleeds them to ground with 1 GΩ resistors; grounded circuits are untouched.
  • Digital logic swing follows your bench supply: a CD4000/74HC part whose VDD pin is directly on a supplied net now uses that supply's voltage for its logic levels instead of the family default (12 V / 5 V).
  • Convergence errors name the culprit: "trouble converging around Q7 (NCE4012S)" instead of raw SPICE instance names; works for stubbed parts too.
  • Supply suggestions are ranked (the auto-attach pick is the first chip) and auto-attached supplies are labeled as such.
  • "Results approximate" banner collapses to a count with an "open Model Doctor" link instead of a wall of refdes; the link scrolls to the first problem part reliably.
  • Model Doctor follows part selection; ambiguous-match false positive for AL8860 removed; opening boards without sidecar files no longer logs main-process errors; "-0.000 V" annotations normalized.
  • macOS packaging: each DMG is built only on its own architecture runner, with a CI gate verifying the bundled ngspice matches (the root cause behind the v0.2.2/v0.2.3 arm64 repairs).

Notes

  • Installers remain unsigned (documented deferral) — macOS: right-click → Open on first launch; Windows: SmartScreen "Run anyway".
  • Suite: 1444 tests (was 1341 at v0.2.3), all green; integration tests run against real ngspice 46.

circsim v0.2.3

Choose a tag to compare

@github-actions github-actions released this 10 Jul 07:07

circsim v0.2.3

This release is about one thing: real routed boards now simulate end-to-end. Previously the bench worked great on demo boards but a production KiCad 9 board (130 parts, 99 nets, dense model variety) would fail to resolve most parts, mis-generate the SPICE deck, and collapse to a handful of nodes. All of that is fixed — the reference board now generates a valid deck and converges to a full operating point.

Added

  • Broader automatic model coverage — component values with rating suffixes (100nF/50V, 2.0k/0.5%) parse correctly; a part's Value field is tried as an MPN against the bundled library; connectors (JST, pin headers) auto-resolve as open stubs instead of blocking the bench. New bundled models: BAS16/BAS16W and B5819W/SS14 diode aliases, a 3.0 V zener, LM339 comparator, and a TL431 shunt reference (verified against real ngspice).
  • Smarter supply detection — the Ground & Power panel now recognizes and ranks real-world rail names (VBUS, VBAT, VSYS, PACK+, VIN, …), excludes sense/feedback taps and ground, and supply suggestions are click-to-attach with a browse picker as fallback.
  • Attach a schematic to a routed board — boards whose .kicad_sch isn't sitting next to the .kicad_pcb (typical for autorouted output in a separate folder) can now attach one via the Ground & Power panel or by drag-and-drop, pulling in the schematic's simulation models.

Fixed

  • macOS installers now bundle the right simulator — the release pipeline cross-built each mac architecture's dmg on the other architecture's runner and could ship a dmg whose bundled ngspice didn't match the app (the v0.2.2 Apple Silicon dmg was affected; its asset has been repaired). Builds are now host-arch-only and CI verifies the bundled ngspice architecture before attaching.
  • SPICE deck generation for real component mixes — device letters now come from the model card's type (a zener on a DZ refdes and a MOSFET on a Q refdes both emit correct elements), VDMOS transistors get their bulk terminal, and nested subcircuits (op-amp/comparator/regulator internals) are inlined transitively instead of failing with "unknown subckt".
  • Manual pin-map edits now take effect — a pin map corrected in the Model Doctor was stored but silently ignored during re-resolution; it now reaches the generated deck, and clearing the override reverts to the library pin map.

Downloads

Installers below are unsigned (expect the usual OS warnings): Windows NSIS .exe, macOS .dmg (Intel x64 and Apple Silicon arm64), Linux .AppImage and .deb.

circsim v0.2.2

Choose a tag to compare

@github-actions github-actions released this 06 Jul 04:36

circsim v0.2.2

A small, focused patch release.

Fixed

  • Spurious "Simulator restarted" on slow machines — the engine supervisor's stall watchdog (10 s) could kill a perfectly healthy solve: ngspice's operating-point retry ladder (gmin/source stepping → transient ramp) can grind silently for longer than that on a slow or heavily loaded machine, especially on hard-to-converge boards. The watchdog now allows 60 s of silence before declaring the engine wedged — still prompt recovery for a genuine hang, no more killing solves in progress.

Infrastructure

  • The full Playwright end-to-end suite (app launch → open board → power on → live results, plus a packaged-app smoke test) now runs in CI on Windows and Linux on every commit, and releases are gated on it. This is how the watchdog bug was caught.
  • Engine crash diagnostics from the SimHost process now surface in test logs.

Downloads

Installers below are unsigned (expect the usual OS warnings): Windows NSIS .exe, macOS .dmg (Intel x64 and Apple Silicon arm64), Linux .AppImage and .deb.

Note (2026-07-10): the original circsim-0.2.2-arm64.dmg was built with the wrong-architecture ngspice inside (a release-pipeline bug, fixed in v0.2.3's pipeline) — the app launched but the simulator could not start. The asset has been replaced with a correct build; if you downloaded the Apple Silicon dmg before this date, please re-download (or grab v0.2.3).

v0.2.1

Choose a tag to compare

@github-actions github-actions released this 02 Jul 17:11

circsim v0.2.1

The validation bench gets live and honest: the Live Bench now animates in real time, the Board Critic gains two physics-based checks, and the whole test suite runs against real ngspice on every platform.

Live Bench

  • Live LED glow during transient runs — LEDs now blink in step with the simulation (watch the bundled 555 blinker demo run). Previously glow only updated on a DC operating-point solve.
  • Fixed reversed LEDs on both bundled demo boards — first-light and blinker-555 shipped with the diode reverse-biased (dark LED). A guard test now pins correct polarity on every bundled board.
  • Coach polarity fix — the "wired in backwards" diagnosis now derives anode/cathode from the same resolved pin map the simulator wires by, so the coach can never disagree with the sim.

Board Critic

  • New: IR-drop check — builds a resistive graph of each power rail's actual copper (tracks, vias, pads), injects the operating-point currents, and reports the worst rail sag with a plain-language headline (warn >2 %, error >5 % sag).
  • New: loop-area check — flags clock/high-speed nets whose signal↔ground-return loop area looks EMI-prone (explicitly a v1 heuristic).

Reliability

  • Fixed the Unix test hang — an AB-BA deadlock between ngspice's background thread and synchronous FFI calls could brick the process under CPU contention. All engine commands are now issued asynchronously and strictly serialized; teardown drains the background thread before unloading. CI now runs the full real-ngspice integration suite on Windows, macOS (x64 + arm64), and Linux.
  • Fixed macOS/Linux code-model manifests — earlier bundles listed only one of the six XSPICE .cm files due to a build-script bug.
  • App chrome shows the real version — the header was hardcoded to v0.1.0; it is now injected from package.json at build time.
  • New end-to-end test drives the First Light flow in the real app: open demo → Energize → LED glows → lower the supply → it dims.

Downloads

Installers below are unsigned (expect the usual OS warnings): Windows NSIS .exe, macOS .dmg (Intel x64 and Apple Silicon arm64), Linux .AppImage and .deb.