Skip to content

app: v1.31.0

Choose a tag to compare

@github-actions github-actions released this 02 Oct 11:59
000bb89

Changelog

1.31.0 (2026-10-02)

Features

  • app: show the measured noise floor in the cells and the HUD (#711) (d97cec0)

Performance Improvements

  • app: hand a map collection to MapLibre only when it changed (#740) (c6fc9a9)

1.30.0 (2026-09-30)

Features

  • app,web: ease what the map shows by zoom, on one hex system (#734) (4c2a57b)
  • app,web: name a relay on the map the way the app does (#733) (a9aa01a)
  • app: send one broker to several collectors under one switch (#722) (8c6da30)
  • web: export the repeaters heard in view as a 1200×1200 PNG (#725) (d6186bc)

Bug Fixes

  • app,web: hang a Discover-heard repeater's star from its own position (#724) (15a6ada)
  • app,web: put the caret in the target picker's search when it opens (#721) (6bd899c)
  • app: drop the float window's previous and next buttons (#717) (c957ff3)
  • app: give the sound the playback buffer instead of the smallest (#712) (dee5484)
  • app: hide Chrome's pause on the fullscreen readout (#715) (836d91e)
  • app: keep a space under the HUD on Android (#710) (2754716)
  • app: let the fullscreen readout turn with the phone (#718) (fae3749)
  • app: put the transmit pop under the receptions it sat over (#738) (2bfc5fa)
  • server: keep the node registry in memory on a loop of its own (#736) (4f3e988)
  • web: keep the map bar on one row between 641 and 767 px (#732) (c44dc1d)

1.29.1 (2026-09-26)

Bug Fixes

  • app: keep the broker presets from config.json for the add form (#702) (5826ef7)

1.29.0 (2026-09-26)

Features

  • app: ask a selected repeater for its regions, owner and clock (#695) (9c77066)
  • app: map the companion's noise floor per cell (#698) (363a0d8)
  • app: publish to several MQTT brokers, with a page to manage them (#671) (27c41df)

Bug Fixes

  • app,web: keep node names on the screen and clear of what sits over the map (#692) (35c8963)
  • app: attach a short id only when its whole chain agrees on the name (#693) (4723ff7)
  • app: let the menu button's tint mean the attenuator and its dot mean news (#694) (a258012)
  • web: draw the reach through a registry outage, and say for 3 s which side is out (#691) (688827a)

Documentation

  • app: record hunter and wardriver as DutchMeshCore's production labels (#700) (533bc84)

1.28.0 (2026-09-24)

Features

  • app,web: draw the node layer's glyphs as GL layers, not DOM markers (#682) (3928ebf)
  • app: read the whole radio from SELF_INFO, and name the self-advert setting for what it is for (#683) (05da05b)
  • web: one control above the hunter list that selects all, or clears the pick (#678) (07d0753)

Bug Fixes

  • app,web: let the FAB ring count the on states, so off is not a segment (#677) (4a1d3a2)
  • app,web: print an unnamed sender's id once in the target list (#676) (3f7d465)
  • app: fold a node's prefixes into one row without an advert in the window (#681) (48734ef)
  • app: keep the points of earlier rides on the map down to zoom 12 (#670) (789997d)
  • app: open the float readout through fullscreen on Android, so capture goes on (#672) (425b889)
  • app: ship MapLibre in the build, so the launch needs no other host (#673) (82180cc)
  • web: give the picker rows their own look back from the bar (#680) (da616ff)
  • web: make a node's estimate from the whole window, not from the view (#675) (9255d75)
  • web: paint the active stop of the View control, and give the quick ranges their own look (#674) (b9c2eb3)

1.27.0 (2026-09-17)

Features

  • app,web: a reading layer that points at the node you heard (#667) (23c823d)
  • app,web: one control for where nodes are, and a glyph key that lives in the popup (#653) (640d5ae)
  • map: select any repeater's reach, and dim the rest of the map with it (#656) (1142292)
  • web: one control rail on the map, and the ticker pinned on a phone (#657) (5360f70)

Bug Fixes

  • app,web: make the receptions card and the map agree on what is on show (#652) (c44bcfc)
  • app,web: mount the overlays when the style is ready, not when its tiles are (#654) (4f9fef2)
  • map: show when a reception arrived and which ride it belongs to (#655) (7d476bd)
  • web: stand the map readout above the attribution, not on it (#659) (8b9d47d)

1.26.0 (2026-09-12)

Features

  • app,web,server: drop Sender unknown, the Unnamed chip already selects the same receptions (#582) (f297d9c)
  • app,web: every repeater's reach at once, in its own hue, as the third stop of Node positions (#593) (e7dded6)
  • app,web: make the two filter panels one panel (#573) (488b4e2)
  • app,web: show the id beside a resolved name in the receptions ticker (#584) (f397b09)
  • app: add Share my node name, off by default, sending a zero-hop advert each cycle a companion is the target (#577) (2acbdad)
  • app: ask a selected companion for its telemetry each cycle, zero-hop, and keep what it answers per node (#578) (cfcc130)
  • app: draw earlier rides as coverage and outlines, pulse the newest reception, and name the nodes in a hex cell (#579) (e348c4c)
  • app: let the HUD follow the ticker's stand, act on the shown sender, and float it over other apps (#575) (ec9c9ed)
  • app: look ahead while the map turns with you, and give the compass button three stops (#585) (a7b0f99)
  • app: make the HUD the ticker's playhead, so a name that resolves later reaches it (#583) (0205138)
  • app: name a short id only when the registries of the SF agree, and mark it as a guess (#587) (1a8798a)
  • app: ship terrain on the AWS DEM, raised by the 3D view, with an exaggeration setting (#586) (2aad6e4)
  • app: size the receptions card to what it holds, in steps (#570) (2ab97cb)
  • web: bring the app's 3D to the map: view button, bars, pillars, buildings, terrain and rotation (#596) (b0f3054)
  • web: bring the map's receptions ticker onto the app's card model (#571) (7da4ca9)
  • web: make the map's bar one row that names the product, at every width (#572) (efb3eeb)
  • web: move the map from Leaflet to MapLibre, the app's map, at 2D parity (#592) (8def27e)

Bug Fixes

  • app: paint a 3D bar the tint of its own cell, and lower the style light (#588) (39172e1)
  • web: fetch the hunter roster per role, so a login shows real names and a logout drops them (#598) (4b28ee9)
  • web: paint the open filter panel over the Locate readout and the node-position notice (#597) (aa8a304)

Code Refactoring

  • web: one watcher on #bar, and the open panels follow its growth (#600) (0cb6a51)

Tests

  • app,web: guard the picker block and the shared tokens against drift, and give the web the app's palette (#601) (88fc3de)

1.25.1 (2026-09-09)

Tests

  • app: let a test name the harmony drift's pick instead of hoping for one (#607) (14f98ee), closes #606

1.25.0 (2026-09-08)

Features

  • app,web: mark the About and What's new links that leave the app (#589) (f14d205)
  • app: give auto-discover a duty floor from the airtime the last cycle spent (#581) (6450c3c)
  • app: give the time window the map's presets (#574) (bfef541)
  • landing,app,web: link the FAQ from both About tabs, and give every question an anchor (#580) (ae1410c)

Bug Fixes

  • app: stop the parked tone that stood in for the bed while backgrounded (#569) (0d595f8)

1.24.0 (2026-08-30)

Features

  • app: give the theme three states and a memory, and end the Settings tab (#566) (e67c319)
  • app: keep the SNR the repeater heard us at (#489) (0cd0a7c)
  • app: make every recorded reception audible, one instrument per type (+ sound tweaks) (#470) (6244c0f)
  • web: gate the point layer, and say what an account opens (#513) (71856f1)

Bug Fixes

  • app: take the gate's coach marks out of #splash's stacking context (#565) (6fba59e)

1.23.0 (2026-08-29)

Features

  • app,web,landing: the 26 August design pass (#541) (5a04962)

1.22.0 (2026-08-29)

Features

  • app: remove Locate, rename its maths to geometry.js (#540) (6dd94ae)
  • app: sweep the repeaters you can hear when no target is picked (#484) (7f2eafb)

1.21.0 (2026-08-28)

Features

  • app: name a trace reply after the node we pinged (#483) (04eded1)
  • web: name the picked target on the picker button (#499) (cabe596)

1.20.0 (2026-08-26)

Features

  • app: search the target sheet by name or id prefix (#477) (c69c57c)
  • web,landing: lead with mapping, and say where accounts come from (#491) (f9f326c)
  • web,server: ignore a sender from the map (#500) (1b62809)

1.19.1 (2026-08-26)

Documentation

1.19.0 (2026-08-26)

Features

  • web,server: tell a hunter when their member verification comes through (#531) (54981ca)

1.18.0 (2026-08-26)

Features

  • app,web,server: filter receptions by sender-id class (#528) (f10b1ac)

1.17.1 (2026-08-26)

Bug Fixes

  • web,app: resolve the names in the target list, and mark the ids that cannot (#526) (9fe9067)
  • web,server: say how far back the map reaches instead of "capped" (#488) (5a26e51), closes #440

1.17.0 (2026-08-25)

Features

  • app,web: keep the reception when the identity or the decode fails (#478) (0c2831a)
  • app: give the app the map's two reception filters (#507) (a5243b0)
  • web: open the map on the last 30 days, not on All time (#512) (28802ac)

1.16.0 (2026-08-25)

Features

  • app: name the 1-byte path hash instead of showing no sender (#522) (9ad8389)

1.15.0 (2026-08-25)

Features

  • app,web: locate from the whole signal field, not its centre of mass (#516) (4d9a947), closes #454
  • server,web: give a flood with no sender something to filter on (#497) (9362217)

Bug Fixes

  • app: send the receptions that are waiting, radio or no radio (#515) (15f79ff), closes #454
  • server,app: stop one reception blocking every reception behind it (#505) (c49b87a), closes #454
  • web,app: make the map keep up with the drive (#514) (720da82), closes #454

1.14.0 (2026-08-24)

Features

  • app: widen the cue ladder to twelve steps, 4.5 dB apart (#472) (ff012ba)

Documentation

  • app: say what a lit hex cell claims after #455, and drop two stale claims (#469) (3040d01)

1.13.2 (2026-08-24)

Performance Improvements

  • app: stop rebuilding a render tick that cannot have changed (#485) (18aa6ca), closes #462

1.13.1 (2026-08-23)

Documentation

  • app,web: write the release notes for what shipped since the backfill (#460) (ca1e31a)

1.13.0 (2026-08-23)

Features

  • app,web: write release notes for readers, not from the commit log (#435) (8b70eaa)

1.12.0 (2026-08-22)

Features

  • app: capture what the radio hears, not only what it can name (#455) (f7518b6)
  • app: give What's new its own Settings tab, and let its dot reach the HUD (#429) (bc646c3), closes #421

1.11.1 (2026-08-21)

Bug Fixes

  • app: collapse coincident receptions to one 3D pillar (#419) (f973714)
  • app: let the node-position key fade, so it stops sitting on the ticker (#444) (fa58db2), closes #413
  • app: stop MapLibre shading the tier colour out of the 3D bars (#446) (29e73dc)
  • app: warn on a low battery when the companion does, not 260 mV later (#443) (61bd271), closes #380

Tests

  • app,web: pin densityGrid's kernel, which nothing was holding (#442) (b1807dd), closes #370

1.11.0 (2026-08-19)

Features

  • app,server: draw SF8 nodes on the position layer too (#430) (863c3ac), closes #418

1.10.0 (2026-08-19)

Features

  • app,web: give the website an onboarding tour, and say what a hunter is (#379) (ea7bb21), closes #316 #371
  • app: add a time-of-day sky, so near-horizontal pitch stops reading as broken (#401) (f199dec), closes #397
  • app: raise the tilt ceiling to 85 so the camera can look along the ground (#399) (b5d1a23), closes #333

Bug Fixes

  • app: stop the FAB progress ring lighting a segment when sound is off (#414) (77e5a1f), closes #373

1.9.0 (2026-08-19)

Features

  • app,web: make the receptions ticker readable at a glance (#404) (c48a974), closes #322

1.8.0 (2026-08-18)

Features

  • app,web: show what changed in a release behind a version badge (#363) (3a3dcf1), closes #284

Bug Fixes

  • app: draw 3D buildings from z13, the zoom the source declares (#400) (7a727f9), closes #395
  • app: pan the map when a receptions-ticker row is tapped (#392) (940d03e), closes #309

Documentation

  • make the pre-push self-review concrete, mutation-check new tests, widen §7 (#364) (e4c7051), closes #334

1.7.0 (2026-08-15)

Features

  • app,web: carry the decoder's full packet-type set in the filter chips (#343) (e924935)
  • app,web: extend the weak end of the RSSI scale below -110 dBm (#344) (29b1015)
  • app: refuse captures on a GPS fix too poor to place, and guard invalid fixes (#345) (ee8874f)
  • app: verify advert signatures before an advert may name anything (#362) (cac64b3)

Bug Fixes

  • app: guard localStorage reads so a storage-hostile context cannot blank the app (#342) (ce9d534)
  • app: say so when the node-position layer has no registry data to draw (#355) (2e2f30a)

Performance Improvements

  • app: rebuild the map once per view change, not twice (#351) (f2d0546)

1.6.0 (2026-08-08)

Features

  • app: companion battery, topbar consolidation and HUD sender readout (#323) (a25bf1c), closes #281
  • app: merge layer FAB + 2D/3D FAB into one 5-state view cycle (#314) (9e48a38), closes #258
  • app: park background audio and cue both transitions (#315) (14bc526), closes #260

Bug Fixes

  • app: round the 3D pillar footprint to an octagon, sized as a radius (#311) (ad0560b), closes #308
  • app: show the node-position disclaimer as a glance, keep a permanent key (#312) (eb89280), closes #306
  • app: truncate target chip with ellipsis, keep topbar controls visible (#310) (22233c9), closes #305

1.5.1 (2026-07-29)

Bug Fixes

  • app: make the map popup and the target list agree on a selection (#297) (#326) (8bde3bb)
  • app: restore tier opacity and age-fade on the 3D pillars (#302) (#328) (74d6a1f)
  • refuse ambiguous prefixes and consult sender_kind on both sides (#295, #296) (#325) (55a026f)

Continuous Integration

  • add an eslint no-undef pass over app, web and nameresolver (#303) (#324) (0eafdca)

1.5.0 (2026-07-27)

Features

  • app: render points in 3D mode as raised pillar markers (#250) (#266) (5d21696)
  • app: sound modes — rx/tx cues + generative ambient music (#145) (#261) (c72022e)
  • node-position layer — advertised positions vs. the RSSI estimate (app + web) (#272) (0c21df5)

Bug Fixes

  • app: bound queue reads, persist the publish watermark, add 7-day retention (#230) (#283) (c1c92fc)
  • app: merge target-list rows for the same node across id prefixes (#268) (91e63c6)

1.4.0 (2026-07-26)

Features

  • app: segmented progress ring for multi-state FABs (#259) (#265) (fe22c49)

Bug Fixes

  • app: move the FAB stack down toward the thumb zone (#257) (#264) (852a9bd)
  • app: stop auto-ping's discover broadcast and first trace-ping colliding (#253, #254) (#262) (428f57c)

1.3.1 (2026-07-13)

Bug Fixes

  • app: stop the blank map and 3D freeze; drop terrain from 3D (#147) (#247) (0bc7a25)

1.3.0 (2026-07-13)

Features

  • app: 3D mode — 2D/3D FAB, extruded hex bars, buildings, terrain (#147) (#228) (75fb92e)
  • app: auto-discover toggle with pulse feedback and repeater trace-ping (#241) (83dea99)
  • app: GPS course as a third compass-mode heading source (driving mode) (#245) (6c09b26)

Bug Fixes

  • app,web: locate disclaimer, glossary, and copy parity (#174) (#227) (41e1456)
  • app: clarify login/register submit action, keep it above the keyboard (#239) (0255490)
  • app: lighter help-overlay backdrop, click-outside dismiss, splash tagline, anchored tooltips (#220) (addd30a), closes #216
  • app: stop follow-mode recenter from cancelling an active pinch-zoom (#243) (d92cd28)
  • app: two-line target rows to fix id/RSSI overlap and improve name legibility (#219) (d800486), closes #215

Styles

1.2.0 (2026-07-11)

Features

  • app: Mesh-Hunter onboarding splash + display-name rename (#202) (c1d75c1)
  • app: migrate the map to MapLibre GL — 2D parity (#147 phase 1) (#214) (cb05ab3)
  • app: multi-select targets + byte-prefix in the target list (#206) (742252a)
  • app: new Mesh-Hunter app icon (hex · reticle · thermal signal) (#205) (1f23045)
  • app: settings as a full page with Settings / About tabs (#207) (76f549d)

1.1.1 (2026-07-04)

Bug Fixes

  • web: only load Matomo on production hosts (not localhost/CI) (1c70a7a)

Miscellaneous Chores

  • add cookieless Matomo analytics to landing/map/app (9b06bad)

1.1.0 (2026-07-04)

Features

  • app: compass FAB icon previews the next state, not the current one (63f6671)
  • app: draw the hunter's own session route trail on the map (cd8f0e3)
  • app: topbar redesign — Select-target chip, filter dropdown, locate over the filtered set (#128) (5f62978)

1.0.0 (2026-07-04)

Features

  • app: in-app register/login and companion linking (v1.0) (00514a9)

0.14.1 (2026-07-03)

Bug Fixes

  • app: correct leaflet-rotate's renderer zoom transform to stop drift (#168) (a0f6093)

0.14.0 (2026-07-02)

Features

  • app: fade reception points with age instead of hard-vanishing (#164) (cf9a62b)
  • app: make the Messages-panel ignore button a toggle (#165) (228ce93)

Bug Fixes

  • app: show discover responses in the Messages panel (#166) (2e8c2c7)

0.13.0 (2026-07-02)

Features

  • app: Settings reload button with deploy version check (#162) (0b4702e)

0.12.0 (2026-07-02)

Features

  • app: auto-fade the locate-info box after 2s (#127) (3f887d1)
  • app: distinct icon for the combined points+hex layer mode (#126) (07092f9)
  • app: focus the existing PWA instance instead of relaunching (#153) (bba418a)
  • app: manual pause/resume for the MQTT connection (#121) (496406c)
  • app: mark individual non-default settings within the sheets (#110) (a2f1dfa)
  • app: mark the selected target active in the target list (#108) (208920a)
  • app: real map rotation on device heading + two-finger rotate gesture (#151) (033033b)
  • app: replace settings-btn emoji with an inline SVG gear icon (#113) (3e4c241)
  • app: show splash disclaimer + tips on every visible screen (#123) (21d8bc6)
  • app: tap outside filter/settings/target sheets to close (#111) (b6dbb3f)
  • app: toggle FAB for the single-hunter locate overlay (#120) (aa95e7d)

Bug Fixes

  • app: direct-only filter must check hops === 0, not is_direct (#150) (66301e1)
  • app: disable pull-to-refresh (breaks active BLE/MQTT connection) (#133) (6adb347)
  • app: ignore-sender updates the map immediately (#112) (355e809)
  • app: raise map maxZoom from 19 to 20 (#107) (475ab1b)
  • app: render points above the hex layer in 'both' mode (#125) (963871d)
  • app: resolve relayed-advert prefixes to repeater names (#137) (6a5037a), closes #136
  • app: Settings connect/disconnect button stays disabled after connecting (#124) (986a275)

Documentation

  • app: document required publish-only broker ACL (#154) (f80459a)

Miscellaneous Chores

  • app: remove the Manual position (dev) debug feature (#122) (5e43aa7)

0.11.0 (2026-07-01)

Features

  • app: single-hunter locate for the isolated target (pwa) (#92) (ebe93bb)

Bug Fixes

  • app: active state for the Messages panel isolate-sender button (#89) (5f756e1)
  • app: compass-mode toggle for the map recenter button (pwa) (#88) (f7cd13f)
  • app: default Direct-only filter to off (#90) (db65239)
  • app: prevent text-selection tap-to-search on row buttons (Android) (#84) (9723b2d)
  • app: swap layer-toggle FAB icon per active layer mode (#87) (a720d4c)
  • app: unify Settings connection button (connect/disconnect/retry) (#86) (9d1adbd)

0.10.0 (2026-07-01)

Features

  • app: rotating tips on the GPS-wait splash (#83) (b1605bf)

Bug Fixes

  • app: include last-hop repeaters in the target dropdown (#76) (92d1c2c)

0.9.0 (2026-07-01)

Features

  • app: make the PWA installable (register SW, add icons + meta) (#27) (d7155df)

0.8.0 (2026-07-01)

Features

  • app: read companion spreading factor and show it in settings (#52) (b60ad80)

Documentation

  • dedupe release changelogs (drop merge-commit duplicates) (#70) (10d0528)

0.7.0 (2026-07-01)

Features

  • app: attenuator compensation added back to plotted RSSI (5a6deb7), closes #54
  • app: capture FLOOD last-hop relay (path[last]) as a directly-heard node (f08e88a), closes #64
  • app: move settings to the top bar, Discover as a radar-icon FAB above the filter (3f2378f), closes #45
  • app: startup splash + GPS-loading indicator (75fc9bf)
  • app: target dropdown with pinned top senders (a76da15)
  • app: treat the ignore-list as a filter (move to filter sheet, light filter FAB) (82dc174), closes #48
  • identify every zero-hop node (advert + discover) by ID + role, resolve name via API (3728f26), closes #41

Bug Fixes

  • app: add missing styles for the radio settings section (f93f158)
  • app: don't let MQTT connect failure abort the BLE connect (984afdf)
  • app: keep the hex-heat grid aligned during zoom (rebuild on zoomend, not mid-animation) (bd00863), closes #44

0.6.0 (2026-06-30)

Features

  • app,web: resolve node names from CoreScope for full-pubkey senders (197fc5a)
  • app: filter-active indicator + filter sheet layout (776eaf9)
  • app: HUD timer showing time since last packet (6face72)
  • app: move Disconnect into BLE settings, keep Connect in the HUD (3db3fdc)
  • app: scale hex resolution with zoom (down to 3 m) (0192d97)

Bug Fixes

  • app: prevent Chrome auto-translate from rewriting the UI (ae20e57)

Styles

  • app: themed X close button in overlay sheets (8fe485b)

0.5.0 (2026-06-30)

Features

  • app: keep screen awake during drive — Wake Lock (#17) (bb19d42)

0.4.0 (2026-06-30)

Features

  • app: single-shot Discover button; remove redundant hop pill (#14) (a93d344)

0.3.0 (2026-06-29)

Features

  • app: hashtag-channel decoding from a config channel-name list (#11) (e9d4449)

0.2.0 (2026-06-29)

Features

  • app: live Messages feed — decrypted channel messages + adverts (#8) (7af52b7)