An open client for the MeshCore LoRa mesh.
MeshCore Open is an unofficial, MIT-licensed Flutter app for MeshCore — the open LoRa mesh radio protocol. Pairs to your node over BLE, USB, or TCP from Android, iOS, Linux, macOS, Windows, or web. No internet, no cell service, no accounts.
Built for the field, not the demo.
The things that get cut from "v1" of most apps are the things you'd actually need at 2am, twenty miles from a cell tower. So they ship in v1 here.
Six platforms, one client
A single Flutter codebase running on Android, iOS, Linux, macOS, Windows, and the web. Pair the same identity from whichever device is in your pocket.
BLE · USB · TCP
Three ways to talk to a node: Bluetooth LE for handhelds, USB serial for desktop rigs, TCP for repeater hubs on your LAN. Pick whatever’s plugged in.
Live mesh map
Plot nodes on OpenStreetMap, trace the actual path messages took, run line-of-sight terrain analysis, share MGRS pins, cache tiles offline before you head out.
Full repeater hub
Manage repeater and room nodes from anywhere on the mesh — status, telemetry, neighbors, full CLI, and a complete settings panel that’s admin/guest-aware.
Modern messaging on a slow radio
DMs, broadcast channels, private communities, reactions, replies, inline GIFs, on-device LLM translation, optional SMAZ compression to squeeze more text per packet.
Open source, no accounts
MIT licensed, built in the open with 14+ contributors and 15 UI languages. No sign-up, no servers, no telemetry — your keys live on the device.
- Added Add more explicit platform support table
- Fixed fix: provide AppSettingsService in tcp_flow_test
- Changed Update Polish localization strings for clarity
- Changed Unified packet parsing to use BufferReader
- Changed location aware channel_message_path
- Changed Show overlaps in public keys of repeaters
- Fixed Fix/linux ble pairing flow
- Changed Refactor contact handling and other improvments
- Changed Update Dutch translations
- Changed Better french translations
- Added new labels fixed polish translations
- Changed Make unread badge max out at 9999+ instead of 99+
- Changed Local llm translator
- Changed Support receiving more formats of GIF message
- Added Add LowMesh prefix and explain how to add more
- Changed Preserve Coordinates with contact.copyWith() function
- Added Add additional device name prefixes to MeshCoreUuids
- Changed init contributing.md
- Added add tooltip to send message buttons
- Added add fvm directory and rc file to gitignore
- Added add jni to generated plugins
- Changed reimplement location aware snr-indikator after alpha7
- Changed use l10n strings for discovered menu item
- Changed Enhancement/preset offgrid repeat toggle
- Changed small clean up from PR #275
- Added add auto clock synchronization setting after repeater login
- Changed clear toast on tap
- Changed enh: make repeater admin guest aware
- Fixed fix: settings dialog lists
- Removed remove unused macos path_provider_foundation
- Changed chore: update version to alpha 6
- Changed Still better french translations
- Added add support for whipseros
- Changed translations to german updated.
- Changed Update .gitignore to exclude .gradle/
- Removed remove wakelock
- Added Add flake.nix for development environment
- Fixed Fix battery chemistry dropdown layout overflow
- Changed Refine device info layout and add collapsible map legend
- Added Add path tracing functionality to map screen
- Added Add warning when bluetooth is off
- Changed Refactor radio settings and localization updates
- Changed Handle RESP_CODE_ERR frames explicitly in connector
- Added add rbenv support
- Added Add a signal readout for the nearest repeater. With improvements to app bar and other UI polish.
- Added Added Line Of Sight Feature for repeater placement, Added app wide Units Setting
- Changed Refactor map screen
- Changed Refactor marker label display on map screens
- Fixed Fix repeater battery % inconsistency and add configurable repeater battery chemistry
- Changed Changed all map lables to look the same across all map ui
- Changed fix(appbar): prevent title overflow on narrow widths
- Changed Mark pending channel messages sent on RESP_CODE_SENT
- Changed Swipe to reply
- Added Added mute channel functionality
- Changed docs: add chrome support notice
- Changed Better french translations
- Changed clear app db of channel messages on delete
- Changed Align Android app module to Java 17 and bump wakelock_plus
- Added feat: hide message tracing
- Changed Pr combined #228 #220 #219 #201
- Changed fix(channels): make edit/delete actions use parent context after bottom sheet closes Supports Windows Animations Off In Android
- Changed enh <enter> to send giphy
- Changed enh: return cursor focus to message window after send
- Changed favorites handling only
- Changed Correct Chinese translation
- Added Add localized search functionality for contacts
- Changed Show name of connected companion
- Changed enh: Chrome compatibility
- Changed Unify signal indicator UI across RSSI and SNR
- Changed Allow search for prefix as Displayed in contact list
- Changed Enhance message parsing and error handling in MeshCoreConnector
- Changed Contact discovery
- Added Implements a debounced notification listener in MeshCoreConnector
- Changed Dev guessed locations
- Fixed Fix formatting of cryptocurrency addresses in README
- Changed Shorten lastSeen for en,de,es,fr
- Changed Refactor data handling of contacts
- Changed Enhance contact handling logic in MeshCoreConnector.
- Changed Feature/usb
- Changed Changed contacts latitude and longitude fields to be null until parsed and set
- Changed Refactor storage classes to include companion's public key
- Changed Migrate legacy storage keys to scoped keys in various store classes
- Changed Dev discovery
- Added feat: Add TCP connection support and UI integration
- Added feat: add set-as-my-location from map long-press, connector and UI
- Added feat: add ML-based adaptive timeout prediction using LinearRegressor
- Changed squashed PR for Dropdown Group Menu
- Changed Improvements to path tracing and location handling