Skip to content

Releases: MeshMapper/MeshMapper_Project

MeshMapper - v1.2.0(1773022026)

09 Mar 02:12
1a76259

Choose a tag to compare

Pre-release

🚀 MeshMapper Update (March 8, 2026)

Warning

This release includes significant changes to how MeshMapper handles repeater identification across the entire solution — from mobile app to data ingestion to map rendering. While extensively tested, edge cases are likely. If you encounter any issues, please report them.

📱 App — v1.2.0

✨ New Features

  • Discovery Drop Reporting — Failed discovery requests can now be reported as failed pings to help map dead zones and noise floor gaps. Enable it in Settings (off by default). Failed discoveries show up as red markers on the map and noise floor chart. Regional admins can also enforce this for their whole region once nodes are updated.

  • Multi-Byte Path Hash Support — MeshMapper now fully supports MeshCore firmware v1.14.0+, which expands repeater IDs from 256 unique IDs (1-byte) all the way up to 65K (2-byte) or 16M (3-byte). A long time coming!

    • Repeater ID chips now show hex badges with dynamic sizing
    • Repeaters now render as squares on the map
    • Users can set hop byte count in Settings; regional admins can enforce 2 or 3-byte mode for their region, which automatically configures companion devices on connection
    • MeshMapper passively detects which repeaters support multi-byte by watching packets. In 1-byte regions, only confirmed repeaters will show multi-byte IDs on the map. Once an admin enforces 2 or 3-byte via the admin panel, all repeaters in the region display accordingly
    • If two repeaters in a region share a conflicting ID, they will automatically remediate once MeshMapper confirms both support multi-byte paths, resolving the duplicate without any manual intervention

    [!WARNING]
    If your session ends uncleanly while in multi-byte mode, your radio will stay in multi-byte mode until you manually change it back.

  • Repeater Marker Rotation — Repeater markers now rotate with the map and stay upright.

🐛 Bug Fixes

  • GPS subscription leakstartWatching() wasn't cancelling the existing position subscription before creating a new one. On startup, two callers would race within ~40ms of each other, orphaning the first listener and doubling every GPS event. Effects included 2x position events, 4x "First GPS lock" triggers, 3x zone rechecks, and errno 24 (too many open files) from cascading resource pressure. Fixed with a 3-line cancel guard in gps_service.dart.

  • Hive corruption silently dropping ping data — if the api_queue Hive box fails to open, pings now fall back to an in-memory queue instead of being silently dropped. Previously, a corrupted Hive box could cause an entire wardrive session to upload nothing but heartbeats. The memory fallback is drained alongside Hive on every upload batch.

  • Online mode auth fix — the hot-switch path (_switchToOnlineMode) was only performing Stage 1 auth with public_key, causing unregistered devices to fail with unknown_device. Now mirrors the full two-stage flow from connectToDevice(): Stage 1 attempts public_key, Stage 2 falls back to registration via signed contact_uri. Also adds maintenance mode detection and GPS error short-circuiting.

  • Offline session two-stage auth — offline sessions now capture the device's signed contact_uri at connect time via exportContact(). If upload auth fails with unknown_device, the app will now attempt Stage 2 registration automatically rather than giving up, consistent with the online mode flow.

  • Subscription leak fixes — thanks to @robekl for tracking these down and submitting the PRs:

    • PR #6: Guarded startWatching() against stacked subscriptions
    • PR #7: Fixed the last unowned stream listeners in AppStateProvider, consistent with existing cleanup patterns
    • PR #8: Fixed a scan stream with no termination path that could leave callers hanging; cleanup now covers all three exit paths

MeshMapper - v1.1.1

27 Feb 03:01
1a76259

Choose a tag to compare

[v1.1.1] [HOTFIX] - 2025-02-26

Bug Fixes

  • Fixed wildcard scope #* not being recognized, causing incorrect packet types to be sent. Zones with no regional scope return #* as the wildcard, but the app only matched *, causing it to derive a TransportKey and call setFloodScope() with the literal string. This resulted in all TX pings being sent as TransportFlood (0x00/0x14) instead of regular FLOOD (0x01/0x15).

Improvements

  • Debug logs are now enabled by default
  • Upload logs now presents a dialog prompting the user to provide context for the upload. Replaced the cloud icon with a dedicated upload button beside "Delete All" under Debug Logs.

MeshMapper - v1.1.0

26 Feb 01:57
1a76259

Choose a tag to compare

Changelog

[v1.1.0]

New Features

  • Regional Flood Scoping: If a region has configured scopes on their repeaters, a MeshMapper regional admin can now set the scope of Active/Hybrid Mode TX pings. This limits flood messages to a specific channel, stopping wardriving pings from flooding past boundaries defined by the local mesh. Discovery pings are unaffected.
  • Scope Indicator: the Regional Configuration card on the Connection tab now shows your active scope (e.g., #ottawa) or "Global" when no scope is set.
  • Anonymous Mode: new privacy option in Settings that renames your device to "Anonymous" for all mesh pings. Other mesh users can no longer see your companion name in wardrive broadcasts. Your device's public key still authenticates your session with the MeshMapper API (geo-auth), but your sessions and pings are not stored with your public key on the server. Toggling while connected automatically disconnects and reconnects with the new identity, switching to the Connection tab so you can see progress. On proper disconnect, the original device name is restored. Persisted across app restarts.
  • Auto Tile Refresh: map tiles now refresh automatically after a successful upload, so new coverage appears near real-time (around 15s after a ping).
  • Faster Uploads: TX and discovery pings now upload on a predictable 5-second timer, replacing the old batch system (up to 20s worst case).
  • CARpeater Filter Toggle: disable the RSSI CARpeater filter in Wardrive Settings (with a stern confirmation warning about data integrity consequences).
  • Multi-hop CARpeater Handling: multi-hop CARpeater packets now strip the CARpeater hop and report coverage from the underlying repeater with null SNR/RSSI, instead of being dropped entirely. Single-hop packets and discovery responses are still dropped. The -30 dBm failsafe is bypassed for packets matching your CARpeater prefix but stays active for everything else.
  • Offline Mode: option now displayed when zone check fails due to no internet. Start wardriving immediately instead of waiting for connectivity.
  • Admin: Enforced Hybrid Mode: regional admins can now enforce hybrid mode per-zone through the API. When enabled, hybrid mode is automatically activated and the toggle is locked on the Settings screen with a "Forced Enabled by Regional Admin" label.
  • Admin: Minimum Ping Interval: regional admins can set a minimum auto-ping interval per-zone. Interval options below the threshold are greyed out in Settings with a "Disabled by Regional Admin" label. If your saved interval is below the new minimum, it gets automatically bumped up on connect.

Bug Fixes

  • Fixed API queue race condition that could cause missed or double-processed items
  • Fixed ping race condition where rapid double-taps could trigger concurrent pings
  • Fixed resource cleanup gaps causing listener leaks from undisposed stream subscriptions and timers
  • Fixed tile refresh race condition causing half-rendered and ghost tiles at certain zoom levels
  • Fixed Light (OSM) and Satellite (ArcGIS) tiles not loading at low zoom on iOS retina displays
  • #98: The heard repeaters panel now scrolls and dynamically expands to accommodate larger lists of heard repeaters
  • #95: Fixed the IATA popup panel being hidden behind the Android navigation bar
  • Fixed a bug where a stale BLE device name was used instead of the current one
  • CARpeater filter order of operations corrected
  • Fixed RX CARpeater detection checking the wrong hop position. On RX packets, the CARpeater is co-located with the wardriver so it only appears as the last hop (delivery repeater), not the first. The check now correctly evaluates the last hop.

Improvements

  • In-memory log and map pin lists are now capped (500 for logs/pins, 200 for errors) to prevent memory bloat during long wardriving sessions
  • Replaced force unwraps with safe null checks across connection, ping, and debug services to prevent crashes
  • Empty catch blocks now log errors with descriptive tags instead of silently swallowing exceptions
  • Added a warning dialog before submitting debug logs alerting you that logs contain approximate GPS location history
  • Documented AES-ECB as a MeshCore protocol requirement
  • Removed deprecated method in channel_service
  • Listen windows reduced from 7s to 5s across the board
  • Map zoom range adjusted to 3-17
  • Disconnect now uploads immediately with no delay

Thanks for using MeshMapper! 🗺️

MeshMapper - v1.1.0(1771677613)

21 Feb 12:44
1a76259

Choose a tag to compare

Pre-release

🐛 Bug Fixes

  • Fixed RX carpeater detection checking the wrong hop position. On RX packets, the carpeater is co-located with the wardriver so it only appears as the last hop (delivery repeater), not the first. The check now correctly evaluates the last hop.

MeshMapper - v1.1.0(1771644937)

21 Feb 01:50
1a76259

Choose a tag to compare

Pre-release

New Features

  • Regional admins can now enforce hybrid mode per-zone via the API; when enabled, hybrid mode is automatically activated and the toggle is locked on the Settings screen with a "Forced Enabled by Regional Admin" label
  • Regional admins can set a minimum auto-ping interval per-zone; interval options below the minimum are greyed out in Settings with a "Disabled by Regional Admin" label
  • If a user's saved interval falls below the admin-configured minimum, it is automatically bumped up on connect

MeshMapper - v1.1.0(1771555184)

20 Feb 17:46
1a76259

Choose a tag to compare

Pre-release

✨ New Features

  • Regional Flood Scoping — Active Mode pings are now scoped to your region's flood zone. Regional Admins set a scope in the admin panel, so only repeaters in your region forward wardriving pings. Discovery pings are unaffected. If no scope is assigned, pings flood globally as before.
  • Scope Indicator — The Regional Configuration card on the Connection tab now shows your active scope (e.g., #ottawa) or "Global" when no scope is set.
  • Auto Tile Refresh — Map tiles now refresh automatically after a successful upload, so new coverage appears near real-time (around 15s after a ping).
  • Faster Uploads — TX and discovery pings now upload on a predictable 5-second timer, replacing the old batch system (up to 20s worst case).

🐛 Bug Fixes

  • Fixed tile refresh race condition causing half-rendered and ghost tiles at certain zoom levels.
  • Fixed Light (OSM) and Satellite (ArcGIS) tiles not loading at low zoom on iOS retina displays.

⚡ Improvements / Changes

  • Listen windows reduced from 7s to 5s across the board.
  • Map zoom range adjusted to 3–17.
  • Disconnect now uploads immediately with no delay.

MeshMapper - v1.1.0(1771429582)

18 Feb 17:10
1a76259

Choose a tag to compare

Pre-release

MeshMapper App v1.1.0 (1771429582)

New Features

  • Anonymous Mode - New privacy option in Settings that renames your device to "Anonymous" for all mesh pings. When enabled, other mesh users cannot see your companion name in wardrive broadcasts. Your device's public key is still used to authenticate your session with the MeshMapper API (geo-auth), but your sessions and pings are not stored with your public key on the server. Toggling Anonymous Mode while connected automatically disconnects and reconnects with the new identity, switching to the Connection tab so you can see reconnection progress. On proper disconnect, the original device name is restored. Persisted across app restarts.

Bug Fixes

  • #98 - The heard repeaters panel now scrolls and dynamically expands to accommodate larger lists of heard repeaters
  • #95 - Fixed the IATA popup panel being hidden behind the Android navigation bar
  • Fixed a bug where a stale BLE device name was used instead of the current one

MeshMapper - v1.1.0(1771355733)

17 Feb 19:22
1a76259

Choose a tag to compare

Pre-release

New Features

  • Carpeater filter now silently drops packets when configured, with corrected order of operations
  • Added offline mode option when zone status check fails due to no internet
  • Added toggle in Wardrive Settings to disable the RSSI carpeater filter, with a confirmation dialog warning about data integrity consequences
  • Multi-hop packets relayed through a configured CARpeater now strip the CARpeater hop and report coverage from the underlying repeater with null SNR/RSSI, instead of being dropped entirely. Single-hop CARpeater packets and discovery responses are still dropped. The -30 dBm RSSI failsafe is bypassed for packets matching the user's CARpeater prefix but remains active for all other strong-signal packets.

Improvements

  • In-memory log and map pin lists are now capped (500 for logs/pins, 200 for errors) with oldest-first eviction to prevent memory bloat during long sessions
  • Replaced force unwraps with safe null checks and guard clauses across connection, ping service, and debug logger to prevent crashes
  • Empty catch blocks now log errors with descriptive tags instead of silently swallowing exceptions
  • Added a warning dialog before submitting debug logs alerting users that logs contain approximate GPS location history
  • Documented that AES-ECB usage is mandated by the MeshCore protocol, not an app design choice
  • Removed deprecated method in channel_service

Bug Fixes

  • Fixed API queue race condition where concurrent upload and flush operations could cause missed or double-processed items
  • Fixed ping race condition where rapid double-taps could trigger concurrent pings
  • Fixed resource cleanup gaps where missing disposal of stream subscriptions and timers caused listener leaks

MeshMapper - v1.0.1

17 Feb 14:13
1a76259

Choose a tag to compare

First production release! Version bumped to 1.0.1 to align with Apple App Store and Google Play Store versioning requirements.

MeshMapper - v1.0.0(1770782811)

11 Feb 04:08
1a76259

Choose a tag to compare

New Features

  • Added a cancel button for BLE scanning
  • Repeater IDs in TX, RX, and Discovery ping results are now tappable, showing the name of known repeaters in a popup

Improvements

  • Debug log uploads now chunk larger files to ensure reliable delivery
  • Map preferences for centre position, heading, and rotate lock are now remembered between sessions
  • Active mode now includes heartbeat support
  • Replaced the internet connectivity check with a graceful fallback if the app cannot reach the MeshMapper API during BLE connect
  • Improved resilience around Hive-backed API queue storage to prevent app freezes from data corruption
  • General improvements to API error handling
  • Improved error handling and user-facing messaging when the API fails to connect on app open

Bug Fixes

  • Fixed a bug where certain RX packets were being dropped due to content filter rules
  • Fixed an issue with Android notifications