Releases: yey-boats/instruments
Release list
v0.4.2
Changes
- feat(ota): pull manager-relative firmware URL over HTTP with device auth (bd18bdf)
- fix(ota): follow redirects on manager-pull firmware download (4ee058c)
Flash instructions
Download the merged firmware image for your board target:
esp32-4848s040-merged_firmware.binwaveshare-touch-lcd-4-merged_firmware.binwaveshare-touch-lcd-4_3-merged_firmware.binwaveshare-touch-lcd-4_3b-merged_firmware.binwaveshare-touch-lcd-5_800x480-merged_firmware.binwaveshare-touch-lcd-5_1024x600-merged_firmware.binwaveshare-touch-lcd-7_800x480-merged_firmware.binwaveshare-touch-lcd-7b_1024x600-merged_firmware.bin
Single-file flash (covers bootloader, partition table, OTA boot selector, and app):
esptool.py --chip esp32s3 --port /dev/cu.usbserial-* write_flash 0x0 <target>-merged_firmware.binOr via authenticated OTA once the device is on the network:
YEYBOATS_OTA_PASSWORD='<ota-password>' make ota DEVICE_IP=<device-ip>SignalK plugin
The SignalK manager plugin is released separately from the
yey-boats/Instruments-manager repository.
v0.4.1
Changes
- feat(ota): pull manager-relative firmware URL over HTTP with device auth (bd18bdf)
- fix(ota): follow redirects on manager-pull firmware download (4ee058c)
Flash instructions
Download the merged firmware image for your board target:
esp32-4848s040-merged_firmware.binwaveshare-touch-lcd-4-merged_firmware.binwaveshare-touch-lcd-4_3-merged_firmware.binwaveshare-touch-lcd-4_3b-merged_firmware.binwaveshare-touch-lcd-5_800x480-merged_firmware.binwaveshare-touch-lcd-5_1024x600-merged_firmware.binwaveshare-touch-lcd-7_800x480-merged_firmware.binwaveshare-touch-lcd-7b_1024x600-merged_firmware.bin
Single-file flash (covers bootloader, partition table, OTA boot selector, and app):
esptool.py --chip esp32s3 --port /dev/cu.usbserial-* write_flash 0x0 <target>-merged_firmware.binOr via authenticated OTA once the device is on the network:
YEYBOATS_OTA_PASSWORD='<ota-password>' make ota DEVICE_IP=<device-ip>SignalK plugin
The SignalK manager plugin is released separately from the
yey-boats/Instruments-manager repository.
v0.4.0
Changes
- Merge remote-tracking branch 'origin/main' into worktree-render-perf (d8da04a)
- chore(release): bump firmware minor version 0.3.0 -> 0.4.0 (02671cd)
- docs(qa): final on-device verification screenshots (depth fit, review fixes) (1a02945)
- fix(depth): fit-to-width hero (doubled, but shrinks so deep values fit) (a04e321)
- docs(design): update MIDL — XTE in nm + P/S side (review S2) (0ef1485)
- fix(ui): implement design-review fixes (S1-S6 + per-screen) (44a5df2)
- docs(design): MIDL screen definitions + cards (brand font, embedded MIDL) (bb0c8f7)
- feat(depth): double hero font + depth-history sparkline; brand-font design cards (78bd9ea)
- chore(midl): bump submodule to 5b09c81 (semantic validation + tightened schema) (41f4473)
- docs(design): Claude Design cards for all 11 screens (0e85a2a)
- fix(ui): XTE tile shows auto-shrunk value, not tofu '>' (font_xl_64 lacks '>') (ff52530)
- fix(ui): swipe-nav, depth restyle, and the open QA issues (3c14628)
- docs(qa): two-pass on-device screen QA (per-element + combined) (be8cb5b)
- fix(ui): QA fixes — value-fit, hero label, STW, AP depth scaling (907233d)
- feat(ui): course-adjust controls + depth screen restructure (145c7e5)
- feat(ui): show rudder angle on the steering screen (aef5cec)
- feat(format): configurable per-unit value scaling (k/M) + decimals (36ba53e)
- feat(data): plumb rudder angle + fix VMG subscription (3a778c9)
- fix(alarm): reposition banner to top, blink, cycle multiple alarms (1e7e81c)
- wip(idf5): hybrid framework reaches LINK stage (4 tooling rungs cleared) (26f0110)
- chore(midl): bump submodule to 83ed4e0 (dir->flow, README, license headers) (eef742e)
- revert(idf5): back to non-hybrid (BLE works); hybrid blocked on pioarduino tooling (45c06f8)
- wip(idf5): hybrid framework setup (EXCLUDE_COMPONENTS + BT/IRAM-safe sdkconfig) (79bfebd)
- feat(idf5): bring BLE back on NimBLE-Arduino 2.x (version-conditional) (99a6b9a)
- feat(n0183): default to UDP transport, TCP opt-in, shorter connect timeout (f475279)
- wip(idf5): esp_lcd single-fb PARTIAL attempt — UNRESOLVED (flicker/hang) (3f6d8b5)
- feat(idf5): esp_lcd double-buffer display — builds + boots on IDF-5 (baa7781)
- chore(idf5): migration groundwork — BLE-disable flag + IDF-5 spike env (6896b78)
- docs(bench): record double-buffer finding (blocked on esp-idf 4.4) (d02d534)
- perf(render): dedicated LVGL task; gate DIRECT off (flickers) -> buffered PARTIAL (f1d5847)
- docs(bench): cumulative render optimization results (baseline/opt1/opt2) (a3b2487)
- perf(render): DIRECT-mode render into the RGB panel framebuffer (80e14e5)
- perf(render): quantize rotations to whole degrees in set_rot_if_changed (ebcb711)
- feat(bench): per-screen first-load + cold-build metrics in render sweep (6875399)
- Merge remote-tracking branch 'origin/main' (73b988a)
- chore(midl): point submodule at yey-boats/midl remote (83f9499)
- feat(midl): serve embedded generated manifest at /api/midl/manifest (f0f812b)
- docs(plan): YB-MIDL manager migration, phased (plan 4 of 6) (8b2ff5a)
- chore(midl): bump submodule to distributable build (ccb92f6)
- chore(midl): bump submodule to web renderer + licensing (plan 3) (e7eafbe)
- docs(plan): YB-MIDL web renderer (plan 3 of 6) (e27b070)
- refactor(midl): extract MIDL into standalone repo, include as submodule (723ccff)
- test(midl): guard committed manifests against catalog drift (b6f4662)
- test(midl): dispatch-covers-catalog consistency check (c2c96c1)
- test(midl): generated manifests validate against the capabilities schema (25cbd18)
- feat(midl): C++ element catalog + host manifest generator (95020c3)
- docs(plan): YB-MIDL catalog -> manifest generator (plan 2 of 6) (4b6222a)
- docs(plan): record deferred validation-coverage follow-ups from Plan 1 review (70d10a5)
- fix(midl): validate manifest before parsing its version in validateDocument (2b50a8f)
- feat(midl): validateDocument pipeline + golden corpus (80e6de8)
- feat(midl): capability-satisfaction validator (ac0ece1)
- feat(midl): config + capabilities JSON Schemas with structural validation (e800b85)
- feat(midl): preset expansion + tile/depth metrics (d72aa9f)
- feat(midl): YAML/JSON canonicalization + lossless round-trip (f3abcc4)
- feat(midl): version parse + compatibility rule (cc097e9)
- feat(midl): shared config + manifest types (381a395)
- feat(midl): scaffold @yey-boats/midl TS package (d80a3c1)
- docs(plan): YB-MIDL language core (plan 1 of 6) (ecd45bb)
- docs(spec): YB-MIDL generic dashboard runtime rendering model (47c9cc7)
- docs(spec): YB-MIDL generic dashboard runtime rendering model (2911825)
- ci(tip): drop release-based tip job; serve TIP from CI artifacts (52147bd)
- ci(tip): immutable-release-safe publish (draft -> upload -> publish) (680a517)
- tools: migrate-lab-rename.sh notes/verify -> yey-net (network renamed) (a0a1c22)
- refactor(rebrand): WiFi network esp-lab -> yey-net (provisioning, env, docs) (9b5fe7c)
- tools: add lab-host espdisp->yeydisp migration script (sudo, idempotent) (2db716e)
- ci(version): MAJOR.MINOR.BUILD with auto BUILD + rolling tip prerelease (80de0ce)
- fix(markers): center compass/wind-rose marker rings on the dial center (c0f9479)
- refactor(rebrand): ESPDISP_ env/flags -> YEYBOATS_, tool filenames -> yeydisp (5e56fe3)
- refactor(rebrand): firmware tools FW_NAME/mDNS/BLE/OTA defaults -> yey (27add64)
- fix(screens): correct pushed-tile rendering, zoom pivot, and SSID telemetry (22b9b05)
- refactor(rebrand)!: rename auth header + provision token + C++ namespace (e46aa48)
- docs: drop named external repo reference (navado/NMEA2000-DISPLAY-on-ESP32S3) (b88331a)
- chore: retarget old navado/esp32-boat-mfd refs -> yey-boats/instruments + Yey Boats Instruments (a900ab8)
- refactor(rebrand)!: rename proto npm package @espdisp/proto -> @yeyboats/proto (v2.0.0) (405f3fd)
- chore(license): Required Notice URL -> github.com/yey-boats/instruments (90a0b7f)
- chore(license): source-file copyright comments -> Yey Boats Project (9340b70)
- chore(license): owner = Yey Boats Project, contact rights@yey.boats (2d6f1a3)
- refactor(rebrand)!: SignalK config-push path network.espdisp.configPush -> network.yeyboats.configPush (fe49a03)
- refactor(rebrand)!: rename wire protocol/mDNS identifiers + bump control proto to v2 (3912fce)
- refactor(rebrand)!: device identity prefix espdisp- -> yey-d- + boot migrations (d137eae)
- docs(sim): lab deploy = host-net + web 8088, retire kdcube-sim, current emitted (3faa3d8)
- refactor(rebrand)!: firmware manager plugin path -> /plugins/yey-boats-display-manager (4ee40ff)
- feat(provision): firmware applies manager-pushed OTA password from config (dc3f364)
- docs(plan): manager console slice 7 (provisioning config-push + auto-numbering) (df4a95a)
- docs(plan): manager console slice 6 (per-device Update Firmware + validation) (e86625b)
- docs(plan): manager console slice 5 (ESP Web Tools + manifest + WebSerial provisioning) (87a398d)
- build(fw): emit merged factory image for ESP Web Tools (esptool merge_bin) (d5c109c)
- docs: slice 4 plan (merged factory image); drop Improv for existing serial commands (db8f293)
- feat(ota): runtime OTA password in NVS + ota-pass serial commands (a741df7)
- test(ota): pure effective-OTA-password selector + host tests (449cf5d)
- docs(plan): manager console slice 3 (firmware runtime OTA password) (6ec849c)
- docs(plan): manager console slice 2 (System Settings) (cce3c0d)
- docs(sim): migrate lab deployment to the yey-boats/simulator GHCR image (169bd72)
- docs(plan): manager device console slice 1 (UI restructure) (f0628cc)
- docs(sim): repoint docs + system tests to yey-boats-sim (8746d68)
- chore(sim): remove legacy fake_boat.py; use full-blown yey-boats/simulator (68a187c)
- docs(spec): manager device console — merged UI, settings, USB/OTA flashing (aabb041)
- fix(sim): address review — single route advance, 400m legs, clamp XTE, AIS spread (7811057)
- feat(sim): compose phase-driven run loop + --dump smoke path (b47fc04)
- feat(sim): self + AIS delta builders (route/AP/polar/keel/closest) (69e7d76)
- feat(sim): PhaseScheduler cycles route/AP/AIS populated<->cleared (8dfbd2b)
- feat(sim): AisFleet synthetic targets (converging CPA + nearest) (498804f)
- feat(sim): Route derives XTE/CTS/BTW/DTW/VMG, advances on arrival (57d4ec9)
- feat(sim): BoatState dead-reckoned position with heading slew (c17cc31)
- feat(sim): great-circle geo helpers (bearing/distance/dead-reckon/XTE) (1bf602a)
- refactor(sim): make fake_boat importable + argparse CLI scaffold (f275700)
- docs(plan): implementation plan for phase-driven fake_boat.py sim (c264936)
- docs(spec): queue phase-driven fake_boat.py feature-coverage sim (3e5c56d)
- docs(spec): adjust screens-preview scope to device-reported bindings (5f268d7)
- docs(spec): queue SignalK screens preview-fidelity rework (743806c)
- chore: move SignalK manager plugin out to yey-boats/Instruments-manager (e6dbe11)
- feat(manager): bulk-clear offline / all devices from the registry (197e9ef)
- fix(security): escape apState in autopilot HUD SVG (defense-in-depth) (97b8f59)
- fix(security): escape device telemetry in System panel SVG (XSS) (560372e)
- fix(manager): faithful System/status panel in live view (not a generic grid) (e9d3028)
- fix(slice3): defer subscription reductions to avoid WS-disconnect churn (33019dc)
- Merge: configurable compass marker rings (HDG/COG/CTS + wind/target) (62e7154)
- docs(markers): note ui_markers PSRAM canvas-buffer ownership in memory traps (dff3384)
- docs(markers): regenerate marker-ring sim previews (final colors) (5e73275)
- refactor(markers): standardize CTS color to alarm; rename steer_live (f0a9cce)
- feat(markers): report glyphs + maxMarkersPerDial in capability manifest (e8374b4)
- test(markers): manifest reports glyphs + maxMarkersPerDial (red) (68eefed)
- refactor(markers): drop unused single-marker helpers (make_dir_marker, rotate_needle) (d323bd1)
- feat(markers): wind rose apparent/true heads; wind-steer HDG/COG/CTS+TWD ring (d67...
v0.3.5
Changes
- fix(sk): data-beat stall recovery + boot-loop guard (98c1210)
Flash instructions
Download the merged firmware image for your board target:
esp32-4848s040-merged_firmware.binwaveshare-touch-lcd-4-merged_firmware.binwaveshare-touch-lcd-4_3-merged_firmware.binwaveshare-touch-lcd-4_3b-merged_firmware.binwaveshare-touch-lcd-5_800x480-merged_firmware.binwaveshare-touch-lcd-5_1024x600-merged_firmware.binwaveshare-touch-lcd-7_800x480-merged_firmware.binwaveshare-touch-lcd-7b_1024x600-merged_firmware.bin
Single-file flash (covers bootloader, partition table, OTA boot selector, and app):
esptool.py --chip esp32s3 --port /dev/cu.usbserial-* write_flash 0x0 <target>-merged_firmware.binOr via PlatformIO OTA once the device is on the network:
pio run -e ota -t upload --upload-port <device-ip>SignalK plugin
Download the matching plugin package release asset:
signalk-espdisp-manager-${TAG_NAME#v}.tgz
Install it on the SignalK server:
cd ~/.signalk
npm install /path/to/signalk-espdisp-manager-0.3.5.tgzThen restart SignalK and enable ESP Display Manager in the admin plugin UI.
v0.3.4
Changes
- fix(sk): auto-recover from prolonged stall (WS restart -> wifi-reconnect) (13fb0ad)
Flash instructions
Download the merged firmware image for your board target:
esp32-4848s040-merged_firmware.binwaveshare-touch-lcd-4-merged_firmware.binwaveshare-touch-lcd-4_3-merged_firmware.binwaveshare-touch-lcd-4_3b-merged_firmware.binwaveshare-touch-lcd-5_800x480-merged_firmware.binwaveshare-touch-lcd-5_1024x600-merged_firmware.binwaveshare-touch-lcd-7_800x480-merged_firmware.binwaveshare-touch-lcd-7b_1024x600-merged_firmware.bin
Single-file flash (covers bootloader, partition table, OTA boot selector, and app):
esptool.py --chip esp32s3 --port /dev/cu.usbserial-* write_flash 0x0 <target>-merged_firmware.binOr via PlatformIO OTA once the device is on the network:
pio run -e ota -t upload --upload-port <device-ip>SignalK plugin
Download the matching plugin package release asset:
signalk-espdisp-manager-${TAG_NAME#v}.tgz
Install it on the SignalK server:
cd ~/.signalk
npm install /path/to/signalk-espdisp-manager-0.3.4.tgzThen restart SignalK and enable ESP Display Manager in the admin plugin UI.
v0.3.3
Changes
- fix(ci): stage release artifacts inline per-env to survive build-dir wipe (5146470)
Flash instructions
Download the merged firmware image for your board target:
esp32-4848s040-merged_firmware.binwaveshare-touch-lcd-4-merged_firmware.binwaveshare-touch-lcd-4_3-merged_firmware.binwaveshare-touch-lcd-4_3b-merged_firmware.binwaveshare-touch-lcd-5_800x480-merged_firmware.binwaveshare-touch-lcd-5_1024x600-merged_firmware.binwaveshare-touch-lcd-7_800x480-merged_firmware.binwaveshare-touch-lcd-7b_1024x600-merged_firmware.bin
Single-file flash (covers bootloader, partition table, OTA boot selector, and app):
esptool.py --chip esp32s3 --port /dev/cu.usbserial-* write_flash 0x0 <target>-merged_firmware.binOr via PlatformIO OTA once the device is on the network:
pio run -e ota -t upload --upload-port <device-ip>SignalK plugin
Download the matching plugin package release asset:
signalk-espdisp-manager-${TAG_NAME#v}.tgz
Install it on the SignalK server:
cd ~/.signalk
npm install /path/to/signalk-espdisp-manager-0.3.3.tgzThen restart SignalK and enable ESP Display Manager in the admin plugin UI.
v0.3.0
v0.2.0
Changes
- chore: bump changelog for v0.2.0 (7411995)
- feat(alarms): persistent banner for shallow water / low battery / stalled SK (a836193)
- feat(mob): persistent man-overboard button + rescue view (303727d)
- feat: triple-tap any quadrant to expand it fullscreen (78fbf7c)
- feat: lat/lon to Nav, device-health Status, demo mode, FPS bench (7904b9f)
Flash instructions
Single-file flash (covers bootloader, partition table, OTA boot selector, and app):
esptool.py --chip esp32s3 --port /dev/cu.usbserial-* write_flash 0x0 merged_firmware.binOr via PlatformIO OTA once the device is on the network:
pio run -e ota -t upload --upload-port <device-ip>v0.1.0
Changes
- fix(ci): release workflow uses pip-installed esptool, resolves boot_app0 path (4861477)
- chore: bump changelog for v0.1.0 (ae872ba)
- feat: initial public release (70383b8)
Flash instructions
Single-file flash (covers bootloader, partition table, OTA boot selector, and app):
esptool.py --chip esp32s3 --port /dev/cu.usbserial-* write_flash 0x0 merged_firmware.binOr via PlatformIO OTA once the device is on the network:
pio run -e ota -t upload --upload-port <device-ip>