Repository navigation
Releases: genemichael/MeshGemini
Release list
Mesh Gemini v0.2.9 — hybrid phone milestone
Mesh Gemini v0.2.9 — hybrid phone milestone (pre-release)
T-Deck Plus hybrid communicator: MeshCore LoRa texting + Reticulum/LXMF
messaging and LXST voice over WiFi, in one launcher.
New in this release
- Native-8k call playback — call audio now bypasses the mixer's
resample path for the duration of a call (fixes RX garble); the mixer
is restored automatically at every call end, including abnormal ones. - Persistent conversations in the RNS app — messages survive
reboot; conversation rows appear even for peers that haven't
announced since boot; Address Book contact names (nicknames) always
take priority over broadcast names. - Status bar — WiFi / AutoInterface / TCP indicators
(green = up, amber = enabled but not up, grey = off); clock
decluttered to HH:MM.
Status
⚠ Pre-release: builds pass and bench flashing is done, but
on-device verification of the new call-audio path and persistence UI
is still in progress. Expect a follow-up release once testing completes.
Flashing (esp32s3, 460800 baud)
- Fresh install:
mesh-gemini-v0.2.9-merged.binat offset0x0 - Firmware-only update (keeps your data):
mesh-gemini-v0.2.9-firmware.binat0x10000 - Data image:
mesh-gemini-v0.2.9-littlefs.binat0x590000—
⚠ erases on-device user data (address book, messages; identities
stored in NVS survive) mesh-gemini-v0.2.9-test-firmware.bin: bench/test build with serial
test hooks (T:commands) enabled — for development usemesh-gemini-v0.2.9-launcher.bin: image for Launcher-based installs
License: GPL-3.0 (see COPYING / NOTICE). Built from hybrid-phone @ acaccb5.
Gemini v0.2.8-4 — first public release
Merged single-file images for the LilyGo T-Deck (Plus). Flash at offset 0x0 — see the README's Flashing section.
- gemini-release.bin — handout build: self-contained, apps embedded (self-extract on first boot), no debug harness, generates its own identity.
- gemini-test.bin — developer build: adds the T: serial harness (state, call control, identity export/import, no-wipe file push). Exposes the RNS private key over USB by design.
Both images audited: no builder-identifying strings, no credentials, no identities. Built reproducibly from c0b7b30.
Initial Release
Gemini hybrid phone — portable flash bundle
Flash a LilyGo T-Deck Plus from any machine (Raspberry Pi, laptop)
with no source repo. Built 2026-07-24 from branch hybrid-phone (v0.2.8-4-gc0b7b30,
reproducible from that commit). Chip: ESP32-S3, 16MB flash.
What's here
| File | What it is | Flash offset |
|---|---|---|
gemini-release.bin |
Handout build. No serial debug harness. Apps embedded in firmware, self-extract on first boot. Each device generates its own identity. | 0x0 (single file) |
gemini-test.bin |
Dev/support build. Full T: serial harness (state, calls, identity export/import, file-push). Includes filesystem. |
0x0 (single file) |
flash.sh |
One-command wrapper. | — |
Both are merged single-file images — everything (bootloader,
partition table, firmware, and for test the filesystem) is inside one
.bin flashed at offset 0x0. No offset juggling.
One-time setup on the Pi / Linux
python3 -m pip install --user esptool # or: sudo apt install esptool
sudo usermod -aG dialout "$USER" # serial access; then log out/inFind the port after plugging the device in (USB-C, powered on):
ls /dev/ttyACM* /dev/ttyUSB* 2>/dev/null # Linux/Pi — usually ttyACM0
# (macOS: ls /dev/cu.usbmodem*)Flash
chmod +x flash.sh # first time only
./flash.sh release /dev/ttyACM0 # handout device
./flash.sh test /dev/ttyACM0 # your own device (with debug harness)release erases the chip first (clean, identity-free), then flashes;
first boot unpacks apps for a few minutes (don't power off), then
generates fresh RNS + MeshCore identities. Configure over the on-screen
UI (Wireless app for WiFi, Settings > Names).
test flashes directly (its image carries the filesystem).
Manual command (if you skip the script)
python3 -m esptool --chip esp32s3 --port /dev/ttyACM0 --baud 460800 \
write_flash 0x0 gemini-release.binFor a handout device, run ... erase_flash first. Newer esptool (v5+)
prefers write-flash/erase-flash (hyphens) but still accepts the
underscore forms with a warning.
Notes
releasehas noT:serial commands — no way to export/import an
identity or push Lua over serial. That's deliberate (a handout device
shouldn't leak its private key over USB). Updating it means reflashing.testexposes the identity over serial (T:IDEXPORT). Fine for
your own devices; do not hand one out expecting the key to be private.- If flashing fails to connect, hold BOOT, tap RST, release BOOT
to force download mode, then retry. - These images do not include your identity or WiFi — each device
starts fresh. To migrate a specific RNS identity onto atestdevice,
useT:IDEXPORTon the source andT:IDIMPORT <hex>on the target
over a serial monitor (115200 baud), then reboot.
What's new in the 2026-07-24 images
-
WiFi modem sleep disabled (reliable RNS traffic; BLE is force-locked
OFF to keep this legal — toggle visible but disabled in Settings). -
AutoInterface: link-local rebind fix (no more permanent errno=118
wedge) +T:AUTO on|off(test build) to disable it entirely on
congested networks. Default remains ON for fresh devices. -
TCP interface: INFO-level logging (failures are now visible),
forced reconnect on host/port resave. -
RNS identity tools (test build):
T:IDEXPORT/T:IDIMPORT/
T:IDNEW. EXPORT AND SAVE THE KEY on every new device — an
accidental erase_flash otherwise loses the persona permanently. -
Settings > RNS now has an AutoInterface on/off toggle (all builds),
so release devices on congested networks can go TCP-only from the
UI. Reboot to apply.