Wadamesh
ForkA touch-UI MeshCore firmware for the LilyGo T-Deck / T-Deck Plus and Heltec V4 TFT (ESP32-S3), built with LVGL. Split out from meshcomod. Provides a full touch-driven companion experience with on-screen keyboard and WiFi connectivity.
Fork of MeshCore (Reference)
- Maintainer
- ALLFATHER-BV ↗
- Status
- Active
- Maturity
- Beta
- Lifecycle
- Active
- Latest version
- beta_59
- Released
- 2026-08-04
- Runtime
- Arduino · C++
- Distribution
- Community
- Licensing
- Open source
- License
- GPL-3.0
Capabilities
Transports
- ✓ BLE
- ✓ USB serial
- ✓ Native TCP
- ✓ Wi-Fi AP
Operations
- ✕ Web flasher
- ✕ OTA updates
Networking
- ✕ Repeater
- ✕ Room server
- ✕ Observer
- ✕ KISS modem
Hardware
- ✓ GPS
- ✓ Display
- ✕ Sensors
- ✕ Low-power RX
Protocol
- ✓ MeshCore compatible
Node role
Features
- LVGL touch UI
- On-screen keyboard
- WiFi companion connectivity
- USB + TCP transports
- Split from meshcomod (same maintainer)
Project signals
- GitHub stars
- 93
- Forks
- 22
- Watchers
- 3
- Open issues
- 51
- Contributors
- 16
- Release downloads
- 3,823
- Latest downloads
- 13
- Source available
- Yes
- Releases available
- Yes
- CI builds
- Yes
Releases
from GitHub · updated 2026-08-04beta_59 # Latest Pre-release 9 hours ago · 2026-08-04 22:50 UTC
Test build. Stable stays beta_50.
The big one: WADAMESH runs apps written in Lua now, installed from a Store on the device and updated over the air without reflashing. The runtime, the API, the Store and the first converted apps all ship together in this tag.
Flash it from https://flasher.wadamesh.com (flip the Beta toggle), or on-device via Settings → Firmware with "Get test builds (beta)" enabled.
Lua apps
An app is a single
.luafile. It installs from the Store, appears in the app drawer beside the built-ins, and updates when a newer version lands in the catalog — no firmware flash involved.Store lives in the app drawer, with three tabs:
- Apps — install, update or remove what the catalog offers.
- Built-in — hide the stock apps you never open, so the drawer holds what you actually reach for. The MQTT bridge is hidden by default now.
- Languages — download translations (see below).
RF Monitor and Airtime are Lua apps rather than firmware pages, and they gained things the native versions never had: RF Monitor scrolls the full packet list, Airtime has proper Y-axis labels and a Reset button. Snake is a Lua app too. Removing one really removes it; reinstalling brings it back with your scores intact.
Write your own. Drop a bare
.luafile into/apps/on the card and it appears in the drawer — no manifest needed. The API is about thirty functions covering the screen, input, read-only mesh data, an HTTP fetch and a little per-app storage.📖 API reference: https://wadamesh.com/sdk.html
Two constraints worth knowing up front. The mesh is read-only in v1 — an app can read contacts, the packet log and radio statistics, but cannot transmit; a buggy or hostile app must not be able to put packets on the air in your name. And
http_getis plain HTTP, because after Wi-Fi associates there is not enough internal heap left for a TLS handshake on the smaller boards.Languages are files now
Translations are no longer baked into the firmware. They download from the Store's Languages tab as versioned files, so a translation can be fixed and shipped without waiting for a firmware release — the device offers Update when a newer one exists.
Every language got a full sweep: roughly 150 strings that had quietly stayed English for months — the channel settings sheets, the message menus, most buttons — are translated across all 13 languages. Settings → Language opens the Languages tab directly, and switching one now tells you it is restarting before it does, instead of rebooting under your finger.
Heltec V4
The V4 has 2 MB of PSRAM and very little free internal memory, which made the Store unreliable there. It now ships every language and every catalog app inside the firmware image — the apps are in the drawer on first boot and all 13 languages are already installed. Its Store is a picker rather than a shop.
Around 17 KB of internal memory reclaimed on the V4, measured step by step: the store and Discover tables moved out of static memory, and the allocator now places ordinary allocations in PSRAM instead of forcing everything under 4 KB into internal RAM.
Fixes
- "Save update bin to SD" works again. It failed with "SD write failed" at 1–7% on every T-Deck and had been broken since the feature shipped in beta_36. The download buffer sat in PSRAM, which the SD card cannot reliably DMA from, so the write died partway through at a point that moved with the network. Nothing to do with card size or formatting. Reported by Marshal W7TER, df2080 and Dennis.
- The same defect is fixed in two places nobody had hit yet: copying any file to the SD card from the Files app, and exporting a crash dump.
- The Store fits narrow and high-DPI screens. Cards measure their own text instead of assuming two lines, so nothing is cut off and a long title no longer lands on top of the description. This also fixes every board for languages whose tex …
beta_58 # Pre-release 23 hours ago · 2026-08-04 09:08 UTC
Test build. Stable stays beta_50.
Update strongly recommended if you ran beta_57 — this fixes the upgrade bug that left devices booting into remote mode with the screen frozen on the boot logo.
Flash it from https://flasher.wadamesh.com (flip the Beta toggle), or on-device via Settings → Firmware with "Get test builds (beta)" enabled.
The beta_57 upgrade bug
Updating from beta_56 to beta_57 corrupted part of the stored settings. beta_57's new retry preference was inserted into the middle of the persisted settings layout instead of appended at the end; the settings blob is a raw byte copy, so every later value shifted by one on upgrade. The worst casualty: the remote-mode flag inherited a neighbouring value that an old migration forces to 1 on every install — so upgraded devices enabled Remote Mode without consent, which renders the interface off-screen for a browser and stops drawing to the physical panel. From the outside that looked like a device frozen on a half-drawn boot logo, on the T-Display P4 as much as the Pager. The map's developer debug overlay switched on the same way, and a chat-history safety flush was silently disabled.
Independently found, byte-for-byte analysed, and fixed by @PixPMusic (#229, #230) — including compile-time guards that make this class of mistake a build error from now on, and a test suite over the migration paths. Affected devices repair themselves on this update: a normal install, no erase. On devices that ran beta_57, the repaired settings (web control panel, remote mode and its orientation, web terminal, map debug overlay, history-flush tuning) return to their defaults — the pre-beta_57 values were overwritten and cannot be recovered. Everything else, including your language, radio settings and per-chat history limits, is preserved. Devices coming straight from beta_56 or older upgrade losslessly.
Auto-retry is now opt-in
beta_57 turned "retry sends until heard" on for everyone. That choice should be yours: it now defaults off, and the toggle lives in Settings → Radio & Mesh if you want your sends retransmitted until the mesh confirms them.
Magyar
Hungarian translation across the full interface, contributed by @pisti87 (#227). Existing language choices are preserved across the update. Köszönjük!
Fixes
- The lock screen finally says WADAMESH. The old MESHCOMOD was baked into the wallpaper image itself rather than drawn as text, so the earlier branding fix missed it — both the built-in wallpaper and the copy seeded to storage are replaced. Reported by @smhawkes (#228).
- T-Display P4: profile export and backups work again. The backup writer still pointed at the storage system beta_54 retired, so every save failed with "can't open file" — the backup list and restore were equally affected. Reported by @D-Melhede (#231).
Both P4 panel variants are built fresh for this tag:
wadamesh-tdisplay-p4*(AMOLED) andwadamesh-tdisplay-p4-lcd*(TFT-LCD).Full notes:
release-notes/beta_58.txt.beta_57 # Pre-release 2 days ago · 2026-08-03 15:18 UTC
Test build. Stable stays beta_50.
Flash it from https://flasher.wadamesh.com (flip the Beta toggle), or on-device via Settings → Firmware with "Get test builds (beta)" enabled.
Most of this beta is contributed work: @PixPMusic (storage and Pager fixes) and @mikecarper (the new send retry). Thank you both.
Sends retry until the mesh has heard them
Until now a message was transmitted exactly once. If that single transmission collided with other traffic or a repeater was mid-hop, it was simply gone — the app showed it as sent, the mesh never saw it. Built by @mikecarper (#207): the device now listens for evidence its message went out (a repeater echoing it, or the delivery ACK) and retransmits on a growing backoff until something confirms it was heard — direct and flood sends alike, including sends from the phone app. If you prefer the old single-shot behaviour, there is a new toggle under Settings → Radio & Mesh → "Retry sends until heard" (on by default).
Saving settings on SD storage was broken
If your device stores data on the SD card (T-Deck, V4-R8, Pager, Launcher installs), every settings save has been failing with "Couldn't save name to storage" and quietly surviving only through a recovery file. The commit step renamed a file onto itself because both rename arguments shared one path buffer, so it could never succeed. Found and fixed by @PixPMusic (#211).
Two more storage fixes from the same series: watchdog state is now preserved around long SD/flash work instead of being blindly re-armed afterwards, which removes a cause of spurious watchdog reboots (#213), and preference reads no longer hand out pointers into a shared cache that another task could invalidate mid-read (#212).
Pager radio: the oscillator voltage was wrong
The SX1262 T-Lora Pager drove its radio oscillator at a generic 1.6 V fallback; LilyGo's own reference code uses 3.0 V for this exact board. The result was a weak link — transmissions nearby nodes missed, ACKs that never arrived. @PixPMusic confirmed on hardware that the voltage was the difference (#209).
Fixes
- Discover froze when a node name contains an emoji or a
#. The scanner list colours each row with text markup, and a name cut mid-emoji (or a stray hash) broke that markup for every row after it — the list looked frozen from that point on. Names are now cleaned and escaped before display, here and in the message-info repeat list. Reported by @4nuts with the exact culprit name, "Ouderkerk☀️" (#223). - Formatting an SD card on the V4-R8 or ThinkNode M9 hung forever. The Format button exists on both boards, but the code that performs the format was only compiled for the T-Deck — the "this can take up to a minute" notice stayed up with nothing running behind it, and the card stayed unusable until a reboot. Reported by @TrustYourTechnoLust (#172).
- Files-app Copy/Paste silently did nothing except on the T-Deck — same root cause as the format hang, fixed the same way.
Both P4 panel variants are built fresh for this tag:
wadamesh-tdisplay-p4*(AMOLED) andwadamesh-tdisplay-p4-lcd*(TFT-LCD).Full notes:
release-notes/beta_57.txt.- Discover froze when a node name contains an emoji or a
Device compatibility (2)
| Device | MCU | Radio | Status | Notes |
|---|---|---|---|---|
| LilyGo T-Deck | esp32-s3 | Semtech SX1262 | ✓ Supported | |
| Heltec V4 | esp32-s3 | Semtech SX1262 | ✓ Supported |