{
  "id": "meshpunk",
  "name": "MeshPunk",
  "type": "fork",
  "maintainer": "PhilMo6",
  "description": "LVGL + Lua handheld firmware for the LilyGo T-Deck with full MeshCore support. Features offline OpenStreetMap tiles with mesh contact overlays and meshprint sender triangulation, themes, games (Doom, PICO-8, Flappy Bird, Snake, Scorched Earth), SD-card storage, WiFi, BLE, and GPS time sync.",
  "repository": "https://github.com/PhilMo6/meshpunk",
  "license": "MIT",
  "status": "active",
  "scope": "device-specific",
  "lifecycle": "active",
  "maturity": "alpha",
  "distribution": "community",
  "lineage": {
    "kind": "fork",
    "upstreamFirmwareId": "meshcore",
    "upstreamRepository": "https://github.com/meshcore-dev/MeshCore"
  },
  "runtime": {
    "framework": "arduino",
    "language": "cpp"
  },
  "roles": [
    "companion",
    "repeater",
    "room-server",
    "standalone-ui"
  ],
  "features": [
    "LVGL + Lua app framework",
    "Offline map with tile caching and meshprint triangulation",
    "Themes and custom UI styling",
    "Games (Doom, PICO-8, Flappy Bird, Snake, Scorched Earth)",
    "SD-card persistence for mesh and firmware settings",
    "BLE and WiFi companion connectivity",
    "GPS time sync",
    "Launcher-compatible build",
    "MeshCore protocol compatible"
  ],
  "capabilities": {
    "protocol": {
      "meshcoreCompatible": true
    },
    "transports": {
      "ble": true,
      "usbSerial": true,
      "nativeTcp": true,
      "wifiAp": true
    },
    "operations": {
      "ota": false,
      "webFlasher": true
    },
    "networking": {
      "repeater": true,
      "roomServer": true,
      "observer": false,
      "kissModem": false
    },
    "hardware": {
      "gps": true,
      "display": true,
      "sensors": false,
      "lowPowerRx": false
    }
  },
  "devices": [
    {
      "id": "lilygo-t-deck",
      "status": "supported",
      "notes": "Primary target device. Use -merged.bin for first install, -firmware.bin for updates, or -launcher.bin with bmorcelli's Launcher."
    }
  ],
  "popularity": {
    "githubStars": 13,
    "githubForks": 0,
    "githubWatchers": 0,
    "githubOpenIssues": 0,
    "githubContributors": 3,
    "releaseDownloads": 321,
    "latestReleaseDownloads": 2,
    "lastChecked": "2026-07-21"
  },
  "verification": {
    "sourceAvailable": true,
    "releasesAvailable": true,
    "ciBuilds": false,
    "lastChecked": "2026-07-21"
  },
  "source": {
    "path": "data/firmwares/meshpunk/firmware.yaml",
    "updatedAt": "2026-07-21T08:04:18Z"
  },
  "latest_version": "0.2.8",
  "released": "2026-07-21",
  "releases": [
    {
      "version": "v0.2.8",
      "name": "v0.2.8 alpha USB drive emulation",
      "datetime": "2026-07-21T01:58:13Z",
      "url": "https://github.com/PhilMo6/meshpunk/releases/tag/v0.2.8",
      "prerelease": false,
      "notes": "added usb drive emulation so you can access your sd card by plugging the tdeck into a pc with a usb cable.\r\nalso renamed USB app to USB Host.",
      "notesHtml": "<p>added usb drive emulation so you can access your sd card by plugging the tdeck into a pc with a usb cable.\nalso renamed USB app to USB Host.</p>\n"
    },
    {
      "version": "v0.2.7",
      "name": "v0.2.7 usb drivers!",
      "datetime": "2026-07-20T06:06:35Z",
      "url": "https://github.com/PhilMo6/meshpunk/releases/tag/v0.2.7",
      "prerelease": false,
      "notes": "Usb drivers are now separate from the main firmware and apps that need that automatically download them when needed.\r\nGamepads and now supported and their drivers are downloaded with the Gamepad app found in the games category.\r\nThe Gameboy emulator now includes a tdeck driver to allow device to device usb connection.\r\nThe Gameboy emulator can now emulate a link cable connection via usb c cable to allow for 2 player link cable games!\r\nA readme app is now included that gives details on how to use the firmware.",
      "notesHtml": "<p>Usb drivers are now separate from the main firmware and apps that need that automatically download them when needed.\nGamepads and now supported and their drivers are downloaded with the Gamepad app found in the games category.\nThe Gameboy emulator now includes a tdeck driver to allow device to device usb connection.\nThe Gameboy emulator can now emulate a link cable connection via usb c cable to allow for 2 player link cable games!\nA readme app is now included that gives details on how to use the firmware.</p>\n"
    },
    {
      "version": "v0.2.6",
      "name": "v0.2.6 alpha fonts update",
      "datetime": "2026-07-14T02:01:18Z",
      "url": "https://github.com/PhilMo6/meshpunk/releases/tag/v0.2.6",
      "prerelease": false,
      "notes": "you can now add your own fonts!\r\nthemes can have internal fonts as well.\r\nsmall gps improvements\r\nmap memory fragmentation fixes",
      "notesHtml": "<p>you can now add your own fonts!\nthemes can have internal fonts as well.\nsmall gps improvements\nmap memory fragmentation fixes</p>\n"
    },
    {
      "version": "v0.2.5",
      "name": "v0.2.5 alpha App library update",
      "datetime": "2026-07-12T16:13:08Z",
      "url": "https://github.com/PhilMo6/meshpunk/releases/tag/v0.2.5",
      "prerelease": false,
      "notes": "This update focused on separating the app development from the firmware dev.\r\nOnly system apps live with the firmware now and other apps are found in the app library.\r\nhttps://github.com/PhilMo6/meshpunk-apps\r\nThe app library app can be used with wifi to download apps onto your tdeck or the sd card. the sd card is recommended since the filesystem gets erased on firmware flashing.\r\nOnly the system apps are pre installed so you will have to redownload any others you want.\r\nThemes are also downloadable from the themes settings but the preinstalled ones are all still included.\r\nThe BLE implementation was rewritten to better work with the android app.\r\nUSB keyboard and USB thumb drive support with the correct 2 in 1 powered OTG y splitter cable \r\nAlso includes a some error fixes and a security fix.",
      "notesHtml": "<p>This update focused on separating the app development from the firmware dev.\nOnly system apps live with the firmware now and other apps are found in the app library.\n<a href=\"https://github.com/PhilMo6/meshpunk-apps\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/PhilMo6/meshpunk-apps</a>\nThe app library app can be used with wifi to download apps onto your tdeck or the sd card. the sd card is recommended since the filesystem gets erased on firmware flashing.\nOnly the system apps are pre installed so you will have to redownload any others you want.\nThemes are also downloadable from the themes settings but the preinstalled ones are all still included.\nThe BLE implementation was rewritten to better work with the android app.\nUSB keyboard and USB thumb drive support with the correct 2 in 1 powered OTG y splitter cable \nAlso includes a some error fixes and a security fix.</p>\n"
    },
    {
      "version": "v0.2.4",
      "name": "v0.2.4 alpha",
      "datetime": "2026-07-09T23:35:03Z",
      "url": "https://github.com/PhilMo6/meshpunk/releases/tag/v0.2.4",
      "prerelease": false,
      "notes": "PC-XT DOS emulator: boots real DOS from .img disks in /dos on SD, or mounts a folder of games as the C: drive\r\nMP3 music player: plays from /Music on SD, tag-based library, playlists, keeps playing in the background\r\nDoom now has music, and the sound effect static is finally fixed\r\nFull emoji support: type emojis with the alt key layer, downloadable extended set\r\nRooms and repeaters: log in, sync missed messages, admin console\r\nFile manager for internal flash and SD (Tools > Files)\r\nUSB host audio: route all sound to a USB-C audio dongle (needs external y adaptor with power)",
      "notesHtml": "<p>PC-XT DOS emulator: boots real DOS from .img disks in /dos on SD, or mounts a folder of games as the C: drive\nMP3 music player: plays from /Music on SD, tag-based library, playlists, keeps playing in the background\nDoom now has music, and the sound effect static is finally fixed\nFull emoji support: type emojis with the alt key layer, downloadable extended set\nRooms and repeaters: log in, sync missed messages, admin console\nFile manager for internal flash and SD (Tools &gt; Files)\nUSB host audio: route all sound to a USB-C audio dongle (needs external y adaptor with power)</p>\n"
    },
    {
      "version": "v0.2.3",
      "name": "v0.2.3 alpha",
      "datetime": "2026-07-04T04:19:16Z",
      "url": "https://github.com/PhilMo6/meshpunk/releases/tag/v0.2.3",
      "prerelease": false,
      "notes": "Gameboy emulator! put your roms on the sd card and you should be good to play!\r\nAdded a new file manager to tools.\r\nArchived contacts have better management but also have a compaction function you can run if it has repeats for some reason.\r\nAlso did general fixes and hardening.",
      "notesHtml": "<p>Gameboy emulator! put your roms on the sd card and you should be good to play!\nAdded a new file manager to tools.\nArchived contacts have better management but also have a compaction function you can run if it has repeats for some reason.\nAlso did general fixes and hardening.</p>\n"
    },
    {
      "version": "v0.2.2",
      "name": "v0.2.2 alpha",
      "datetime": "2026-07-02T20:56:52Z",
      "url": "https://github.com/PhilMo6/meshpunk/releases/tag/v0.2.2",
      "prerelease": false,
      "notes": "This release focused on memory fragmentation fixes and getting the launcher.bin to actually work!\r\nThe filesystem is now packed and included in the firmware. it is then unpacked and added on the first launch. if any updates are needed to the filesystem it will update based on the tag version being installed. \r\nNotifications are now on the c side so they work when lua is shut down and an elf app is running.\r\nChannel notifications are now set per channel in the notification settings. they can be set to mentions only, all, or off.\r\nThemes have been improved with 4 new themes as well as additional theme settings.",
      "notesHtml": "<p>This release focused on memory fragmentation fixes and getting the launcher.bin to actually work!\nThe filesystem is now packed and included in the firmware. it is then unpacked and added on the first launch. if any updates are needed to the filesystem it will update based on the tag version being installed. \nNotifications are now on the c side so they work when lua is shut down and an elf app is running.\nChannel notifications are now set per channel in the notification settings. they can be set to mentions only, all, or off.\nThemes have been improved with 4 new themes as well as additional theme settings.</p>\n"
    },
    {
      "version": "v0.2.0",
      "name": "v0.2.0 alpha",
      "datetime": "2026-06-26T00:21:28Z",
      "url": "https://github.com/PhilMo6/meshpunk/releases/tag/v0.2.0",
      "prerelease": false,
      "notes": "Theme update!\r\nThemes have been added. They are ether a flat name.lua file or a folder with a theme.lua.\r\nCan be loaded from the filesystem or the sd card.\r\n10 themes are included.\r\n2 player local Scorched earth! Wind has also been added to the game to make it more interesting.",
      "notesHtml": "<p>Theme update!\nThemes have been added. They are ether a flat name.lua file or a folder with a theme.lua.\nCan be loaded from the filesystem or the sd card.\n10 themes are included.\n2 player local Scorched earth! Wind has also been added to the game to make it more interesting.</p>\n"
    },
    {
      "version": "v0.1.9",
      "name": "v0.1.9 alpha",
      "datetime": "2026-06-25T03:29:25Z",
      "url": "https://github.com/PhilMo6/meshpunk/releases/tag/v0.1.9",
      "prerelease": false,
      "notes": "This update is a fix for the map apps tile downloader.\r\nMost of the tile downloading task has been moved to psram freeing the TLS handshake to happen on the sram.",
      "notesHtml": "<p>This update is a fix for the map apps tile downloader.\nMost of the tile downloading task has been moved to psram freeing the TLS handshake to happen on the sram.</p>\n"
    },
    {
      "version": "v0.1.8",
      "name": "v0.1.8 alpha",
      "datetime": "2026-06-25T01:33:43Z",
      "url": "https://github.com/PhilMo6/meshpunk/releases/tag/v0.1.8",
      "prerelease": false,
      "notes": "MeshPunk v0.1.8\r\nChanges since v0.1.6\r\n\r\nA big release focused on MeshCore feature completion, a new app/storage architecture, and the Map app's meshprint triangulation.\r\n\r\nHighlights\r\nMeshprint sender triangulation (Map app) — With enough mesh data, run a meshprint on a message's sender to capture their first- and second-hop repeaters and triangulate the sender's approximate location. The more data you have, the better the result.\r\nFuller MeshCore support — Added region support, auto-add contact settings, and an auto-add max hops setting, bringing the device closer to feature parity with the MeshCore companion apps.\r\nApp manager — All apps now launch and close through a central app manager. Apps register their timers so they always tear down cleanly, fixing a class of leaks and stale-timer crashes.\r\nNew file storage system — Messages now persist as binary files that prune based on age (days) rather than message count, with GPS-seeded timestamps.\r\n\r\nMessenger\r\nMajor messenger overhaul: chat-bubble UI and the remaining MeshCore-related settings.\r\nTrackball/keyboard navigation now works consistently everywhere in the app.\r\nAdded a ? help button explaining how to use q to back out of selected areas.\r\nHardened teardown and fixed a small public-channel UI issue.\r\nMap\r\nMeshprint triangulation (see Highlights).\r\nFixed a map memory leak.\r\nAdded an archive-contact cycle button for stepping through archived contacts that don't all fit on screen at once.\r\nChannels\r\nPublic is now a normal channel — it was previously a non-removable special case. It can now be removed and re-added just like any other channel.\r\nNavigation\r\nReplaced the old gridnav logic with a dedicated nav.lua navigation layer; messenger and all settings pages updated to use it for more reliable trackball/WASD focus handling.\r\nPICO-8\r\nFixed a Lua interpreter bug that mis-evaluated certain values, causing rare random glitches.\r\nPerformance optimizations for heavy carts.\r\nUnder the hood / fixes\r\nLarge Lua files now stream to the loader in chunks instead of being read into one big string first — files of any size load correctly.\r\nSLog logger added to stop serial prints from stepping on each other.\r\nGC hardening to reduce memory pressure during app lifecycle.\r\nFixed a build bug where the custom partition/allocation file was ignored because it shared a name with a framework default (renamed to meshpunk_custom_16Mb.csv).",
      "notesHtml": "<p>MeshPunk v0.1.8\nChanges since v0.1.6</p>\n<p>A big release focused on MeshCore feature completion, a new app/storage architecture, and the Map app's meshprint triangulation.</p>\n<p>Highlights\nMeshprint sender triangulation (Map app) — With enough mesh data, run a meshprint on a message's sender to capture their first- and second-hop repeaters and triangulate the sender's approximate location. The more data you have, the better the result.\nFuller MeshCore support — Added region support, auto-add contact settings, and an auto-add max hops setting, bringing the device closer to feature parity with the MeshCore companion apps.\nApp manager — All apps now launch and close through a central app manager. Apps register their timers so they always tear down cleanly, fixing a class of leaks and stale-timer crashes.\nNew file storage system — Messages now persist as binary files that prune based on age (days) rather than message count, with GPS-seeded timestamps.</p>\n<p>Messenger\nMajor messenger overhaul: chat-bubble UI and the remaining MeshCore-related settings.\nTrackball/keyboard navigation now works consistently everywhere in the app.\nAdded a ? help button explaining how to use q to back out of selected areas.\nHardened teardown and fixed a small public-channel UI issue.\nMap\nMeshprint triangulation (see Highlights).\nFixed a map memory leak.\nAdded an archive-contact cycle button for stepping through archived contacts that don't all fit on screen at once.\nChannels\nPublic is now a normal channel — it was previously a non-removable special case. It can now be removed and re-added just like any other channel.\nNavigation\nReplaced the old gridnav logic with a dedicated nav.lua navigation layer; messenger and all settings pages updated to use it for more reliable trackball/WASD focus handling.\nPICO-8\nFixed a Lua interpreter bug that mis-evaluated certain values, causing rare random glitches.\nPerformance optimizations for heavy carts.\nUnder the hood / fixes\nLarge Lua files now stream to the loader in chunks instead of being read into one big string first — files of any size load correctly.\nSLog logger added to stop serial prints from stepping on each other.\nGC hardening to reduce memory pressure during app lifecycle.\nFixed a build bug where the custom partition/allocation file was ignored because it shared a name with a framework default (renamed to meshpunk_custom_16Mb.csv).</p>\n"
    },
    {
      "version": "v0.1.6",
      "name": "v0.1.6 alpha Pico8 emulator",
      "datetime": "2026-06-13T04:29:59Z",
      "url": "https://github.com/PhilMo6/meshpunk/releases/tag/v0.1.6",
      "prerelease": false,
      "notes": "This release has a bunch of map improvements including faster sd card load times!\r\nAdded a message path animation as well as a replay for older messages\r\n\r\nPico8 emulator! a modified version of the fake08 Pico8 emulator it should run any pico8 .p8 or .png cart.",
      "notesHtml": "<p>This release has a bunch of map improvements including faster sd card load times!\nAdded a message path animation as well as a replay for older messages</p>\n<p>Pico8 emulator! a modified version of the fake08 Pico8 emulator it should run any pico8 .p8 or .png cart.</p>\n"
    },
    {
      "version": "v0.1.5",
      "name": "v0.1.5 alpha Map release",
      "datetime": "2026-06-09T05:25:43Z",
      "url": "https://github.com/PhilMo6/meshpunk/releases/tag/v0.1.5",
      "prerelease": false,
      "notes": "This release has several elf loader fixes to allow for loading larger files.\r\nThe major update is the map app! Only shows contacts ands lets you select a contact for basic info for now. \r\nMaps must be downloaded via wifi and requires a SD card.\r\nThey can be pre-cached with the download button which will download all map tiles within the selected area.\r\nNavigation improvements! \r\nWASD are now usable for navigation.\r\nTrackball sensitivity settings in the device settings.",
      "notesHtml": "<p>This release has several elf loader fixes to allow for loading larger files.\nThe major update is the map app! Only shows contacts ands lets you select a contact for basic info for now. \nMaps must be downloaded via wifi and requires a SD card.\nThey can be pre-cached with the download button which will download all map tiles within the selected area.\nNavigation improvements! \nWASD are now usable for navigation.\nTrackball sensitivity settings in the device settings.</p>\n"
    },
    {
      "version": "v0.1.4",
      "name": "v0.1.4 alpha",
      "datetime": "2026-06-07T00:31:09Z",
      "url": "https://github.com/PhilMo6/meshpunk/releases/tag/v0.1.4",
      "prerelease": false,
      "notes": "First release",
      "notesHtml": "<p>First release</p>\n"
    }
  ],
  "changelogSource": "github",
  "changelogUpdatedAt": "2026-07-21T02:51:53.726Z",
  "deviceFamilies": [
    {
      "id": "lilygo-t-deck",
      "label": "LilyGo T-Deck"
    }
  ],
  "primaryFamily": {
    "id": "lilygo-t-deck",
    "label": "LilyGo T-Deck"
  },
  "scopeGroup": "LilyGo T-Deck"
}
