Repository navigation
Releases
v0.2.1: both halves build from this repo
Both halves from one tree. The GEEK companion firmware now lives in this repo under dongle/ (GPL-3.0 like the rest), and scripts/build_release.sh builds the T-Deck and the dongle together. The firmware itself is the same as v0.2.0 on both boards; this release exists so the dongle image is built from source anyone can clone.
T-Deck Plus: flash tdeck-plus-v0.2.1-merged.bin at 0x0 (scripts/flash.sh, or esptool). The -app.bin is app-only (0x10000) for Launcher/OTA.
GEEK dongle (Waveshare ESP32-S3-GEEK): hold BOOT while plugging it in, then flash tdeck-dongle-v0.2.1.bin at 0x0:
uvx esptool --chip esp32s3 write-flash 0x0 tdeck-dongle-v0.2.1.bin
It is a factory image, so the GEEK comes up in pairing mode; pair it from the T-Deck's Keyboard app. A GEEK already running the dongle can be reflashed without losing the pairing with dongle/tools/geekflash.py.
From a browser: tdeck-plus-v0.2.1-manifest.json and tdeck-dongle-v0.2.1-manifest.json are ESP Web Tools manifests. Host each next to its image on a web site (GitHub release downloads cannot be fetched cross-site) and give it an <esp-web-install-button>; Chrome or Edge on a computer.
Checksums are in the two .sha256 files. Link protocol version 2 on both ends.
Since v0.2.0: the dongle source, board support and tools moved into dongle/ (#192), README leads with the two boards and has a Flash the GEEK section (#190).
v0.2.0: first release verified on hardware
First release that has run on hardware: in daily use on a T-Deck Plus since 2026-10-22, with channel text, direct messages, relaying and map tiles confirmed against stock Meshtastic nodes.
Flash: tdeck-plus-v0.2.0-merged.bin at 0x0 (scripts/flash.sh, or esptool). The -app.bin is app-only (0x10000) for Launcher/OTA. tdeck-plus-v0.2.0-manifest.json is an ESP Web Tools manifest: host it beside the merged image on a web site to flash from Chrome or Edge (GitHub release downloads cannot be fetched cross-site, so copy both files to the site). Checksums in the .sha256.
Dongle (Waveshare ESP32-S3-GEEK): tdeck-dongle-2808d40.bin is the dongle firmware built from ESP-Geek main at 2808d40 (2026-10-26, link version 2, lock-when-away included). Flash it at 0x0 with the GEEK held in the bootloader (BOOT pressed while plugging it in): esptool --chip esp32s3 write-flash 0x0 tdeck-dongle-2808d40.bin, or host tdeck-dongle-2808d40-manifest.json beside it for a browser install button. It is a factory image, so the GEEK comes up in pairing mode. Source: ESP-Geek firmware/tdeck-dongle.
Since v0.1.0 (every merged pull request, newest first):
- Release: an ESP Web Tools manifest beside the merged image (#188)
- License the firmware under GPL-3.0 (#185)
- README: ready for a public repo, built around the T-Deck Plus and the GEEK dongle (#183)
- Remove the T-Deck Pro code; it lives in lilygo-A7682E (#182)
- T-Deck Pro keyboard and touch input (OS milestone 2) (#178)
- T-Deck Pro e-paper driver and display task (OS milestone 1) (#175)
- Board layer for the Plus and Pro, and a T-Deck Pro bring-up env (#172)
- Keyboard: Lock when away setting and a Lock button, lock shortcut in Settings (#171)
- Link: lock-when-away is a T-Deck setting sent to the dongle as LINK_LOCK_CFG (#169)
- Link: BYE before going quiet on purpose, LOCK to have the dongle lock the computer (#167)
- dongle/ is a pointer to ESP-Geek's firmware/tdeck-dongle (#165)
- Keyboard: Forget joins the Pair and Sync row so nothing sits below the fold (#164)
- Lock: taps are not activity, a hint when locked, no auto-lock while typing to a computer (#162)
- Console: tap presses the screen at a pixel (#160)
- Typing screen: Clear button instead of Close (#158)
- Keyboard: a caret editor on the typing screen, tap to place it, Close button (#156)
- Keyboard: cleaner setup page with a big Start typing button (#154)
- Link: let WiFi modem-sleep while Bluetooth is up (#152)
- Map: visible coverage outline, info line that fits (#150)
- Map: a breadcrumb trail for nodes that move (#148)
- Map: show where the tiles are (#146)
- Sound: a distinct DM ring and a tone volume setting (#144)
- Keyboard mouse: send clicks at once, drag by press and hold (#142)
- Chat: start a DM from a node picker in Chat (#140)
- Map: pull tiles from the GEEK's card (#137)
- Docs: screenshots of both devices, a write-up, and a prompt for the website (#135)
- Dongle link: recover after the WiFi or Spectrum app turns WiFi off (#133)
- Dongle: capture the GEEK's screen over serial (#131)
- Link: counter in PING, TAP and MOUSE so the dongle rejects replays (#128)
- Mesh relay: forward a bounded backlog when the dongle comes back (#127)
- Keyboard mouse: double-click toggles scroll mode instead of hold-and-roll (#126)
- Keyboard mouse: fine movement when slow, hold-and-roll scrolls, press twice and hold drags (#124)
- Keyboard: mouse gain doubled again (#122)
- Keyboard app: ignore the touch screen, stop typing with a 3 s trackball hold (#121)
- Dongle: its own USB name and product id, and a no-touch reflash (#118)
- Keyboard: mouse gain four times higher and tied to the trackball speed setting (#117)
- Keyboard: in mouse mode the trackball hold drags; tap the screen to stop typing (#115)
- To-do: a line deleted on the computer stays deleted (#114)
- Pushed files carry local time on the GEEK's card (#113)
- Screen lock: keys do nothing while the screen is off, trackball hold locks and unlocks (#112)
- Chat: a short tone on a new message, with a Settings switch (#110)
- Notes: move notes left in flash onto the card (#109)
- Files: list internal flash when there is no SD card (#108)
- Compass: keep the trip across reboots and smooth the heading (#107)
- Audio: queued tones fed from the main loop instead of a blocking beep (#105)
- Music: find the track again after a rescan, log every early return, clock by the real rate (#104)
- Labels: launcher tiles, chat title and WiFi rows in the proportional font (#103)
- To-do: merge the card and flash copies of the list (#101)
- Console: ls and cat for the SD card and internal flash (#100)
- main builds and matches the tested union of the merged stack (#97)
- Display: latch the panel's SPI mode before selecting it, drop the cover repaint (#95)
- To-do: no header band, sync problems as toasts (#93)
- Notes: no header band above the list (#92)
- Notes editor built like the Keyboard typing screen (#89)
- Repaint the screen shortly after an app opens (#88)
- About: fit the screen in the theme's font (#85)
- Settings: rows and fields in the proportional font (#84)
- Lists: wrap rows in the proportional font instead of scrolling (#81)
- Node detail: left/right across the buttons, text that fits (#78)
- Chat: wider bubbles in the proportional font (#77)
- GPS page: fit the screen in the theme's font (#76)
- Music app: MP3 player on the speaker, playlists as folders, sync from the GEEK (#71)
- Compass app: heading-up rose, trip counter and a way-back waypoint (#68)
- Timer app: stopwatch and countdown with the speaker (#65)
- To-do app synced with the computer through the GEEK's card (#62)
- Files app: the GEEK's TF card as a shared drive (#58)
- Mesh relay and notes sync over the dongle link (#56)
- Ideas for using the GEEK and the T-Deck together (#52)
- GEEK dongle build with status on its screen (#50)
- USB keyboard dongle firmware for ESP32-S3/S2 (#46)
- Keyboard app: Bluetooth HID and USB dongle link (#45)
- Scroll long app names on launcher tiles (#44)
- Trackball picks options in an open dropdown (#43)
- Spectrum app: LoRa, WiFi and BLE waterfalls (#38)
- cmatrix-style theme with digital-rain splash (#36)
- Four-way grid navigation on the launcher (#35)
- Trackball speed setting, step threshold and rate limit (#34)
- Wait out Arduino's early WiFi scan timeout (#33)
- Give chat text labels a measured width (#28)
v0.1.0
First flashable build. Not yet run on hardware. See "Not verified yet" in the README.
Flash: tdeck-plus-v0.1.0-merged.bin at 0x0 (scripts/flash.sh). The -app.bin is app-only (0x10000) for Launcher/OTA.
Checked before release:
- Host tests: frequency slot 906.875 MHz, channel hash 0x08, nonce/header/protobuf, AES-CTR vs OpenSSL.
- X25519 vs OpenSSL, plus the PKI round trip.
- QEMU boot: no panic in 45 s.