Releases: meshtastic/Meshtastic-Android
Releases · meshtastic/Meshtastic-Android
Release list
v2.8.0-closed.3 (29321289)
What's Changed
🛠️ Fixes
- fix(ui): stop node signal pill from wrapping; restore full-width spread by @jamesarich in #6007
- fix(car): suppress INVISIBLE_MEMBER in CarScreensTest for fdroid build by @jamesarich in #6010
- fix(docs): stop builds from churning tracked docs screenshots by @jamesarich in #6012
- fix(qr): Preserve incoming channels when adding from QR by @jeremiah-k in #6013
- fix(car): notification-only car messaging for production; park templated behind flag by @jamesarich in #6015
- fix(firmware): repair nRF USB firmware update and post-update reconnect by @jamesarich in #6018
- fix(ble): Handle scan registration failure by @jeremiah-k in #6019
Full Changelog: v2.8.0-closed.2...v2.8.0-internal.12
v2.8.0-closed.2 (29321269)
What's Changed
🏗️ Features
- feat(security): surface XEdDSA packet signing in node & messaging UI by @jamesarich in #5976
- fix(security): make XEdDSA signing shield green & prominent by @jamesarich in #5980
- Prevent Range Test from running on public/default channel by @dubsector in #5986
- feat(network): migrate TcpTransport to ktor-network (commonMain) by @jamesarich in #5995
- feat(ui): StatusSurface AA legibility + node-details signing/transport polish by @jamesarich in #5985
🛠️ Fixes
- fix(usb): Surface permission denial as permanent disconnect by @jeremiah-k in #5943
- refactor(ble): Make Kable connect fallback explicitly bounded by @jeremiah-k in #5944
- refactor(connections): Show one active transport pane by @jeremiah-k in #5956
- fix(ble): Restore bounded bonded reconnect fallback by @jeremiah-k in #5960
- fix(docs): preserve #anchor when rewriting sibling links for Docusaurus by @jamesarich in #5963
- fix(ble): Bound Android bonding wait by @jeremiah-k in #5967
- fix(ble): Avoid duplicate bonding retries after pairing failure by @jeremiah-k in #5969
- fix(ble): Stop transport connect after failed bonding by @jeremiah-k in #5973
- fix(ble): Fail bonding promptly when polled state returns none by @jeremiah-k in #5982
- fix(car): wire notifications & emergency, fix TabTemplate crash, pin car-app to stable by @jamesarich in #5997
- fix(qr): Serialize channel import writes by @jeremiah-k in #5999
📝 Other Changes
- refactor: drop two over-engineered seams (enum + stdlib Base64) by @jamesarich in #5945
- refactor(ui): migrate MapView dialog to Compose M3 + drop legacy material dependency by @jamesarich in #5988
- refactor(settings): replace SimpleDateFormat with kotlinx-datetime by @jamesarich in #5992
- refactor(car): drop dead FuzzyNodeNameResolver duplicate by @jamesarich in #5994
New Contributors
- @dubsector made their first contribution in #5986
Full Changelog: v2.8.0-closed.1...v2.8.0-internal.10
v2.8.0-closed.1 (29321216)
What's Changed
🏗️ Features
- feat(export): add hop start and relay node columns to CSV export by @jamesarich in #5822
- feat(mqtt): add phone-local MQTT proxy cutoff control by @jamesarich in #5823
- feat(node): show our node shortname chip on the Nodes tab by @jamesarich in #5820
- feat(settings): add remote "Set time" admin action by @jamesarich in #5821
- feat(network): on-device capture-replay transport + ingestion fuzzing/hardening by @jamesarich in #5846
- perf(node): add stable keys and contentType to telemetry chart lists by @jamesarich in #5869
- feat(connections): list only BLE devices visible via scan by @jamesarich in #5877
- feat(ui): use modem-preset-relative SNR thresholds for signal quality by @jamesarich in #5903
- feat(firmware): link OTAFIX bootloader from slow-DFU success screen by @jamesarich in #5917
- feat(node): add GPX export to position log screen by @jamesarich in #5919
- feat: offline-first event firmware metadata (JSON schema + bundled asset) by @jamesarich in #5920
- feat(firmware): drive event firmware branding from bundled metadata by @jamesarich in #5929
- feat(lora): consume region→preset compatibility map + TINY presets (protobufs #951) by @jamesarich in #5834
- feat(lockdown): firmware lockdown mode (provision / unlock / lock-now) by @jamesarich in #5939
- feat(lora): gate region→preset map + TINY presets on firmware capability by @jamesarich in #5941
🛠️ Fixes
- fix(mqtt): make the MQTT client-id unique per connection by @jamesarich in #5755
- fix(ble): Harden BLE connection lifecycle by @jeremiah-k in #5795
- fix(build): isolate ML Kit GenAI to the Google flavor (fix F-Droid rb-check) by @jamesarich in #5824
- fix(notifications): open node detail when tapping 'New Node Seen' notification by @LesterCheng in #5752
- fix(appfunctions): keep AppSearch document-factory constructors under R8 full mode by @jamesarich in #5829
- fix(service): resolve selected-device startup race by @jeremiah-k in #5828
- fix(database): defer FTS backfill on cold start and enforce single-connection pool by @jeremiah-k in #5841
- fix(ble): retrigger connection when bonding is interrupted by @jamesarich in #5849
- fix(desktop): terminate process on exit; quit on close when no tray by @jamesarich in #5858
- fix(settings): crash opening Position radio-config screen by @jamesarich in #5862
- fix(settings): gate Traffic Management config at firmware v2.8.0 by @jamesarich in #5864
- fix(network): retry transient connection/IO failures to api.meshtastic.org by @jamesarich in #5870
- fix(ui): recognize VPN and all networks for network scan availability by @jeremiah-k in #5882
- fix(data): separate refresh timeouts from Room persistence by @jeremiah-k in #5881
- fix(service): recover stalled WiFi/TCP handshakes by cycling active transport by @jeremiah-k in #5856
- fix(ui): prevent duplicate LazyColumn keys in node metrics logs by @jamesarich in #5890
- fix(network): preserve TCP reconnect backoff on short sessions by @jeremiah-k in #5893
- fix(connections): coordinate BLE and TCP scan lifecycle by @jeremiah-k in #5887
- fix(ui): show Wi-Fi unavailable banner only during active network scan by @jeremiah-k in #5892
- fix(network): migrate to mqtt-client 0.4.0 (IP-literal TLS fix) by @jamesarich in #5895
- fix(ble): require fresh advertisement for auto-reconnect by @jeremiah-k in #5912
- fix(firmware): harden ESP32 OTA + nRF DFU update paths (hardware-validated) by @jamesarich in #5915
- fix(firmware): batch of P3 OTA/DFU cleanups from the #5915 audit by @jamesarich in #5916
- fix(firmware): render chirpy mascot via painterResource in update dialog by @jamesarich in #5925
- fix(usb): Add serial presence recovery for USB replug by @jeremiah-k in #5923
- fix(data): Persist TAK module config by @jeremiah-k in #5933
- fix(usb): Suppress expected serial close warnings by @jeremiah-k in #5932
New Contributors
- @LesterCheng made their first contribution in #5752
Full Changelog: v2.7.14...v2.8.0-internal.6
v2.7.14 (29321034)
What's Changed
🏗️ Features
- feat: event firmware easter egg with ambient branding by @jamesarich in #5354
- feat: align theme with Design Standards v1.3, remove contrast setting by @jamesarich in #5355
- feat(desktop): fix mac notifications, new desktop icons by @jamesarich in #5403
- Update notification intents and deep link URI format by @jamesarich in #5408
- fix: clarify position precision as ± radius by @jamesarich in #5428
- feat: TAK v2 protocol integration with zstd compression and full CoT type support by @thebentern in #5434
- feat(flatpak): reconstruct standard maven filenames from local Gradle cache by @jamesarich in #5538
- fix: use single-shot low battery notifications by @jamesarich in #5550
- feat: align node list context menu to canonical 6-item order by @jamesarich in #5548
- feat: enable WAL connection pool for parallel reads by @jamesarich in #5372
- feat: node list density switching with compact layout and field toggles by @jamesarich in #5444
- feat(ai): upgrade Chirpy on-device AI with proper APIs, download UX, and streaming by @jamesarich in #5579
- feat: replace LoRa bandwidth text input with constrained dropdown by @jamesarich in #5687
- feat: Save unsent chat message as draft by @Copilot in #5686
🖥️ Desktop
- fix(desktop): keep Vico package to prevent bytecode verification errors by @jamesarich in #5424
🛠️ Fixes
- fix(mqtt): harden TLS enforcement, add user CA trust, and improve error diagnostics by @jamesarich in #5365
- fix: clamp future lastHeard timestamps to current time on ingestion by @jamesarich in #5418
- revert: Update retry settings in gradle-wrapper.properties by @jamesarich in #5430
- fix: update screenshots by @jamesarich in #5435
- fix(database): make withDb retry logic resilient to varying close messages by @jamesarich in #5474
- fix(settings): add input validation for BLE PIN, LoRa modem, and ambient lighting by @jamesarich in #5477
- fix(nav): remote admin nodenum + Nav3 consolidation and improvements by @jamesarich in #5478
- fix(database): update @relation annotations for Room 3.0.0-alpha05 by @jamesarich in #5507
- fix: prevent node details hang when device hardware API is unreachable by @jamesarich in #5514
- fix(settings): remote admin always showed local node config by @jamesarich in #5560
- fix: hide battery indicator when level is 0 (never reported) by @jamesarich in #5595
- fix: consistent column width for compact node list items by @jamesarich in #5596
- fix(emoji): enable androidResources for core:ui to package emoji-data.json by @jamesarich in #5597
- fix(proto): prune TakTalkMessage and TakTalkRoomData from Wire codegen by @jamesarich in #5624
- fix(database): stabilize flaky DatabaseManagerWithDbRetryTest by @jamesarich in #5635
- fix(ble): stop BLE scan on background and downgrade connection priority by @jamesarich in #5644
- fix: remove Android Auto manifest entry causing Play Store rejection by @jamesarich in #5662
- fix(takserver): emit *:-1:stcp contact endpoint so directed TAK-Talk/GeoChat routes over the mesh by @thebentern in #5661
- fix(takserver): drop CoT the mesh delivers more than once by @thebentern in #5667
- fix: address top Crashlytics crashes in beta 2.7.14 by @jamesarich in #5672
- fix(flatpak): source desktop metadata from in-repo packaging dir by @jamesarich in #5673
- Rename Desktop application to 'Meshtastic Desktop' by @jamesarich in #5677
- fix: address top Crashlytics crashes and non-fatals for build 29320984 by @jamesarich in #5684
- fix: show loading overlay immediately for remote config sub-screens by @jamesarich in #5694
- fix(node): restore view-tree owners on map dispose so node-list popups aren't invisible by @jamesarich in #5699
- fix(firmware): surface error state when BLE OTA connection attempts are exhausted by @jamesarich in #5700
- fix(map): replace MarkerComposable with Canvas-rendered bitmaps by @jamesarich in #5702
- fix(map): remove manual ViewTree lifecycle owner workarounds by @jamesarich in #5704
- fix(map): scope cluster-renderer ViewTreeLifecycleOwner to map host view by @jamesarich in #5708
- fix(map): initialize Maps SDK before building marker bitmap descriptors by @jamesarich in #5709
- fix(map): eliminate cluster-renderer FATAL and harden black-map paths by @jamesarich in #5715
- fix(map): revert app-side Maps SDK init to library-idiomatic, fix inline-map crash by @jamesarich in #5719
- fix(map): render cluster markers in-scope to kill ClusterRenderer FATAL by @jamesarich in #5723
- fix(map): apply kotlinx-serialization compiler plugin to androidApp by @jamesarich in #5726
- fix(map): keep compass icon visible while following bearing by @jamesarich in #5728
📝 Other Changes
- Extract node list display settings to dedicated screen by @jamesarich in #5580
- Upgrade takpacket-sdk to version 0.3.0 by @jamesarich in #5621
- repo: Add Meshtastic Desktop icon SVGs by @vidplace7 in #5623
- Enhance TAKTALK support with message and room handling, update SDK to v0.3.2 by @thebentern in #5634
- Revert "feat: replace LoRa bandwidth text input with constrained dropdown" by @jamesarich in #5691
Full Changelog: v2.7.14-closed.21...v2.7.14-internal.123
v2.7.13 (29320069)
What's Changed
🏗️ Features
- feat(wire): migrate from protobuf -> wire by @jamesarich in #4401
- Update strings.xml by @b8b8 in #4432
- feat(deps): Update Wire to v6.0.0-alpha02 by @jamesarich in #4440
- feat(example): Add packet log and UI improvements by @jamesarich in #4455
- feat(sharing): Refactor QR/NFC scanning with ML Kit and CameraX by @jamesarich in #4471
- feat(ui): Redesign NodeItem for improved clarity and density by @jamesarich in #4475
- feat: Check if NFC is enabled and prompt user to enable it by @jamesarich in #4482
- feat: Add stable class definitions for Meshtastic models by @jamesarich in #4500
- feat(database): Enable Write-Ahead Logging for Room DB by @jamesarich in #4499
- feat: Remove auto-retry confirmation for messages by @jamesarich in #4513
- refactor(time): Centralize time handling with kotlinx-datetime by @jamesarich in #4545
- feat(notifications): navigate to node details on tap by @jamesarich in #4558
- feat(settings): Only show homoglyph setting for Cyrillic locales by @jamesarich in #4559
- feat(nodes): Display role-specific icons by @jamesarich in #4572
- feat(settings): Allow clearing the node status message by @jamesarich in #4577
🛠️ Fixes
- chore(ci): Change number of shards for parallel test execution by @jamesarich in #4428
- refactor(model): Make DataPacket fully mutable and fix Parcel reading by @jamesarich in #4431
- ci(jitpack): Use standard Gradle tasks for building by @jamesarich in #4448
- refactor(build): Use version catalog for Compose Multiplatform by @jamesarich in #4452
- feat(db): Add sender-based message filtering by @jamesarich in #4477
- refactor(node): Improve public key conflict handling by @jamesarich in #4486
- feat(ble): Handle invalid BLE attributes by @jamesarich in #4485
- feat: Queue special app PortNums when disconnected by @jamesarich in #4495
- feat: Improve connection state broadcast and timing by @jamesarich in #4498
- feat: Add disconnect broadcast and improve app port handling by @jamesarich in #4502
- feat: consolidate dialogs by @jamesarich in #4506
- feat(charts): More charts ui/ux tweaks by @jamesarich in #4520
- fix: use truthy value for
emojifield on Reaction packets by @jamesarich in #4524 - fix(db): Revert removal of retry_count by @jamesarich in #4527
- fix(settings): Correct hop_limit type for LoRa config by @jamesarich in #4525
- feat(messaging): Move message input to Scaffold bottomBar by @jamesarich in #4530
- feat(messaging): Add bell character to alert message and refine trim by @jamesarich in #4532
- feat(analytics): Enhance user privacy by @jamesarich in #4540
- fix(mesh): Set from field in locally handled packets by @jamesarich in #4543
- fix(release): fixes to prep for release by @jamesarich in #4546
- feat(db): enhance public key conflict handling by @jamesarich in #4555
- fix: uri handling, ci test setup by @jamesarich in #4556
- chore(docs): Refine Dokka source set configuration by @jamesarich in #4562
- feat: Accurately display outgoing diagnostic packets by @jamesarich in #4569
- refactor(ui): Simplify composable message handling in dialog by @jamesarich in #4573
- refactor(metrics): Prevent chart crashes with empty data by @jamesarich in #4578
- refactor(settings): Use LocalConfig for radio configuration state by @jamesarich in #4579
- refactor(logging): Reduce log noise by lowering severity of common errors by @jamesarich in #4591
📝 Other Changes
- refactor(build): Introduce AndroidLibraryFlavors convention plugin by @jamesarich in #4449
- chore(ci): Simplify jitpack.yml build steps by @jamesarich in #4460
- build(ksp): ksp and publishing tuning by @jamesarich in #4462
- Enhancement - optional transparent homoglyph encoding of a few characters in certain languages for more compact and efficient text messages by @LuigiVampa92 in #4491
- fix: Defer setting connected state until after nodeDB load by @jamesarich in #4505
- Revert "chore(deps): update nordic.ble to v2.0.0-alpha13" by @jamesarich in #4536
New Contributors
- @LuigiVampa92 made their first contribution in #4491
Full Changelog: v2.7.12...v2.7.13
v2.7.12 (29319940)
What's Changed
🏗️ Features
- feat: word-based message filtering with quarantine approach (stored but hidden) by @mdecourcy in #4241
- feat(node): Refactor Node Detail screen and enhance user feedback by @jamesarich in #4291
- Refactor: Only show advanced and app settings for local node by @jamesarich in #4290
- feat: Add Status Message module support by @jamesarich in #4163
- refactor(ui): Icon audit and node list item refactor by @jamesarich in #4313
- feat(ui): Remove uptime from SignalInfo by @jamesarich in #4328
- feat(messaging): Improve message bubble UI and add delivery status action by @jamesarich in #4330
- Refactor: Replace custom charts with Vico library by @jamesarich in #4348
- Refactor: Create
core:apimodule and set up publishing by @jamesarich in #4362 - feat(charts): voltage, colors, legends, and adaptive ui by @jamesarich in #4383
🛠️ Fixes
- feat(service): Introduce fallback worker to ensure service stays alive by @jamesarich in #4295
- feat: Improve channel migration logic and add tests by @jamesarich in #4294
- fix(ui): Prevent NaN values in environment metrics by @jamesarich in #4316
- fix(usb): Add error handling for serial write operations by @jamesarich in #4318
- fix(service): Add error handling for invalid StoreForward++ packets by @jamesarich in #4319
- fix: map cluster crash by @jamesarich in #4317
- refactor(core): Optimize and share network state flows by @jamesarich in #4320
- fix(notifications): Suppress notifications for muted contacts an… by @jamesarich in #4323
- fix(mesh): Set
hopStartto matchhopLimitin sent packets by @jamesarich in #4324 - fix(node): list and detail usability fixes by @jamesarich in #4336
- refactor(firmware): Inject dispatcher into
BleOtaTransportby @jamesarich in #4339 - fix(caps): Correct firmware version for
canMuteNodeby @jamesarich in #4341 - chore(lint): Disable ForbiddenComment detekt rule by @jamesarich in #4344
- fix(neighborinfo): disable neighbor info dialog temporarily by @jamesarich in #4345
- fix(reactions): fix sent message reaction alignment by @jamesarich in #4355
- refactor(build): Centralize Android SDK and Java versions by @jamesarich in #4377
- fix(node): fix regressions since node ui refactor by @jamesarich in #4379
- refactor(build): Centralize Develocity and build cache configuration by @jamesarich in #4382
- Refactor PR workflow to include check-changes step by @jamesarich in #4397
- chore: fix regressions in the release by @jamesarich in #4398
- ci18n: Add fastlane metadata to Crowdin by @jamesarich in #4402
- feat(settings): Add firmware capability checks for settings by @jamesarich in #4403
- ci: fix scheduled-updates workflow by explicitly adding paths by @jamesarich in #4405
- feat(release): Automate changelog, asset updates, and tagging by @jamesarich in #4407
- fix(ci): ensure release commit is pushed to branch and validate SHA by @jamesarich in #4409
- fix(ci): robust SHA passing for release workflow by @jamesarich in #4410
- fix(ci): ensure release SHA is passed correctly and validate inputs by @jamesarich in #4411
- fix(l10n): update translation paths in Crowdin config to use locale by @jamesarich in #4420
- fix(l10n): update translation paths in Crowdin config to use locale by @jamesarich in #4422
📝 Other Changes
- chore(build): Enable and configure Compose Compiler reports by @jamesarich in #4289
- chore(deps): Update Gradle and library versions by @jamesarich in #4309
- Update VERSION_NAME_BASE to 2.7.12 by @jamesarich in #4312
- feat(build): Add support for remote Gradle build cache by @jamesarich in #4357
- chore: Apply maven-publish plugin consistently by @jamesarich in #4364
- feat: Add JitPack configuration for publishing by @jamesarich in #4365
- build: Configure JitPack publishing for core modules by @jamesarich in #4366
- chore(ci): Remove GitHub Packages publishing workflow by @jamesarich in #4368
- build: Lower JDK to 17 and minSdk to 21 by @jamesarich in #4369
- Update full_description.txt by @Korb in #4388
- docs: fix typo and url by @bobidle in #4396
- fix(ci): use PAT for release workflow to bypass branch protection by @jamesarich in #4408
- fix(ci): robust SHA passing via artifact to bypass secret masking by @jamesarich in #4412
- fix(ci): switch to pre-emptive tagging workflow by @jamesarich in #4414
- fix(ci): pre-emptive tagging by @jamesarich in #4415
New Contributors
Full Changelog: v2.7.11...v2.7.12-internal.9
v2.7.11 (29319823)
What's Changed
🏗️ Features
- feat(logging): Replace Timber with Kermit for multiplatform logging by @jamesarich in #4083
- Consider hopStart=0 when calculating hops for packets by @esev in #4101
- Convert Room DAO methods to suspend functions by @romansl in #4102
- feat: add retention period to meshLog. Defaults to 7 days, with a settings dropdown to change by @mdecourcy in #4078
- Fix: Use dynamic year for copyright headers by @jamesarich in #4116
- feat: auto retry text message send on max retransmit by @mdecourcy in #4124
- feat: Add separate notifications for waypoints by @jamesarich in #4131
- feat: Enhance message notifications with history and actions by @jamesarich in #4133
- feat: Add initial handling for Store and Forward PlusPlus packets by @jamesarich in #4136
- feat: Add acknowledgement status and retry for emoji reactions by @jamesarich in #4142
- feat: Mute broadcast Reaction notifications by default by @jamesarich in #4159
- feat: Add SFPP confirmed status to Messages and Reactions by @jamesarich in #4139
- feat(i18n): Add string for PKI public key send failure by @jamesarich in #4165
- feat: Handle Store and Forward heartbeat packets by @jamesarich in #4168
- refactor(build): centralize Dokka documentation generation by @jamesarich in #4171
- Dedup repeat messages/reactions due to sfpp by @mdecourcy in #4174
- feat: Add mute node functionality by @jamesarich in #4181
- feat: Add
forceEnableAlltoCapabilitiesby @jamesarich in #4184 - feat(messaging): Overhaul message bubbles and add actions by @jamesarich in #4206
- Refactor: Improve MessageItem layout and styling by @jamesarich in #4208
- refactor(messaging): Redesign message bubbles and reaction UI by @jamesarich in #4217
- feat: Add ESP32 Unified OTA update support by @jamesarich in #4095
- feat: Add Client Base role strings by @jamesarich in #4227
- feat: Localize traceroute strings by @jamesarich in #4228
- feat: retry message/reaction dialog by @mdecourcy in #4195
- refactor: Enable test coverage and update CI by @jamesarich in #4233
- feat(service): Overhaul MeshServiceExample by @jamesarich in #4263
- feat(test): Add comprehensive unit and instrumentation tests by @jamesarich in #4260
- fix(ui): Hide battery icon when no power data is available by @jamesarich in #4274
🛠️Fixes
- refactor: Migrate to Android Gradle Plugin 9.0 by @jamesarich in #4072
- feat: Refactor back navigation in adaptive screens by @jamesarich in #4085
- fix: update schema 27 with packet index by @mdecourcy in #4086
- feat: Improve POSIX time zone string generation by @jamesarich in #4087
- feat(build): Set JVM toolchain to 21 by @jamesarich in #4090
- feat: Refactor MeshService into smaller, single-responsibility components by @jamesarich in #4108
- Refactor: Improve analytics plugin application and task configuration by @jamesarich in #4120
- fix: Update copyright year to 2026 by @jamesarich in #4121
- feat: Send emoji codepoint in reaction packets by @jamesarich in #4123
- feat: Improve node handling and add client notifications by @jamesarich in #4130
- fix: reaction display regression by @jamesarich in #4141
- refactor: use location compat by @jamesarich in #4143
- fix: fix strings.xml by @jamesarich in #4147
- fix: Make node details selectable by @jamesarich in #4151
- refactor(datetime): Standardize date/time formatting with
DateUtilsby @jamesarich in #4164 - refactor(deps): inject CoroutineDispatchers by @jamesarich in #4170
- refactor(build): Centralize Dokka configuration into convention plugin by @jamesarich in #4173
- fix(meshlog): Change default retention to 30 days by @jamesarich in #4177
- feat: Add "now" string and update formatAgo function by @jamesarich in #4183
- fix #4150: display
0°Cinstead of-0°Cfor near-zero negative temperatures by @lohwasser in #4186 - fix(deps): resolve faraday-multipart ruby 4 incompatibility by @jamesarich in #4199
- Revert "fix(deps): resolve faraday-multipart ruby 4 incompatibility" by @jamesarich in #4200
- Revert "chore(deps): update ruby to v4" by @jamesarich in #4201
- feat(connections): Improve connection screen UI and logic by @jamesarich in #4224
- ci(actions): Set up JDK 21 in scheduled-updates workflow by @jamesarich in #4236
- ci: Run tests and generate coverage for all modules by @jamesarich in #4238
- Revert "ci: Run tests and generate coverage for all modules" by @jamesarich in #4240
- fix(ci): Run tests for both F-Droid and Google flavors by @jamesarich in #4239
- feat(firmware): Use pio_env to select correct firmware variant by @jamesarich in #4244
- ci: fix coverage report paths and improve test result inclusivity by @jamesarich in #4245
- refactor(ui): Improve EmojiPicker layout constraints by @jamesarich in #4250
- refactor: Use device address to manage service lifecycle by @jamesarich in #4251
- fix(node): Correct owner ID and local user detection by @jamesarich in #4256
- Display traceroutes with 0 hops by @esev in #4261
- refactor(firmware): Simplify ESP32 firmware check by @jamesarich in #4272
- fix(4269): Add LongTurbo preset name and tests by @jamesarich in #4273
- fix(configs): Improve loading state feedback and dialog behavior by @jamesarich in #4271
- refactor(service): Add destination node number to remote admin commands by @jamesarich in #4276
- fix: crashes by @jamesarich in #4281
- chore: Add gradle-daemon-jvm.properties to specify toolchain by @jamesarich in #4282
- Fix(firmware): Disable serial/USB updates for ESP32 devices by @jamesarich in #4283
- feat: Configure Pre-Commit run for debugging by @jamesarich in #4284
New Contributors
- @esev made their first contribution in #4101
- @romansl made their first contribution in #4102
- @lohwasser made their first contribution in #4186
Full Changelog: v2.7.10...v2.7.11
v2.7.10 (29319661)
What's Changed
🏗️ Features
- feat(messaging): Add double-tap to react with 👍 by @jamesarich in #3972
- feat: Port “Compass view” bottom sheet from Meshtastic-Apple PR #1504 by @jakevis in #3896
- feat(settings): add about screen with open source licenses by @jamesarich in #4012
- feat: add SNR/RSSI/Hops Away metrics and timestamp to the reaction dialog by @1nv in #3964
- feat: Traceroute map visualisation by @DivineOmega in #4002
- refactor(build): Migrate core/common to KMP and cleanup build logic by @jamesarich in #4026
- feat(ui): Animate icon changes with Crossfade by @jamesarich in #4028
- ci: Cache AVD snapshots to speed up Android tests by @jamesarich in #4030
- feat(build): add module dependency graph generation by @jamesarich in #4042
- Feat request neighbours by @DaneEvans in #3709
- feat: Add ability to request telemetry from a remote node by @jamesarich in #4059
- Add elevation to places where LatLong is listed. by @DaneEvans in #4071
- Implements#4054 - Add channel name to channel message notification by @RaspberryProgramming in #4069
🛠️Fixes
- refactor(di): Introduce @ProcessLifecycle qualifier for di by @jamesarich in #3978
- refactor: Move byte utilities to core:common module by @jamesarich in #3977
- refactor(concurrent): Introduce SequentialJob to manage service setup by @jamesarich in #3983
- feat: Mark database models and protobufs as stable by @jamesarich in #3982
- feat: Optimize message list node lookup by @jamesarich in #3981
- chore: Update VERSION_NAME_BASE to 2.7.10 by @jamesarich in #3986
- refactor(ui): refactor glow effect drawing by @jamesarich in #3988
- refactor: consolidate F-Droid task disabling to convention plugin by @jamesarich in #3990
- chore: enhance bluetooth and wifi connection logging by @mdecourcy in #3960
- fix(build): disable more analytics tasks for F-Droid builds by @jamesarich in #4000
- Update strings for small meshes.xml by @b8b8 in #4009
- Allow using custom tile server via HTTP by @texaskst in #3976
- Remove ktorfit by @poliver in #4019
- Restructure node filters by @poliver in #4020
- fix: correctly check for local or pre-db-update reaction via RSSI == 0 by @1nv in #4024
- refactor(analytics): Only plant DebugTree in debug builds by @jamesarich in #4025
- fix: nodes seen before full user exchange not being updated in phone NodeDB by @mdecourcy in #3996
- Traceroute map position snapshots by @DivineOmega in #4035
- fix : avoid our node to be a relaynode candidate by @emp3r0r7 in #4037
- refactor: Add LONG_TURBO ChannelOption and validation test by @jamesarich in #4039
- fix: app README.md header by @jamesarich in #4043
- perf: add missing index to optimize message list by @mdecourcy in #4055
- fix: fixes to improve chat view reliability, eliminates stutter by @mdecourcy in #4053
- Revert "chore(deps): update ruby to v4" by @jamesarich in #4064
- fix unstaged file for altitude on compass by @DaneEvans in #4074
- fix: internal regression; if hardware model is unset keep long/short names null by @mdecourcy in #4079
- perf: add node list indicies by @mdecourcy in #4056
👷Dependencies
- chore(deps): update com.google.firebase:firebase-bom to v34.7.0 by @renovate[bot] in #3973
- chore(deps): update ktorfit to v2.7.1 by @renovate[bot] in #3974
- chore(deps): update io.nlopez.compose.rules:detekt to v0.5.2 by @renovate[bot] in #3975
- chore(deps): update github artifact actions (major) by @renovate[bot] in #3987
- chore(deps): update actions/checkout action to v6 by @renovate[bot] in #3991
- chore(deps): update core/proto/src/main/proto digest to 4095e59 by @renovate[bot] in #3998
- chore(deps): update core/proto/src/main/proto digest to 9beb80f by @renovate[bot] in #4014
- chore(deps): update devtools.ksp to v2.3.4 by @renovate[bot] in #4018
- chore(deps): update plugin protobuf to v0.9.6 by @renovate[bot] in #4022
- chore(deps): update ruby to v3.4.8 by @renovate[bot] in #4023
- chore(deps): update androidx.compose:compose-bom-alpha to v2025.12.01 by @renovate[bot] in #4027
- chore(deps): update kotlin ecosystem to v2.3.0 by @renovate[bot] in #4015
- chore(deps): update core/proto/src/main/proto digest to 62ef17b by @renovate[bot] in #4029
- chore(deps): update actions/cache action to v5 by @renovate[bot] in #4031
- chore(deps): update google maps compose to v7 (major) by @renovate[bot] in #4032
- chore(deps): update fastlane to v2.230.0 by @renovate[bot] in #4038
- chore(deps): update io.nlopez.compose.rules:detekt to v0.5.3 by @renovate[bot] in #4041
- chore(deps): update markdown renderer (mike penz) by @renovate[bot] in #4048
- chore(deps): update core/proto/src/main/proto digest to c474fd3 by @renovate[bot] in #4050
- chore(deps): update ruby to v4 by @renovate[bot] in #4062
🧱Repo
- chore: Add labeler rule for refactor branch naming by @jamesarich in #3979
🤖Automated
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #3980
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #3984
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #3985
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #3989
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #3997
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #3999
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #4001
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #4003
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #4004
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #4006
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #4008
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #4013
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in https://github.c...
v2.7.9 (29319572)
What's Changed
🏗️ Features
- feat: add infrastructure shutdown safeguards and enhance shutdown dialog text by @mdecourcy in #3858
- feat(firmware): Implement USB DFU updates for supported devices by @jamesarich in #3901
- chore(build-logic): Apply Spotless and Detekt to build-logic module by @jamesarich in #3962
🛠️Fixes
- fix: contact list ordering by @mdecourcy in #3863
- fix: autofocus in message threads by @mdecourcy in #3869
- fix: system back button exiting from node detail page by @mdecourcy in #3870
- feat(model): Make NetworkDeviceHardware robust to unknown JSON keys by @jamesarich in #3880
- Fix/3894 talkback confusion by @DaneEvans in #3914
- block creation or sending of duplicate channels. by @DaneEvans in #3913
- chore: Update VERSION_NAME_BASE to 2.7.9 by @jamesarich in #3917
- Revert "block creation or sending of duplicate channels. " by @jamesarich in #3921
- update internal report name to reorder . by @DaneEvans in #3925
- fix #3838 : message deletion count on the contacts page. by @DaneEvans in #3924
- Set socket timeout to 5s by @weebl2000 in #3929
- refactor: Remove unused connection transport state by @jamesarich in #3933
- refactor: improve node DB state management and readiness logic by @jamesarich in #3932
- fix(maps): Enable lite mode and fix recomposition for inline maps by @jamesarich in #3936
- refactor(settings): Use string resources for update intervals by @jamesarich in #3937
- fix(map): Remove liteMode from inline map by @jamesarich in #3949
- feat(navigation): Navigate back to list view on tab reselection by @jamesarich in #3948
- chore(ci): generate changelog on pushes to main by @jamesarich in #3951
- ci(workflow): Improve release tag detection and artifact changelog by @jamesarich in #3954
- fix: back button respects navigation history in detail screens by @mdecourcy in #3956
- fix(strings): correct settings interval templating by @jamesarich in #3959
- refactor(build): Create a dedicated analytics convention plugin by @jamesarich in #3961
- fix(nodes): Correctly filter ignored nodes by @jamesarich in #3966
👷Dependencies
- chore(deps): update ktorfit to v2.6.5 by @renovate[bot] in #3875
- chore(deps): update actions/ai-inference action to v2 by @renovate[bot] in #3888
- chore(deps): update actions/github-script action to v8 by @renovate[bot] in #3889
- chore(deps): update actions/stale action to v10.1.1 by @renovate[bot] in #3890
- chore(deps): update io.nlopez.compose.rules:detekt to v0.5.0 by @renovate[bot] in #3891
- chore(deps): update io.nlopez.compose.rules:detekt to v0.5.1 by @renovate[bot] in #3900
- chore(deps): update androidx (general) by @renovate[bot] in #3895
- chore(deps): update com.github.mik3y:usb-serial-for-android to v3.10.0 by @renovate[bot] in #3906
- chore(deps): update protobuf runtime to v4.33.2 by @renovate[bot] in #3908
- chore(deps): update core/proto/src/main/proto digest to 4095e59 by @renovate[bot] in #3905
- chore(deps): update plugin kover to v0.9.4 by @renovate[bot] in #3938
- chore(deps): update peter-evans/create-pull-request action to v8 by @renovate[bot] in #3939
- chore(deps): update plugin com.gradle.develocity to v4.3 by @renovate[bot] in #3950
- chore(deps): update actions/upload-artifact action to v5 by @renovate[bot] in #3955
- chore(deps): update mikepenz/release-changelog-builder-action action to v6 by @renovate[bot] in #3953
- chore(deps): update core/proto/src/main/proto digest to 4095e59 by @renovate[bot] in #3958
- chore(deps): update com.android.tools:common to v31.13.2 by @renovate[bot] in #3968
- chore(deps): update datadog to v3.4.0 by @renovate[bot] in #3969
- chore(deps): update agp to v8.13.2 by @renovate[bot] in #3967
🧱Repo
- chore: Add GitHub Actions for AI-powered issue and PR management by @jamesarich in #3886
- Repo - drop completeness check for feature requests by @DaneEvans in #3910
- repo/ reduce ai review triggers when unneeded by @DaneEvans in #3915
- repo: Add AI Community Moderator workflow by @jamesarich in #3931
- repo: Add Contributor Covenant Code of Conduct by @jamesarich in #3941
- chore: Schedule documentation deployment on Sundays by @jamesarich in #3942
- chore: Use repeatOnLifecycle for lifecycle-aware coroutine launch by @jamesarich in #3952
🤖Automated
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #3861
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #3864
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #3871
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #3872
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #3879
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #3887
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #3892
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #3893
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #3918
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #3920
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #3922
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #3927
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #3928
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #3940
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #3943
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #3944
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #3945
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #3957
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #3965
New Contributors
- @weebl2000 made their first contribution in #3929
Full Changelog: https://github....
v2.7.8 (29319501)
What's Changed
🏗️ Features
- feat: Add firmware update module for Nordic nRF devices by @jamesarich in #3782
- feat(settings): Add RTTTL ringtone playback in settings by @jamesarich in #3799
- dupe internal builds to an alt repo to allow obtanium by @DaneEvans in #3809
- feat: Keep screen on during firmware update by @jamesarich in #3806
- feat: prevent QR imports from overriding local TX power by @mdecourcy in #3845
- feat(navigation): Implement adaptive list-detail for contacts and nodes by @jamesarich in #3850
- feat: firmware bootloader ota warnings by @mdecourcy in #3846
- feat: per device persistant dismissal of bootloader nags by @mdecourcy in #3859
🛠️Fixes
- docs: Overhaul and rename agent guide by @jamesarich in #3757
- chore(ci): Add Crowdin sync to scheduled updates by @jamesarich in #3760
- chore(ci): Use CROWDIN_GITHUB_TOKEN for scheduled updates PR by @jamesarich in #3761
- chore(crowdin): Remove
preserve_hierarchyoption by @jamesarich in #3764 - chore(renovate): Configure more aggressive automerge by @jamesarich in #3772
- chore: Update VERSION_NAME_BASE to 2.7.8 by @jamesarich in #3779
- fix: unread count racecondition by @mdecourcy in #3784
- fix: skip nodeinfo upsert when we recieve defaults from the node by @mdecourcy in #3796
- feat: Add Jetpack Paging 3 support for messages and threads/contacts by @mdecourcy in #3795
- refactor: Improve RSSI reading robustness in connection info by @jamesarich in #3798
- refactor(connections): Improve RSSI reading robustness by @jamesarich in #3804
- Added relays count by @RCGV1 in #3773
- fix: message list paged lifecycle resulting in notifications being cleared by @mdecourcy in #3815
- fix: skip default nodeinfo upsert in handleReceivedUser for live packets by @mdecourcy in #3819
- fix stop the connections screen from jumping during connections by @DaneEvans in #3821
- fix: allow forgetting of network nodes by @DaneEvans in #3820
- Fix add qr acting like replace instead of add by @RCGV1 in #3823
- fix: loadCachedDb() before backfill to ensure in-mem nodedb isn't stale, show filtered count in nodelist by @mdecourcy in #3827
- fix: Prevent message list jumping during pagination updates by @mdecourcy in #3829
- fix: Multiple bugs - settings text fields, dropdowns, missing override duty cycle, and MQTT icon display by @mdecourcy in #3833
- fix: node search by keeping denormalized name columns up to date and backfilling existing nodes by @mdecourcy in #3839
- fix: duplicate LazyColumn keys for broadcast contacts by @mdecourcy in #3840
- fix: fdroid device hardware fallback using bundled JSON for incomplete cache entries by @mdecourcy in #3844
- fix: further fixes for fdroid json fallbacks by @mdecourcy in #3847
- fix: prevent text fields from auto-focusing on screen load by @mdecourcy in #3857
- refactor(navigation): Simplify adaptive back nav and state by @jamesarich in #3860
👷Dependencies
- chore(deps): update plugin dependency-analysis to v3.5.0 by @renovate[bot] in #3751
- chore(deps): update actions/checkout action to v6 by @renovate[bot] in #3755
- chore(deps): update androidx datastore to v1.2.0 by @renovate[bot] in #3756
- chore(deps): update devtools.ksp to v2.3.3 by @renovate[bot] in #3759
- chore(deps): update no.nordicsemi.kotlin.ble:client-android to v2.0.0-alpha11 by @renovate[bot] in #3776
- chore(deps): update core/proto/src/main/proto digest to 52fa252 by @renovate[bot] in #3775
- chore(deps): update io.nlopez.compose.rules:detekt to v0.4.28 by @renovate[bot] in #3781
- chore(deps): update fastlane to v2.229.0 by @renovate[bot] in #3783
- chore(deps): update androidx (general) to v3.3.6 by @renovate[bot] in #3797
- chore(deps): update fastlane to v2.229.1 by @renovate[bot] in #3801
- chore(deps): update ruby to v3.4.7 by @renovate[bot] in #3802
- chore(deps): update ktor to v3.3.3 by @renovate[bot] in #3825
- chore(deps): update plugin dependency-analysis to v3.5.1 by @renovate[bot] in #3831
- chore(deps): update no.nordicsemi.kotlin.ble:client-android to v2.0.0-alpha12 by @renovate[bot] in #3849
🧱Repo
- chore(ci): preserve translation hierarchy by @jamesarich in #3762
- ci(workflows): Preserve hierarchy when uploading sources to Crowdin by @jamesarich in #3763
- fix(ci): localization branch name by @jamesarich in #3765
- ci: check workflow status on scheduled updates by @jamesarich in #3774
- fix: typo by @jamesarich in #3777
- chore(ci): Use dedicated token for Crowdin workflow by @jamesarich in #3778
- fix token value by @DaneEvans in #3811
- tweak bug reports by @DaneEvans in #3818
- add 'ci' to autolabel for repo. by @DaneEvans in #3835
🤖Automated
- New Crowdin updates by @jamesarich in #3752
- chore: Scheduled updates (Firmware, Hardware, Translations) by @github-actions[bot] in #3766
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #3790
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #3791
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #3794
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #3800
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #3803
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #3810
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #3824
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #3826
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #3828
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #3832
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #3834
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #3836
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in #3843
- chore: Scheduled updates (Firmware, Hardware, Translations) by @jamesarich in https://github.com/meshtastic/Meshtastic-An...