- Added an online board showcase to the picker with cards for online-only boards and components, including Seeed Studio XIAO, reSpeaker, and UNIHIKER M10.
- Added a runtime overlay registry so private board packs can register boards, components, sensors, datasheets, built-in peripherals, and QEMU-Linux board kinds.
- Added ESP-IDF v5.5 compile support for the entire ESP32 family, ESP32 bridge seams, and S3/C3 gallery examples.
- Added serial-as-USB-CDC behavior when boards.txt declares it, and the real Arduino variant now reaches sdkconfig.
- Added a starter-template picker for the pristine editor and New workspace, with circuit thumbnails, a blank canvas behind, a prominent + for Blank, an Arduino Mega card, and one ESP32 per chip.
- Added File/Edit/View/Language/Help menus in the editor header, translated in all nine locales, with full desktop-menu parity.
- Added folder trees in the file explorer, with create/delete folder support.
- Added the Part Inspector, merging the right-click dialog with the picker card; pins remain visible and traceable, and boards open it too.
- Added example links in the Properties tab and dynamic board tabs in the examples gallery.
- Added a What's New modal with a product news feed, once-per-user queue, inline images/GIFs, YouTube click-to-play previews, and bare image URLs rendered inline.
- Added microphone streaming into boards with an on-board mic.
- Added camera toggles for component-owned webcams, including ESP32-CAM and XIAO ESP32S3 Sense; the webcam starts automatically when running an ESP32-CAM.
- Added live SD card contents in the SD panel, letting users list and download files written by sketches; boards and parts with built-in microSD/TF slots accept uploads.
- Added board-agnostic speaker and microphone seams, a speaker-sink gate, electrical seated sockets, and tilt/battery controls for boards with IMUs or gauges.
- Added 4-level greyscale rendering in the SSD168xDecoder for e-paper panels.
- Added canvas drop feedback, meaningful clicks, drag-to-front, a socket magnet, a board-status slot, and floating zoom controls.
- Added Raspberry Pi display output, serial over the header in Linux mode, complete Pi peripheral plumbing, unified editor UX (Monaco/explorer/xterm), one-click run, quiet boot, and guest setup.
- Added QEMU guest session ceiling, optional restricted guest egress via guestfwd tunnel, per-session extra drives, and start_pi payload passthrough.
- Added a serial-actions slot in the monitor toolbar.
- Added a pluggable browser MicroPython path for pro simulators.
### Changed
- Reworked the editor shell: the toolbar now rides inside the header, the overflow menu folded into File, and marketing navigation moved out of the editor.
- Replaced the top-level Language menu with an Account menu; language and account controls moved to a bottom-left corner box.
- SD auto-copy now puts only project data files on the card; source files stay off it.
- Reordered picker contents maker-first, with passives, analog, and logic gates moved to the end.
- Renamed component camera toggles to "Camera" to match the board toggle.
- Softened datasheet purchase links from "Buy" to a localized "Product page" with UTM attribution and click reporting.
- Made the inspector and datasheet share one action bar, use one height, and avoid sideways scroll.
- Translated remaining raw editor/examples strings into all nine locales; leftover Spanish in gallery code was translated to English.
- Cleaned up compile logs to tell the story once, without CMake's diary, and with the final flush speaking in whole lines from the real buffer.
- Online-only showcase cards now use compile/run context (board kind, gallery example, engine) to stay quiet when irrelevant.
### Fixed
- Fixed ESP-IDF environment issues: the Python venv now matches the IDF tree's version and works in Docker; header-only libraries no longer break ESP32 builds; quoted header includes resolve libraries; esp_camera.h was restored.
- Fixed compiler failures caused by missing board_fqbn and sdkconfig writes not following defaults.
- Fixed ESP32 simulator bridge issues: rebuilt boards re-sync the flat simulator field and adopt I2C devices; SPI completeTransfer now delivers MISO; ADC and GPIO-to-ADC channel mapping consult the bridge; the M5 Cardputer header resolves to real GPIO numbers.
- Fixed ESP32 button handling: active-low is decided by the circuit, not a constant.
- Fixed compile-output false positives: IDF "Project commit: HEAD-HASH-NOTFOUND" banners are no longer errors.
- Fixed wire endpoint races: both halves of the load-time endpoint race close, and endpoints recalculate when a late-defined element upgrades.
- Fixed canvas stacking and socket interactions: seated boards stack as one piece, sockets latch at drag start, boards stay above their socket, boards paint only when seated and above components, and touchscreen swipes no longer pan the canvas while running.
- Fixed socket seating tolerance so a board that is slightly off the seat stays plugged in.
- Fixed e-paper rendering: refresh tears gone by persisting the window union, vertical orientation correct for descending-Y panels, custom B/W waveform LUTs honored, and 4-level greyscale works.
- Fixed NTC temperature sensor readings on 3.3V boards and corrected three backwards-decoded examples.
- Fixed MicroPython prompt handshake: the \r poke no longer fires after the prompt is already up.
- Fixed the Libraries manager: Escape now closes it.
- Fixed Part Inspector rendering: no more flicker on every render, dropped labels for inset pin columns, clipped tall pin stacks, crowded pin headers drawn vertically, and a column is recognized as a run of pads.
- Fixed the inspector "no datasheet" state: parts now say they have no datasheet instead of showing an empty tab.
- Fixed right-clicking a board while running so it opens the board inspector.
- Fixed picker overlay issues: late overlay registration re-renders the picker without a reload, version hooks are declared before memos, previews match variants, the datasheet popover appears above the modal, duplicate Pi cards are removed, Pi Zero/1/2 are wired as real boards, and many-pin inspectors are readable.
- Fixed Pi/QEMU-Linux issues: booting without a bridge no longer fails silently, restarting in Linux mode boots the guest, serial TX hooks survive simulator rebuilds, overlays no longer hijack Pi drawing, per-tab client_id is stable, Pi board ids are parsed correctly, and Run stays enabled on running QEMU-Linux boards for fast re-runs.
- Fixed SPICE pin mapping for micro:bit-style P<n> pad names.
- Fixed example gallery: direct pro-example URLs no longer hang or flash a 404, LED examples have series resistors,
- Added Wokwi-style wire routing: first-time auto-routing around components, avoidance of existing wires, and live routed preview.
- Added pre-flight verification checks for unpowered nets, open source loops, and relay coil voltage mismatch.
- Added a running weather-station demo GIF to the landing page hero.
### Changed
- Made resistors default to vertical orientation when added on the canvas.
- Updated wire styling and editing to use Wokwi-style rounded bends, fuse sub-pixel jogs, snap segment drags to the wire's own runs, and clean up degenerate paths.
- Updated Docker images to include the ESP32-S3 ROM.
### Fixed
- Fixed ESP-IDF library resolution so generic platform headers are never resolved against user libraries and foreign libraries no longer leak into user_libs_all.
- Fixed the ESP-IDF architecture guard skipping usable libraries.
- Fixed ESP32-S3 ADC channel mapping in setAdcVoltage/setAdcWaveform.
- Fixed STM32 output pins in SPICE by stamping them as voltage sources and unifying silkscreen-to-GPIO mapping; this also fixes nano-ESP32 buttons and ESP32-family SPICE analog.
- Initialized INPUT_PULLUP pins to their resting level when pull is enabled.
- Fixed frozen LEDs on QEMU-based boards after resubscription.
- Fixed run-after-agent restarts by forcing a clean ESP32 bridge reconnect and a clean restart on Run.
- Fixed display bodies occluding crossing wires.
- Fixed 7-segment displays rebuilding per-element simulation state when digit count changes.
- Fixed brand-prefixed metadata IDs (e.g., wokwi-lcd2004) resolving to their base part.
- Fixed Raspberry Pi component cards and Pi 4/5 board thumbnails to show full illustrations and clearer PRO badges.
- Fixed router corner cases for endpoints inside obstacles and checked-elbow parity.
- Fixed pin tracing to recognise runtime boards and same-hole junctions.
- Fixed breadboard seating edge cases: run-before-seating race and agent-seated parts landing under rotation.
- Fixed component property handling to type-coerce strings and reseat on pininfo changes.
- Fixed editor URL sync after New workspace and clearing project identity on .vlx import.
- Fixed ESP32 GFX examples to declare the Adafruit BusIO dependency.
- Fixed autosave not starting for already-mounted hooks.
### Performance
- Improved editor responsiveness during fast-toggling simulations by unfreezing the ESP32 clock update path.
- Added keyboard mapping for pushbuttons – assign a key from the component property dialog; keycap badge shows the mapping on the canvas.
- Introduced global message dialog and confirm modal replacing native `confirm()` and `alert()` calls across the editor, file explorer, and other modals.
- Preserved in-progress workspace across login redirect using sessionStorage (stashed as `.vlx` and restored after authentication).
- Added full 830-point and mini 170-point breadboard parts with Fritzing artwork (CC-BY-SA 3.0) and computed pin geometry.
- Added built-in internal connectivity for breadboard strips and power rails (netlist merging).
- Added new 4-pin I2C SSD1306 OLED module and gallery examples for Uno, ESP32, Pico, and STM32.
- Added auto-detecting SSD1306 part that automatically selects I2C or SPI protocol based on wiring.
- Added ESP32 WiFi + MQTT (PubSubClient) gallery example that round-trips through a public broker.
- Added ESP32-S3 ILI9341 TFT display example.
- Added multi-board “Run All” button with split-menu to run only the active board.
- Added wire color discoverable UI on desktop: context menu with color swatches and floating palette when a wire is selected.
- Added featured component sorting – breadboards now lead the component picker.
- Added per-component pin hover highlighting (only the pin under the cursor lights up, matching the breadboard behaviour).
- Added runtime burnout for resistors, electrolytic capacitors, and LEDs (sustained overload destroys the part; charred visual and open circuit).
- Added pre-flight circuit verifier rules: missing power, dangling two‑terminal parts, power shorts, over‑voltage warnings for boards and electrolytic capacitors.
- Added Pico W WiFi emulation (paid feature): virtual DHCP/ARP net, IoT gateway, internet bridge, and full associaton.
- Added AVR EEPROM emulation (fixes hangs on `EEPROM.read/write/update`).
- Added ATtiny85 USI I2C bridge enabling SSD1306 OLED support via TinyWireM.
- Added feedback mechanisms: star banner follow-up for users who dismissed the first prompt, and circuit verification results now appear in the output console.
### Changed
- Redesigned the examples page: compact toolbar, denser grid with 5:3 thumbnails (no black bars), and filter chips with dropdown selects.
- Unified editor toolbar controls now collapse by container width instead of viewport, preventing overlap when the AI chat panel is open.
- Removed redundant file-tabs bar from the toolbar; file switching is now done exclusively from the left explorer.
- Breadboards now always sit behind all other components (z‑index -1) to reflect their physical role.
- Pin overlays stack within their component group and no longer leak through covering components.
- Board pins stay clickable – hover handlers moved to the component wrapper, not the drag overlay.
- Slide-switch model corrected from SPST to genuine SPDT with pin‑1/pin‑3 throws and a common wiper.
- NTC temperature sensor SPICE model fixed (pull‑up on top, NTC to GND) so the decode matches the example sketch.
- SPICE pre-flight and runtime electrical re-solve now triggered on all output pin edges (ESP32, STM32, Raspberry Pi) and on component burnout.
- Circuit verifier findings are now logged to the output console instead of a toolbar toast.
- Virtual file system upload now auto‑starts the Pi and waits for the shell before sending files.
- The Run button shows a spinner and stays disabled while circuit verification is in progress.
- Non‑English locales (zh‑cn, pt‑br) now load correctly on direct navigation.
-`/en/*` routes are redirected to the prefix‑free path instead of rendering a blank page.
- Star banner flags are now separate for dismissal and click‑through, allowing one follow‑up prompt.
- Built‑In breadboard and minimap artwork switched to the Fritzing parts‑library (CC‑BY‑SA 3.0).
- ESP32 digital inputs are now driven from the real SPICE solve for accurate `digitalRead()`; AVR inputs include modeled internal pull‑up resistors; RP2040 and STM32 also benefit from SPICE‑driven inputs.
- Pico W board now loads the `RPI_PICO_W` firmware variant (with `network` module) when a CYW43 peripheral is present.
### Fixed
- Fixed keyboard‑mapped buttons firing while typing in the Monaco code editor (focus sink detection improved).
- Fixed board pins being unclickable when the cursor moved from the drag overlay onto a pin square.
- Fixed wire colour changes from the UI being a no‑op (`applyNow` was `false`).
- Fixed `recordUpdateWire` being undefined in `SimulatorCanvas` causing JavaScript reference errors.
- Fixed rotated component pin positions being wrong for wire starting, undo/redo, and import (three separate bugs).
- Fixed Delete/Backspace key inadvertently triggering board removal instead of only deleting selected components.
- Fixed ESP32 UART pin classification missing for multi‑board Serial interconnect (TX/RX, TX2/RX2 now properly mapped).
- Fixed ESP32‑C3 digital inputs not resolving from SPICE (spiceDrivenInputs enabled).
- Fixed ESP32 dual 3V3/5V pins (e.g., DevKitM‑1) not being tied to the supply rail.
- Fixed ATtiny85 pin name mapping and Timer0 PWM register addresses (blink/PWM works).
- Fixed AVR EEPROM not instantiated –`EEPROM.read/write` no longer hangs.
- Fixed SSD1306 page‑addressing mode (default memory mode set to 2) so Tiny4kOLED and U8g2 render correctly.
- Fixed breadboard holes not connecting during netlist building (5‑hole strips and power rails now merge).
- Fixed breadboard pins invisible for dense components – only the pin under the cursor lights up (consistent with other components).
- Fixed Pico W WiFi emulation: gSPI framing, F2 byte order, host‑wake IRQ, event frames (BDC headers), and virtual DHCP/ARP.
- Fixed Pico W MicroPython file writing (UTF‑8 byte length for LittleFS) – multi‑byte characters no longer truncate files.
- Fixed ESP32‑C3/‑S3 compiling with wrong target (`esp32` instead of `esp32s3`) and missing GPIO pins 40‑48.
- Fixed ESP32 firmware download fast‑path for WiFi emulation (inDiscardableWriteData).
- Fixed SPICE re‑solve not being triggered on ESP32/STM32/Pi output pin edges (LED stayed stuck on).
- Fixed SPICE re‑solve not being triggered when a component burns out (burnt part stayed in the circuit).
- Fixed circuit verifier being blind to current faults in production (branch currents not enumerated via ngspice AllVecs).
- Fixed circuit pre‑flight verification never running on Run button click (click event mistaken for `skipVerify` argument).
- Fixed verification findings being wiped when Run auto‑compiled after verification.
- Fixed tooltip/text fields not being respected when Backspace was used to delete wires (AI chat, etc.).
- Fixed window blur not releasing keyboard‑mapped buttons (no stuck keys after Alt‑Tab).
- Fixed minimap red viewport rectangle not updating during canvas drag (now live‑tracked via `requestAnimationFrame`).
- CHANGELOG.md entries reflect all new features and changes for v3.0.0
### Fixed
- ESP32: WiFi/HTTP client link by enabling mbedTLS PSK; BLE stack switched to Bluedroid; LEDC duty routing for multi‑servo; flash image trimming (10× smaller JSON); sdkconfig defaults for cleaner serial output
- RP2040: delay()‑based sketches now run in real‑time on slow hosts; SPI0 routing fixed for Arduino init; UART TX waveform synthesized
- AVR: serial RX queue so `Serial.readStringUntil` sees full input; UART TX waveform at bit level; INPUT_PULLUP pin state; LED visualization through SPICE
- Multi‑board: initSimulator no longer wipes Interconnect’s UART wrapper; board removal reconciles `running` flag
- Canvas: wires follow component rotation; undo/redo state restored; component deletion cascades to wires; sensor panel opens on desktop click; wire color palette works
- i18n: index.html SEO fallback div removed after mount; missing locale keys for admin/user pages added
- Desktop: openExternal works via cascade of IPC paths; native menu routes navigate in‑window