Skip to content

v4.10.2

Choose a tag to compare

@github-actions github-actions released this 07 Oct 13:56
· 87 commits to master since this release
Immutable release. Only release title and notes can be modified.
Release Notes

Fixed

  • Contacts: the empty-state box no longer sits flush against the search bar separator.

  • Themes: toggle switches now have a border outline in the off state so they stay visible on near-black themes.

  • Windows: shared-instance RPC replies are read through the connection dispatch path instead of os.read, fixing bad file descriptor errors that broke LXMF delivery, interface stats, and interface management on Windows builds when connected to an external rnsd.

  • Messaging: outbound sends that fail the path wait are now persisted as failed messages instead of being dropped, so they resend automatically when the peer announces and can be resent manually. The propagation-node fallback now defaults on for new configurations and is a safe no-op when no propagation node is set.

  • Maps: user-configured tile servers, Nominatim endpoints, and extra CSP sources are no longer stripped from the Content Security Policy in privacy mode; only the shipped public defaults stay gated. Scheme-less and subdomain-template ({s}, {r}) tile URLs are normalized so OpenLayers and the CSP match real hosts.

  • NomadNet: page translation now works with the sandboxed page renderer. The shell asks the renderer frame for the page text over the frame channel instead of reading an empty shell container, so the translate button opens the translator with real page content.

  • NomadNet: the page shell no longer can show its own scrollbar next to the rendered frame's scrollbar. The container only scrolls for state banners now, which removes the second slider on platforms with always-on scrollbars.

  • NomadNet: serving nodes no longer re-hash the whole source image on every /media request; the hash is memoized by file stat. Failed conversions are marked and skipped for an hour instead of respawning the encoder on every request, which removes the sustained CPU spikes on image-heavy pages.

  • Desktop: every popout window (call, nomad tab, translator, paper message, and the rest) now runs in its own renderer process where the API allows it, so a crash there cannot take the whole app down. A crashed child window is destroyed instead of lingering as a dead frame; the main window's crash recovery dialog is unchanged.

  • NomadNet: rendered pages that use the full-bleed shell (.html, .md, .txt) no longer overflow the viewer by the header and toolbar height. The content container carried a stray min-h-full that beat its min-h-0, so the rendered frame ran ~54px past the bottom of the pane and its scrollbar hung below the page boundary, reading as the extra-slider artifact.

  • Network visualiser: leaving the page during engine setup no longer orphans a live graph instance per visit; the init chain now checks for unmount after every await and destroys anything created in flight.

  • Network visualiser: the loading overlay now has a cancel button. Stopping aborts in-flight fetches, halts physics and batch work, and leaves a fresh load one click away on the refresh button.

  • Telemetry: tracked peers that never answer are no longer polled every interval forever. Each unanswered request doubles the wait up to a daily cap, and after a bounded number of misses the peer is skipped until a telemetry response re-arms it or tracking is re-toggled.

  • Messaging: automatic resends no longer retry feature-only deliveries (commands, reactions, telemetry) to peers that never sent one back, so Sideband and other LXMF clients are not spammed with payload types they cannot parse.

  • Contacts: shared address output now uses the bare 32-hex hash when no public key is known, since not every LXMF client parses an lxmf:// URI. lxma:// output is unchanged when a public key is available.

  • Android: Bluetooth RNode interfaces (BLE and classic) added or imported through the UI now write the Android-native Reticulum keys at save time, so the live attach takes the Bluetooth path instead of treating a bt:// or ble:// port as a dead USB serial device. Leftover Bluetooth keys are also stripped when an interface is switched back to serial or TCP, since the Android implementation lets stale ble_* settings override the port.

  • Android: the RNode form now asks for Bluetooth permission when the BLE or Bluetooth transport is enabled, instead of relying on the bundled startup prompt that can be dismissed and never re-shown.

  • Android (build): the bundled Reticulum wheel now guards paired-device enumeration against devices with no name and denied Bluetooth permissions, so one bad bonding record or a missing grant no longer kills RNode Bluetooth bring-up.

  • Relay chat: the hide join/part preference now applies. A setup-time read shadowed the setting's lookup, so presence lines kept rendering and the toggle wrote the old value back to storage.

  • Tools: the traffic page refresh button no longer flashes on every background poll; the spinner now only runs for manual refreshes.

  • Tools: the traffic page RRC hint now counts connected hubs by the real status constant instead of a string comparison that always read zero.

Added

  • Interfaces: bulk config imports now attach imported interfaces live instead of requiring a restart; the restart banner only appears when live attach could not bring one up.
  • Health: the monitor now tracks file descriptor counts, warning when usage nears the limit and when the count climbs steadily across the check window, catching slow descriptor leaks early.
  • Diagnostics: new Traffic tool shows live upload and download rates per interface and per component, per-peer byte attribution, announce and propagated splits, a rolling activity chart, and plain-language hints explaining what is driving the wire load.
  • Interfaces: I2P community presets can now be quick-added like other presets. They run through the normal add-interface checks, so transport mode and the single-I2P rule still apply.
  • Interfaces: the community presets list now has a filter dropdown for TCP, Backbone, I2P, Yggdrasil, and other types.
  • Messages: the message translate bar now has an auto-translate toggle per conversation. The chosen language pair is remembered per contact, and when auto-translate is on, new incoming messages are translated on arrival and the newest loaded messages are translated when the conversation opens.
  • Maps: the tile server URL now accepts TileJSON endpoints (URLs ending in .json). Tile templates, attribution, zoom range, bounds, relative tile URLs, and scheme:tms are honored, and a bad document falls back to the next provider like a failed tile server.
  • Translator: the pack catalog now shows both directions of a language pair as a single bidirectional entry, and downloading it installs every direction present in the catalog. A search field filters the catalog by language or pair code.
  • Updated Python deps: rns 1.5.7, lxst 0.5.4 floor.
  • Messages: inbound messages that arrive while a conversation is open now enter with a short fade-and-rise instead of appearing instantly. History, outbound messages, and reduced-motion settings are unaffected.
  • Tools: shared tool page headers are slimmer so tool content gets more vertical space.
Changelog

No previous tag found; changelog omitted.

SHA256 Checksums
Asset SHA256
MeshChatX-v4.10.2.torrent 885fba0dacc028b3f4fc02ac3c91df28cc6431c5d1283ea2f5fdb64593d66cb2
meshchatx-frontend.zip 2e23582bf6be3b6c01b8385a57d1bc4cedb3891dee29f762128abf4ba4cc1412
ReticulumMeshChatX-v4.10.2-win-installer.exe.blockmap 5157b83a88c5dd508550f5df7d98a98fb36da8ddf26053d7bc3d1dd237de4c58
ReticulumMeshChatX-v4.10.2-linux-x86_64.rpm 0b84cc1a82c72ef89abb2f42caa12e55ce9c3c905572a59989b9019f955c7bf0
ReticulumMeshChatX-v4.10.2-win-portable.exe c28a02f15b014cd09a9b35ff2e5ad6cbd119a08da8f2f867202a5f17a4453305
ReticulumMeshChatX-v4.10.2-linux-amd64.deb 40a7ebf83edd2bb659c1e4dcc21a578d6b04a98ab8bb22c275a88be650e29301
ReticulumMeshChatX-v4.10.2-mac-x64.dmg.cosign.bundle 34c5da9fdb1f8b4119dbc2667c81587c98abba9afb9b85c9df74107ae264368f
ReticulumMeshChatX-v4.10.2-android-universal.apk d78ee7956d4662ae6ee9090a3625b5386a851139f1a5f374ac93207eae36e73c
ReticulumMeshChatX-v4.10.2-linux-arm64.deb 1bb19e1b3d198d227658d0f53a333aca169b68e3d67e412a550aa9af0954f813
ReticulumMeshChatX-v4.10.2-linux-x86_64.AppImage e156f5846f29bb70a9173aa0c821ab70a7f3f1b41494e4356ce4aa3c63544978
reticulum_meshchatx-4.10.2-py3-none-any.whl cca04a3c94dd967dde1b1637e09cd4807b2acb3cdc56e361e803f3300c0f6a3d
ReticulumMeshChatX-v4.10.2-win-portable.exe.cosign.bundle ce963046e6f7bf72a94fced7e61fb0ede330c4772c43c36ca9c7055f1ac52ffa
latest.yml.cosign.bundle e9acb217466886e62eb87426324abab1f1e48a517f602c54bcc5b03a9c201e77
ReticulumMeshChatX-v4.10.2-win-installer.exe.cosign.bundle 49e8fd4f56e6fbda3bcb914cb2375748501cf4f74789be2bbe24bca9257402ca
ReticulumMeshChatX-v4.10.2-win-installer.exe.blockmap.cosign.bundle 1cbba520c7f9d4491b9ff5e926254d0f1c0adbf316a84a36007385e389dd246c
ReticulumMeshChatX-v4.10.2-mac-arm64.dmg 5495bb5cdf45c19b5b3a53c7317cc9745978b3347353facafc3340ccc71ddda4
ReticulumMeshChatX-v4.10.2-mac-x64.dmg aaa6387fa693bf041dc987197ed3d2108af85f549536a90fd556e899adb88516
meshchatx-android-flatpak-v4.10.2.intoto.jsonl a646f51c49457e54dece8c76e8e34cd18d6ff17ecc4a7f08617fceed8a755afc
MeshChatX-v4.10.2.json 4ea3811eec27c6a08c8d495987c7ce3f0f0f26d2f94bb70f288e91c815f1be2f
meshchatx-desktop-v4.10.2.intoto.jsonl 2689a98a8b68df3eae280aacc96f00023194434862ea458ea0ad4677e283086f
ReticulumMeshChatX-v4.10.2-linux-arm64.AppImage 1239e41e07ed0f87921eaddb167cedda14cdede859419a4e3f1c4bd3c1621ff0
latest.yml 42de285a0f3d0ccc0a4f381d3fcc46de70c842a7bdc91ecf08d2ea3f9f64e99d
ReticulumMeshChatX-v4.10.2-linux-alpine-x64.apk 7ebd11c0999795f3d6e515f700812e12b7bfbdfe107b52b27d7cd2c4864cf6b0
ReticulumMeshChatX-v4.10.2-win-installer.exe 66c36acbb967c8c91932f779733b9552a0b98f021c2a0a77b245701aaa00afb9
meshchatx-py314-linux-x64.pyz 65c1428e9eb5a687c85fcc05ce1646b1ffeeccbbad05fc806ddaa24d3f7604e2
meshchatx-py311-linux-arm64.pyz 22d9fec89cf6fa7927a8000b7fb3ae3ee19bd4d32090e44480f686536d4a108b
meshchatx-linux-v4.10.2.intoto.jsonl 727a4728b33674c3a41c525969a8259e1060ced4a183a268716f7b2b7bb90e58
openvex.json d6aa027853ecbc974f8c52f64c4fa5c874724ad412bd33c77483cf167853077d
ReticulumMeshChatX-v4.10.2-mac-arm64.dmg.cosign.bundle b74cb9267223543f6ae6634fed64e149ffbabe082b21e25ccf4ca553a64173e6
meshchatx-py314-linux-arm64.pyz f4f613f8ab15476303f891fd17996c368cbd2fe141ceffb1beafdd24c0cfdbd7
sbom.cyclonedx.json 252ff70b7c0cd8b7dee129e3a2999c5d7af4195fd1b56ba059dc5883f2714b28
meshchatx-py311-linux-x64.pyz 9b5be36f1e0a9ecf15717e3c0d8ed4d47bc8fdd1d2aeb2023b87fbe7608bf891
ReticulumMeshChatX-v4.10.2-linux-x86_64.flatpak a90c9b14f8a246515d8ab373be30517512f22c7b1423156c6a5edf8ab081a6b4
Verification
  • Cosign bundles (.cosign.bundle) are attached for keyless sigstore verification.
  • SLSA provenance (.intoto.jsonl) is available for supply-chain attestation.
  • Or verify manually using the SHA256 table above.