2026-06-14 10:16:13 +02:00
# MeshCore Solo Companion Firmware
2025-01-13 14:07:48 +11:00
2026-06-14 10:16:13 +02:00
A fork of the official [MeshCore ](https://github.com/meshcore-dev/MeshCore ) companion radio firmware with extended features and UI enhancements, targeting a growing set of supported devices.
2026-06-04 16:15:01 +02:00
2026-05-29 12:46:29 +02:00
Join the discussion on the official MeshCore Discord: https://discord.gg/sdhYArU2jr
2026-05-17 18:51:48 +02:00
2026-05-31 13:04:36 +02:00
Solo firmware thread: https://discord.com/channels/1495203904898728149/1505294337884553447
2026-06-14 10:16:13 +02:00
---
## Supported Devices
| Device | Display | Firmware file |
| ------ | ------- | ------------- |
| Seeed Wio Tracker L1 (OLED) | SSD1306 / SH1106 128 × 64 | `solo-<version>-WioTrackerL1.uf2` |
| Seeed Wio Tracker L1 (E-ink) | GxEPD2 250 × 122 | `solo-<version>-WioTrackerL1Eink.uf2` |
| GAT562 30S Mesh Kit | SSD1306 128 × 64 | `solo-<version>-GAT562-30S-Mesh-Kit.uf2` |
2026-05-23 23:52:04 +02:00
2026-06-14 10:16:13 +02:00
All firmware files are published on the [releases page ](https://github.com/MarekZegare4/MeshCore-Solo/releases ). Each binary supports both BLE and USB serial — there are no separate BLE/USB builds.
2026-05-28 12:44:23 +02:00
2026-06-14 10:16:13 +02:00
<!-- **Enclosures (Wio Tracker L1)**
2026-05-28 12:44:23 +02:00
- [E-ink case ](https://www.printables.com/model/1420534-seeed-wio-tracker-l1-e-ink-enclosure )
2026-06-14 10:16:13 +02:00
- [OLED case ](https://www.printables.com/model/1380791-meshpack-seeed-l1-oled ) -->
2026-05-24 11:04:51 +02:00
2026-05-23 00:07:41 +02:00
---
2026-05-28 10:54:09 +02:00
## Feature highlights
2025-01-13 14:07:48 +11:00
feat(ui): on-device channel management, remote admin tool, per-language keyboards
Messages:
- Add/edit/delete channels on-device (new ChannelsView, owned by the renamed
MessagesScreen — was QuickMsgScreen, whose name no longer matched its scope).
Channel secret entry supports a typed passphrase (SHA-256'd, same primitive
the library already uses for the routing hash) or a raw 32-hex-char key.
- MyMesh::setChannelLocal() factors out the setChannel/saveChannels/
onChannelRemoved sequence previously duplicated across the two
CMD_SET_CHANNEL branches, shared now by the BLE and on-device paths.
Tools > Admin (new):
- Log into a repeater/room server's admin account and send CLI commands,
the on-device equivalent of the app's repeater-admin feature.
- Commands are organised into category tabs (System/Radio/Routing/Actions)
with common get/set fields (name, radio profile, tx power, repeat, advert
intervals, ...) plus a free-text "Custom command..." fallback for anything
else. A field row fetches the current value, opens it pre-filled for
editing, and sends the change — falling back to a blank editor if the
fetch fails or times out.
- The admin password persists and self-heals exactly like room logins in
Messages: saved on a confirmed admin-level login, forgotten on a failed
one, left alone if merely under-privileged.
- New MyMesh::sendAdminCommand()/AbstractUITask::onAdminReply() plumbing so
a reply reaches the UI without touching the existing BLE/app CLI-terminal
path (queueMessage's should_display gate is untouched).
Shared TabBar.h extracted from NearbyScreen/BotScreen's independently
duplicated tab-carousel rendering (now a third consumer via Admin) — also
fixes neighbouring tabs vanishing outright when they didn't fully fit;
they now truncate with an ellipsis instead.
Keyboard: the combined "Ext.Latin" alphabet split into 8 separate,
linguistically complete per-language keyboards (Polish, Czech, Slovak,
German, French, Spanish, Portuguese, Nordic), and fixed an OLED-only bug
where tall accented glyphs overlapped the keyboard's separator line
(SH1106's Lemon-font ascent constant was 2-3px short for them).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-12 19:40:53 +02:00
- Extended language support with native Unicode rendering and input ([Lemon font ](https://github.com/cmvnd/fonts )) alongside the original ASCII mode (Default font with transliteration) — on-screen keyboard alphabets for Cyrillic, Greek, Polish, Czech, Slovak, German, French, Spanish, Portuguese and Nordic (Danish/Norwegian/Swedish), selectable in Settings › Keyboard › Alphabet
2026-05-28 12:44:23 +02:00
2026-06-14 10:16:13 +02:00
- Enabled sensor screens with support for onboard sensors (temperature, humidity, pressure, luminosity, CO₂) and GPS data
2025-01-13 14:07:48 +11:00
2026-06-04 16:15:01 +02:00
- **GPS navigation** — a full navigation suite that needs no extra hardware (details in the [Tools Screen ](./docs/solo_features/tools_screen/tools_screen.md ) docs):
- **Waypoints** — mark a spot (car, camp, water…) with a short label, see it on the trail map, and get live bearing + distance back to it; the list always offers a one-tap backtrack to where your trail started
- **GPS compass** — heading derived from course-over-ground (no magnetometer needed), shown as a clear scrolling heading tape with a large degrees + cardinal readout
- **Navigate to anything** — a saved waypoint, a node straight from Nearby Nodes, or a location someone shares with you in a message
- **Share & save locations** — send a waypoint to a contact or channel; on the other end, navigate to or save any shared location with one menu
feat(companion): live location sharing, Locator geofencing, trail auto-pause
Squash merge of feat/location-beacon-alerts-autopause (v1.21).
Features:
- Live Location Sharing — broadcast position as movement-gated [LOC]
messages to a channel or contact; live shares show as map pins with
distance/bearing in Nearby Nodes and a status-bar indicator. [LOC] is
parsed in DMs, channel messages and room messages; DM shares name the
sender.
- Locator (geofence) — arm a geofence around a saved waypoint or a person
(live [LOC] or last-known position), alert on arrive/leave or near/far,
with an optional homing beeper (gated to arrive/both modes). Arm from
Tools > Locator, Nearby Nodes, or Waypoints; target picker lists
favourites first, clearable via a "None" entry. Active target is drawn
as a flag on the map.
- One active target shared across Locator / Navigate / Map via a single
resolver (resolvePersonPos / activeTargetPos) that prefers a live
[LOC] share over the last-advertised GPS fix.
- Follow live contacts — Navigate to a live-sharing contact follows them
as they move and adds an ETA line; quick-share your own position from
the Map.
- Map & status-bar upgrades — home mini-map gets a north marker, scale
tick, and a connected trail line (was disconnected dots); status line
shows tracked-node count, an arrow + distance to the active Locator/Nav
target (falling back to the nearest live-tracked contact); GPS fix icon
in the top status bar, shown only on GPS boards with GPS enabled.
- Trail auto-pause — recording freezes on stops (banking elapsed time,
breaking the map line across the idle gap) and resumes on movement
without ending the session.
- Streaming trail simplification — GPS points are simplified in-stream
via a fixed-corridor (Reumann-Witkam) pass tuned for fidelity: straight
runs collapse to their endpoints, curves stay bounded to the Min-dist
tolerance, so the 512-point buffer covers a far longer route than a
flat point budget would suggest.
- Collapsible Tools (Location / Comms / System sections, fold-in-place
like Settings) and page-indicator icons on the home carousel.
- Waypoint coordinate editor — add a waypoint by scroll-editing lat/lon
digit by digit.
Fixes:
- Critical: low-heap hang and contact loss on RAM-tight builds. Halved
message-history scrollback rings (recovering ~14 KB free heap) and
made contacts/channels/prefs persistence atomic (temp file + rename),
so an interrupted save can no longer corrupt or wipe the store.
- Serial.write() bounded so a stalled USB host can't hang the device.
- Nearby Nodes: live [LOC] senders respect the type filter, sort by
shared position, and the list refreshes so live shares bubble up.
- Map: live contacts are labelled before waypoints.
- GPS status icon hidden when GPS is off in Settings.
- Splash screen no longer truncates a pre-release tag's own dash (e.g.
v1.21-rc1) when stripping the build's commit-hash suffix.
- Null-guarded the Locator target picker; clamped loc-share channel
index on load.
Under the hood:
- -Os size optimisation on the e-ink and GAT562 30S solo envs.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 19:04:21 +02:00
- **Live location sharing** — broadcast your position over the mesh as you move (movement-gated, to a channel or contact) and see others who share theirs as pins on the map and live distance/bearing in Nearby
- **Locator** — arm a geofence around a target — a saved waypoint *or* a person (their live/last-known position) — and get an alert when you arrive/leave or they get near/far, with an optional homing beeper that ticks faster the closer you get. Set it from the Locator screen or straight from Nearby Nodes / Waypoints, and see the target as a flag on the map
- **GPS trail** — background route recording with an auto-fit map (waypoints + live position), summary stats, auto-pause on stops, and [GPX export ](#solo-tools )
2026-06-04 16:15:01 +02:00
- **Metric or imperial** — one global Units setting drives every distance and speed across the UI
feat(ui): on-device channel management, remote admin tool, per-language keyboards
Messages:
- Add/edit/delete channels on-device (new ChannelsView, owned by the renamed
MessagesScreen — was QuickMsgScreen, whose name no longer matched its scope).
Channel secret entry supports a typed passphrase (SHA-256'd, same primitive
the library already uses for the routing hash) or a raw 32-hex-char key.
- MyMesh::setChannelLocal() factors out the setChannel/saveChannels/
onChannelRemoved sequence previously duplicated across the two
CMD_SET_CHANNEL branches, shared now by the BLE and on-device paths.
Tools > Admin (new):
- Log into a repeater/room server's admin account and send CLI commands,
the on-device equivalent of the app's repeater-admin feature.
- Commands are organised into category tabs (System/Radio/Routing/Actions)
with common get/set fields (name, radio profile, tx power, repeat, advert
intervals, ...) plus a free-text "Custom command..." fallback for anything
else. A field row fetches the current value, opens it pre-filled for
editing, and sends the change — falling back to a blank editor if the
fetch fails or times out.
- The admin password persists and self-heals exactly like room logins in
Messages: saved on a confirmed admin-level login, forgotten on a failed
one, left alone if merely under-privileged.
- New MyMesh::sendAdminCommand()/AbstractUITask::onAdminReply() plumbing so
a reply reaches the UI without touching the existing BLE/app CLI-terminal
path (queueMessage's should_display gate is untouched).
Shared TabBar.h extracted from NearbyScreen/BotScreen's independently
duplicated tab-carousel rendering (now a third consumer via Admin) — also
fixes neighbouring tabs vanishing outright when they didn't fully fit;
they now truncate with an ellipsis instead.
Keyboard: the combined "Ext.Latin" alphabet split into 8 separate,
linguistically complete per-language keyboards (Polish, Czech, Slovak,
German, French, Spanish, Portuguese, Nordic), and fixed an OLED-only bug
where tall accented glyphs overlapped the keyboard's separator line
(SH1106's Lemon-font ascent constant was 2-3px short for them).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-12 19:40:53 +02:00
- [Messages Screen ](./docs/solo_features/message_screen/message_screen.md ) — view and send messages, open message details, reply with quick messages or custom text, navigate to / save locations shared in a message, per-channel notification and melody overrides, add/edit/delete channels on-device
2026-05-15 09:21:32 +02:00
2026-05-29 12:25:34 +02:00
- [Favourites Dial ](./docs/solo_features/favourites_dial/favourites_dial.md ) — pin up to six contacts for quick access from the home screen
2026-05-19 20:37:56 +02:00
2026-05-29 12:25:34 +02:00
- [Settings Screen ](./docs/solo_features/settings_screen/settings_screen.md ) — configure display, sound, home page order, radio and system settings
2026-05-19 20:37:56 +02:00
2026-06-30 22:40:44 +02:00
- [Clock Screen ](./docs/solo_features/clock_screen/clock_screen.md ) — view time and date plus up to three configurable data fields, with built-in clock tools (one-shot alarm, countdown timer, stopwatch)
2025-01-13 14:07:48 +11:00
2026-05-29 12:25:34 +02:00
- [Screen Lock ](./docs/solo_features/screen_lock/screen_lock.md ) — lock the device to prevent accidental keypresses, with a lock screen showing time and sensor data
2026-05-19 20:37:56 +02:00
feat(ui): on-device channel management, remote admin tool, per-language keyboards
Messages:
- Add/edit/delete channels on-device (new ChannelsView, owned by the renamed
MessagesScreen — was QuickMsgScreen, whose name no longer matched its scope).
Channel secret entry supports a typed passphrase (SHA-256'd, same primitive
the library already uses for the routing hash) or a raw 32-hex-char key.
- MyMesh::setChannelLocal() factors out the setChannel/saveChannels/
onChannelRemoved sequence previously duplicated across the two
CMD_SET_CHANNEL branches, shared now by the BLE and on-device paths.
Tools > Admin (new):
- Log into a repeater/room server's admin account and send CLI commands,
the on-device equivalent of the app's repeater-admin feature.
- Commands are organised into category tabs (System/Radio/Routing/Actions)
with common get/set fields (name, radio profile, tx power, repeat, advert
intervals, ...) plus a free-text "Custom command..." fallback for anything
else. A field row fetches the current value, opens it pre-filled for
editing, and sends the change — falling back to a blank editor if the
fetch fails or times out.
- The admin password persists and self-heals exactly like room logins in
Messages: saved on a confirmed admin-level login, forgotten on a failed
one, left alone if merely under-privileged.
- New MyMesh::sendAdminCommand()/AbstractUITask::onAdminReply() plumbing so
a reply reaches the UI without touching the existing BLE/app CLI-terminal
path (queueMessage's should_display gate is untouched).
Shared TabBar.h extracted from NearbyScreen/BotScreen's independently
duplicated tab-carousel rendering (now a third consumer via Admin) — also
fixes neighbouring tabs vanishing outright when they didn't fully fit;
they now truncate with an ellipsis instead.
Keyboard: the combined "Ext.Latin" alphabet split into 8 separate,
linguistically complete per-language keyboards (Polish, Czech, Slovak,
German, French, Spanish, Portuguese, Nordic), and fixed an OLED-only bug
where tall accented glyphs overlapped the keyboard's separator line
(SH1106's Lemon-font ascent constant was 2-3px short for them).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-12 19:40:53 +02:00
- [Tools Screen ](./docs/solo_features/tools_screen/tools_screen.md ) — GPS trail & waypoints, compass, nearby nodes (with ping & navigate), ringtone editor, auto-reply bot, auto-advert, live location sharing, locator, diagnostics, repeater, remote admin
2026-05-29 12:46:29 +02:00
2026-06-10 23:30:43 +02:00
- **Battery saving (radio)** — two optional, independent toggles under Settings › Radio:
- **Pwr save** — hardware duty-cycle receive (SX126x `SetRxDutyCycle` ): the radio cycles RX↔sleep on its own and wakes on a preamble, cutting average RX current with only a little added receive latency
- **Auto pwr** — Adaptive Power Control: trims actual TX power on strong links (from ACK SNR) and ramps back up to the configured ceiling on weak/lost links; the home screen shows the live power
2026-06-14 10:16:13 +02:00
### E-ink Display (Wio Tracker L1)
2026-05-29 12:46:29 +02:00
The e-ink variant targets the Wio Tracker L1 fitted with a 2.13″ GxEPD2 panel (250 × 122 px). All screens have been adapted for the e-ink panel:
- **Adaptive layout** — every screen reflows correctly in both landscape (250 × 122) and portrait (122 × 250) orientations
- **Display rotation** — configurable in Settings › Display; applied immediately and persisted across reboots
- **Joystick rotation** — independent of display rotation; useful for custom enclosures
- **Full refresh interval** — configurable in Settings › Display; reduces ghosting on long sessions
- **Clock seconds suppressed by default** — seconds are hidden to reduce per-second panel refreshes and extend display lifetime; re-enable in Settings › Display
2026-05-19 20:37:56 +02:00
2026-06-14 10:16:13 +02:00
---
2025-05-18 02:18:32 +12:00
2026-06-14 10:16:13 +02:00
## Flashing
2025-05-18 02:18:32 +12:00
2026-06-14 10:16:13 +02:00
1. Download the `.uf2` file for your device from the [releases page ](https://github.com/MarekZegare4/MeshCore-Solo/releases )
2. Press reset twice quickly to enter bootloader mode — the device should appear as a mass storage drive on your computer
3. Copy the `.uf2` file to the drive to flash the firmware
2026-05-19 14:07:20 +02:00
2026-05-29 12:25:34 +02:00
> [!IMPORTANT]
2026-05-28 20:37:20 +02:00
> BLE connection has priority over USB serial. When a BLE connection is active, the USB protocol is suspended. When connecting to the companion app via USB, ensure to disconnect from BLE first or disable BLE directly from the device to avoid confusion.
2026-05-28 12:44:23 +02:00
2026-06-14 10:16:13 +02:00
Updating to a newer version usually does not require erasing flash unless the release notes explicitly state otherwise.
2026-05-28 12:44:23 +02:00
2026-05-29 12:25:34 +02:00
> [!WARNING]
2026-06-14 10:16:13 +02:00
> When migrating from official or other custom firmware, backup your data and **perform a factory reset** to prevent conflicts with existing settings:
2026-05-29 12:25:34 +02:00
>
2026-06-14 10:16:13 +02:00
> 1. Open device settings in the companion app and download a data backup
> 2. Go to [MeshCore Flasher](https://meshcore.io/flasher), select your device, and perform **Erase flash** before flashing
2026-05-29 12:25:34 +02:00
---
## Documentation
2026-05-20 10:04:14 +02:00
2026-05-29 12:25:34 +02:00
### This fork
2026-05-19 14:07:20 +02:00
2026-05-29 12:46:29 +02:00
| Document | Description |
| -------------------------------------------------------------------------- | --------------------------------------------------------------------- |
2026-06-04 16:15:01 +02:00
| [Messages Screen ](./docs/solo_features/message_screen/message_screen.md ) | Sending messages, context menus, reply, navigate to / save shared locations, Notif/Melody overrides |
2026-05-29 12:46:29 +02:00
| [Favourites Dial ](./docs/solo_features/favourites_dial/favourites_dial.md ) | Pinned contacts grid, unread badges, pin/unpin |
2026-06-30 22:40:44 +02:00
| [Clock Screen ](./docs/solo_features/clock_screen/clock_screen.md ) | Clock page, date, configurable data fields, alarm / timer / stopwatch |
2026-05-29 12:46:29 +02:00
| [Settings Screen ](./docs/solo_features/settings_screen/settings_screen.md ) | All settings sections with values and interactions |
| [Screen Lock ](./docs/solo_features/screen_lock/screen_lock.md ) | Lock/unlock sequence, lock screen, auto-lock |
feat(ui): on-device channel management, remote admin tool, per-language keyboards
Messages:
- Add/edit/delete channels on-device (new ChannelsView, owned by the renamed
MessagesScreen — was QuickMsgScreen, whose name no longer matched its scope).
Channel secret entry supports a typed passphrase (SHA-256'd, same primitive
the library already uses for the routing hash) or a raw 32-hex-char key.
- MyMesh::setChannelLocal() factors out the setChannel/saveChannels/
onChannelRemoved sequence previously duplicated across the two
CMD_SET_CHANNEL branches, shared now by the BLE and on-device paths.
Tools > Admin (new):
- Log into a repeater/room server's admin account and send CLI commands,
the on-device equivalent of the app's repeater-admin feature.
- Commands are organised into category tabs (System/Radio/Routing/Actions)
with common get/set fields (name, radio profile, tx power, repeat, advert
intervals, ...) plus a free-text "Custom command..." fallback for anything
else. A field row fetches the current value, opens it pre-filled for
editing, and sends the change — falling back to a blank editor if the
fetch fails or times out.
- The admin password persists and self-heals exactly like room logins in
Messages: saved on a confirmed admin-level login, forgotten on a failed
one, left alone if merely under-privileged.
- New MyMesh::sendAdminCommand()/AbstractUITask::onAdminReply() plumbing so
a reply reaches the UI without touching the existing BLE/app CLI-terminal
path (queueMessage's should_display gate is untouched).
Shared TabBar.h extracted from NearbyScreen/BotScreen's independently
duplicated tab-carousel rendering (now a third consumer via Admin) — also
fixes neighbouring tabs vanishing outright when they didn't fully fit;
they now truncate with an ellipsis instead.
Keyboard: the combined "Ext.Latin" alphabet split into 8 separate,
linguistically complete per-language keyboards (Polish, Czech, Slovak,
German, French, Spanish, Portuguese, Nordic), and fixed an OLED-only bug
where tall accented glyphs overlapped the keyboard's separator line
(SH1106's Lemon-font ascent constant was 2-3px short for them).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-12 19:40:53 +02:00
| [Tools Screen ](./docs/solo_features/tools_screen/tools_screen.md ) | GPS trail & waypoints, compass, navigation, nearby nodes, ringtone editor, auto-reply bot, auto-advert, live location sharing, locator, diagnostics, repeater, remote admin |
docs: add a solo UI framework developer guide
Document the reusable building blocks the solo UI has grown — the UIScreen
model and screen wiring, DisplayDriver layout metrics, drawList/AccordionList,
the popup/keyboard/digit-editor/fullscreen/nav components, the geo + state-store
+ persistence helpers, mini-icons, input conventions, and the cross-cutting
gotchas (single-thread render, e-ink pacing, reference cleanup). Ends with a
worked "add a new Tools screen" example.
No code change; the helper layer is already well-factored (the recent dedup
passes closed the remaining gaps), so this captures it for contributors rather
than extracting more. Linked from the README docs table.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 17:51:15 +02:00
| [Solo UI framework ](./docs/design/solo_ui_framework.md ) | **Developer guide** — the reusable building blocks (screens, lists, popups, mini-icons, geo/persistence helpers) and how to add a new feature |
2026-05-29 12:25:34 +02:00
### Upstream MeshCore
2026-05-29 12:46:29 +02:00
| Document | Description |
| -------------------------------------------------- | ------------------------------------------------ |
| [FAQ ](./docs/faq.md ) | Frequently asked questions |
| [CLI Commands ](./docs/cli_commands.md ) | Commands for repeaters, room servers and sensors |
| [Terminal Chat CLI ](./docs/terminal_chat_cli.md ) | Commands for the terminal chat client |
2026-05-29 12:25:34 +02:00
| [Companion Protocol ](./docs/companion_protocol.md ) | Serial/BLE frame protocol between device and app |
2026-05-29 12:46:29 +02:00
| [Packet Format ](./docs/packet_format.md ) | LoRa packet structure |
| [QR Codes ](./docs/qr_codes.md ) | Channel and contact QR code formats |
2026-05-19 14:07:20 +02:00
---
2026-05-29 12:25:34 +02:00
2026-06-14 10:16:13 +02:00
## Solo Tools
2026-05-31 16:24:29 +02:00
2026-06-14 10:16:13 +02:00
All solo builds include screenshot and GPX trail export support out of the box — no special build flags required.
2026-05-31 16:24:29 +02:00
2026-06-14 10:16:13 +02:00
### [Solo Tools Web App](https://marekzegare4.github.io/Solo-tools/) — no install required
2026-06-09 08:14:19 +02:00
2026-06-14 10:16:13 +02:00
Open the link in a browser with Web Serial support (Chromium-based) and click **Connect device** . The web app supports:
2026-05-31 16:24:29 +02:00
2026-06-14 10:16:13 +02:00
- **Screenshot** — capture the current display contents as a PNG
- **GPX export** — stream the GPS trail and download a timestamped `.gpx` file
2026-05-31 16:24:29 +02:00
2026-06-14 10:16:13 +02:00
Trigger the relevant action on the device (**Tools › Trail › Hold Enter** for GPX export, **S** key for screenshot) after connecting.
2026-05-31 16:24:29 +02:00
2026-06-14 10:16:13 +02:00
> Disconnect from the companion app before connecting via USB — USB serial is suspended while a BLE connection is active.
2026-05-31 16:24:29 +02:00
2026-06-14 10:16:13 +02:00
> If the companion app is connected over BLE the GPX export is safe (USB receive is ignored). If the app is on USB, disconnect it first — the raw stream will otherwise disrupt the app's frame protocol.
2026-05-31 16:24:29 +02:00
---
2026-05-29 12:46:29 +02:00
## Development
2026-05-26 21:26:07 +02:00
2026-06-14 10:16:13 +02:00
This fork tracks the upstream [MeshCore ](https://github.com/meshcore-dev/MeshCore ) repository. To prevent upstream changes from overwriting this README during merges, `README.md` is protected via `.gitattributes` . After cloning, run once:
2026-05-26 21:26:07 +02:00
2026-05-29 12:46:29 +02:00
```sh
git config merge.ours.driver true
```
2026-05-26 21:26:07 +02:00
2026-05-29 12:46:29 +02:00
### Contributing
2026-05-26 21:26:07 +02:00
2026-05-29 12:46:29 +02:00
Contributions are welcome. Fork the repository, make your changes, and open a pull request. Please follow the existing code style and keep changes focused.
2026-07-06 21:07:31 +02:00
---
## Contributors
Big thanks to the people who contributed to this fork:
- [vanous ](https://github.com/vanous )
- [marczykm ](https://github.com/marczykm )
Built on upstream [MeshCore ](https://github.com/meshcore-dev/MeshCore ) and its [community ](https://github.com/meshcore-dev/MeshCore/graphs/contributors ).