{
  "_note": "Firmware catalog for the badge site. All hosted builds are served same-origin from firmware/ (browsers CORS-block raw github fetches). Entries with builds[] empty are flashed via their release page + FLASH LOCAL .BIN.",
  "firmware": [
    {
      "id": "launcher",
      "mark": "=^..^=",
      "name": "Badge Launcher v2 \"Touch\"",
      "ver": "v2.0.0",
      "desc": "The flagship badge experience. One flash + one FAT micro-SD = pick-what-you-run: two touch mesh messengers (MeshCore + Meshtastic MUI), classic Meshtastic, a Reticulum RNode, an NES emulator with 37 homebrew games, and WLEDkitty — switchable from an on-badge menu in ~10 s.",
      "buildsLine": "1 image, flashable here — then add a FAT micro-SD with the app pack from the release",
      "docs": "https://github.com/RetiaLLC/badge-launcher",
      "src": "https://github.com/RetiaLLC/badge-launcher",
      "page": "https://github.com/RetiaLLC/badge-launcher/releases/tag/v2.0.0",
      "note": "Hold UP at reset to get back to the launcher from any guest. Nine lives, one badge.",
      "builds": [
        {
          "file": "launcher-v2.factory.bin",
          "label": "the launcher firmware — after flashing, add a FAT micro-SD (unzip sd-card-apps-v2 from the release)",
          "url": "firmware/launcher-v2.factory.bin",
          "addr": 0,
          "sha256": "1636737737c3fefed8c8d1affcf87409a24f62c846de5d3c7df7756b4fc5522e"
        }
      ]
    },
    {
      "id": "doom",
      "logo": "assets/logo-doom.jpg",
      "name": "DOOM",
      "ver": "prboom 2.5.0",
      "desc": "The 1993 classic, natively, full speed — 320x240 fullscreen, shareware WAD memory-mapped out of flash. D-pad moves, A fires, BOOT switches weapons. Audio build plays SFX through the piezo.",
      "buildsLine": "2 builds: audio · silent",
      "docs": "https://github.com/RetiaLLC/DefconBadge2026/tree/main/firmware/doom",
      "src": "https://github.com/RetiaLLC/DefconBadge2026/tree/main/firmware/doom",
      "builds": [
        {
          "file": "doom-audio.factory.bin",
          "label": "SFX through the piezo — gloriously PC-speaker",
          "url": "firmware/doom-audio.factory.bin",
          "addr": 0,
          "sha256": "0a84d246044c24d866ece79271797666fd573c09f7395b31b03726057826e05d"
        },
        {
          "file": "doom-silent.factory.bin",
          "label": "mute — same game otherwise",
          "url": "firmware/doom-silent.factory.bin",
          "addr": 0,
          "sha256": "f605b313fa495d872610a719c8a7aa69801de2dfd86f976ea7f63c50e1890802"
        }
      ]
    },
    {
      "id": "anemoia",
      "logo": "assets/logo-anemoia.png",
      "name": "Anemoia NES",
      "ver": "v1.0.0",
      "desc": "A full NES emulator: drop .nes ROMs on the micro-SD, browse and launch on-badge, play with D-pad + A/B. Save states, chiptune audio through the piezo, curated legally-free homebrew library.",
      "buildsLine": "1 badge factory image — needs a FAT micro-SD with .nes ROMs",
      "docs": "https://github.com/RetiaLLC/Anemoia-DefconBadge",
      "src": "https://github.com/RetiaLLC/Anemoia-DefconBadge",
      "page": "https://github.com/RetiaLLC/Anemoia-DefconBadge/releases/latest",
      "note": "ROMs: https://github.com/RetiaLLC/Anemoia-DefconBadge/blob/main/GAMES.md",
      "builds": [
        {
          "file": "anemoia-badge-factory.bin",
          "label": "the NES emulator — after flashing, add a FAT micro-SD with .nes ROMs (see GAMES.md)",
          "url": "firmware/anemoia-badge-factory.bin",
          "addr": 0,
          "sha256": "47f09ac38a2437d5a2d0c109ce6a4bc680592decd52fccad706a9977ce985122"
        }
      ]
    },
    {
      "id": "meshtastic",
      "logo": "assets/logo-meshtastic.svg",
      "name": "Meshtastic",
      "ver": "2.7.23",
      "desc": "Off-grid LoRa mesh messaging with phone app support. Standard, power-tuned (-39% idle), and experimental full color touch UI (MUI) builds. Set your region before use: meshtastic --set lora.region US",
      "buildsLine": "3 builds: standard · lowpower · mui-touch",
      "docs": "https://github.com/RetiaLLC/DefconBadge2026/tree/main/firmware/meshtastic",
      "src": "https://github.com/RetiaLLC/DefconBadge2026/tree/main/firmware/meshtastic",
      "note": "ANTENNA FIRST. Never TX on LoRa without a 915 MHz antenna attached.",
      "builds": [
        {
          "file": "meshtastic-2.7.23-standard.factory.bin",
          "label": "stock behavior, classic button-driven TFT UI",
          "url": "firmware/meshtastic-2.7.23-standard.factory.bin",
          "addr": 0,
          "sha256": "334d151eb1a8c50b293546200d34a7940d942ac458eda6ddbdd324ac32461237"
        },
        {
          "file": "meshtastic-2.7.23-lowpower.factory.bin",
          "label": "daily driver — idle draw cut ~39%, B = back",
          "url": "firmware/meshtastic-2.7.23-lowpower.factory.bin",
          "addr": 0,
          "sha256": "e6ba517ece92f18686784a8a74d48bcc6246bc425e180258cee545826215657c"
        },
        {
          "file": "meshtastic-2.7.23-mui-touch.factory.bin",
          "label": "color touch UI, on-screen keyboard (BLE off, phone via WiFi/TCP)",
          "url": "firmware/meshtastic-2.7.23-mui-touch.factory.bin",
          "addr": 0,
          "sha256": "7a9ec6769b7fa94574a272b849b576f867ab6678c3b79e10d8db6db14b3ad7ef"
        }
      ]
    },
    {
      "id": "meshcore",
      "logo": "assets/logo-meshcore.png",
      "name": "MeshCore",
      "ver": "v1.16.0",
      "desc": "The badge as a MeshCore LoRa mesh node — the flagship build is a standalone touchscreen mesh communicator (chats, contacts, channels, on-screen keyboard, RF monitor + spectrum analyzer) that is simultaneously a BLE companion for the phone app.",
      "buildsLine": "3 builds: touch-messenger · companion-ble · companion-usb",
      "docs": "https://github.com/RetiaLLC/DefconBadge2026/tree/main/firmware/meshcore",
      "src": "https://github.com/RetiaLLC/MeshCore/tree/retia-badge",
      "note": "Factory images, not launcher SD guests — flash over USB. Hold UP at reset to return to the launcher.",
      "builds": [
        {
          "file": "meshcore-touch-messenger.factory.bin",
          "label": "the one to use — full touchscreen mesh communicator",
          "url": "firmware/meshcore-touch-messenger.factory.bin",
          "addr": 0,
          "sha256": "00982545e5dda4db198dfe4d7f21af2eca1dadb487278dcf407c415af373e83c"
        },
        {
          "file": "meshcore-companion-ble.factory.bin",
          "label": "radio for the MeshCore phone app (BLE)",
          "url": "firmware/meshcore-companion-ble.factory.bin",
          "addr": 0,
          "sha256": "691405a6157cd4561873c8d2887c72c2e6fbdcea0567b7d36c3af1603574a0d0"
        },
        {
          "file": "meshcore-companion-usb.factory.bin",
          "label": "companion over USB serial for meshcore-cli / web client",
          "url": "firmware/meshcore-companion-usb.factory.bin",
          "addr": 0,
          "sha256": "48424db06e2b707500c31963c259c49647632ee8d1d7975973203e30d3228af9"
        }
      ]
    },
    {
      "id": "reticulum",
      "logo": "assets/logo-reticulum.png",
      "name": "Reticulum / RNode",
      "ver": "v1.85",
      "desc": "Turns the badge into an RNode: a host-controlled 915 MHz LoRa transceiver for the Reticulum network stack (NomadNet, Sideband, MeshChat). TFT build shows a live status screen — frequency, airtime, channel load, signal.",
      "buildsLine": "3 builds: ready-to-use · tft · headless",
      "docs": "https://github.com/RetiaLLC/DefconBadge2026/tree/main/firmware/reticulum",
      "src": "https://github.com/RetiaLLC/NibbleReticulum",
      "note": "The “ready to use” build is pre-provisioned — just flash it. For the plain tft/headless builds, provision after flashing: rnodeconf <PORT> -r --platform 80 --product f0 --model fe --hwrev 1  AND  rnodeconf <PORT> -H 4771b36f6f7db181420e92b8294b2ed42ae11ade43231297e7272a3a3fe9b536 (the -H firmware hash step is what stops the badge showing “firmware corrupted”).",
      "builds": [
        {
          "file": "rnode-1.85-tft-preprovisioned.factory.bin",
          "label": "ready to use — pre-provisioned RNode with live TFT status; no rnodeconf needed",
          "url": "firmware/rnode-1.85-tft-preprovisioned.factory.bin",
          "addr": 0,
          "sha256": "734e6d2e4a366426452cc8b6574a7d99b6dbfe987dea653e36223f3c6f6ae042"
        },
        {
          "file": "rnode-1.85-tft.factory.bin",
          "label": "live RNode status on the TFT — then provision once with rnodeconf",
          "url": "firmware/rnode-1.85-tft.factory.bin",
          "addr": 0,
          "sha256": "f726b9590a62e0c3f8efd572c7a5592f1cbde96e7c1d7d9396595e3760333e87"
        },
        {
          "file": "rnode-1.85.factory.bin",
          "label": "headless (display dark) — then provision once with rnodeconf",
          "url": "firmware/rnode-1.85.factory.bin",
          "addr": 0,
          "sha256": "8f7a90a48e88ca20363c53d0f54ea324a5e96bad3902f0e0a0a9c987510f4b53"
        }
      ]
    },
    {
      "id": "rsdeck",
      "mark": "rs",
      "name": "rsDeck",
      "ver": "retia-badge",
      "desc": "Ratspeak's Reticulum/LXMF messenger ported to the badge as a standalone on-device communicator — touch UI with on-screen keyboard, D-pad + A/B nav, per-conversation drafts, piezo chimes, BOOT = announce. Runs as a factory image or as a ratspeak.bin SD-launcher guest.",
      "buildsLine": "1 factory image, flashable here · also runs as a ratspeak.bin launcher SD guest · AGPL-3.0",
      "docs": "https://github.com/ratspeak/rsDeck",
      "src": "https://github.com/ratspeak/rsDeck",
      "page": "https://github.com/ratspeak/rsDeck",
      "note": "Defaults to the 914.875 MHz / 125 kHz / SF7 house channel — interoperates with fleet RNodes out of the box. Changeable in Setup.",
      "builds": [
        {
          "file": "rsdeck-badge.factory.bin",
          "label": "the standalone messenger — flash here (wipes the badge); first boot asks for a display name",
          "url": "firmware/rsdeck-badge.factory.bin",
          "addr": 0,
          "sha256": "35f0bd6ded2a3c9223ca7ccfd82baee3a1adbbe24cdb092bbeb5e074cc8d58df"
        }
      ]
    },
    {
      "id": "wledkitty",
      "logo": "assets/logo-wled.png",
      "logoCover": true,
      "name": "WLEDkitty",
      "ver": "WLED fork",
      "desc": "A WLED fork designed to run on the badge — drive the ten NeoPixel ears (and anything on the NeoPixel-out header) from the WLED web UI or phone app. Boots into a pride rainbow; A/B + d-pad switch effects on the go, with live status on the TFT.",
      "buildsLine": "1 image, flashable here · also runs as a launcher SD guest",
      "docs": "https://github.com/RetiaLLC/WLEDkitty",
      "src": "https://github.com/RetiaLLC/WLEDkitty",
      "page": "https://scriptkitty.sh",
      "builds": [
        {
          "file": "wledkitty-badge.factory.bin",
          "label": "standalone WLEDkitty — boots a Pride rainbow; replaces the SD launcher",
          "url": "firmware/wledkitty-badge.factory.bin",
          "addr": 0,
          "sha256": "03899f9eb9587d3ba312a0682d82b9afc20042bd37e45da81e06eaa090b09797"
        }
      ]
    },
    {
      "id": "templeos",
      "logo": "assets/logo-templeos.png",
      "name": "TempleOS Portable",
      "ver": "v1.0.0-demo",
      "desc": "soneill000's TempleOS tribute for the badge — a HolyC-flavored launcher with ported and reimagined mini-games (the oracle, hymns, 16-color sprite art). Terry dedicated TempleOS to the public domain; this builds on that.",
      "buildsLine": "1 factory image, flashable here — merged from the v1.0.0-demo release",
      "docs": "https://github.com/soneill000/temple-shrine-esp32",
      "src": "https://github.com/soneill000/temple-shrine-esp32",
      "page": "https://github.com/soneill000/temple-shrine-esp32/releases/tag/v1.0.0-demo",
      "builds": [
        {
          "file": "templeos-v1.0.0-demo.factory.bin",
          "label": "TempleShrine — HolyC launcher + mini-games (merged factory image)",
          "url": "firmware/templeos-v1.0.0-demo.factory.bin",
          "addr": 0,
          "sha256": "434320e64794447eb1ebf2135e89eb8d3624e4e7d3c97ae72e48b54288119e96"
        }
      ],
      "note": "After flashing, tap RESET once to boot into TempleShrine. HolyC launcher + mini-games; display + piezo."
    },
    {
      "id": "bitpirate",
      "logo": "assets/logo-bitpirate.png",
      "name": "ESP32 Bit Pirate",
      "ver": "badge-v1.2.1",
      "desc": "The Bit Pirate — a multi-protocol workbench, native on the badge TFT: one CLI (USB serial, Wi-Fi web UI, or browser Web Serial) that speaks I2C/SPI/UART/1-Wire/JTAG and more — with on-screen bus scan + live register monitor, a BME280 environment dashboard that colours the ears by temperature, Wi-Fi/BLE scanners, and on-board LoRa TX/RX (verified badge-to-badge).",
      "buildsLine": "1 badge-native build · transmit-capable · authorized use only",
      "docs": "https://github.com/RetiaLLC/ESP32-Bus-Pirate/releases/tag/badge-v1.2.1",
      "src": "https://github.com/RetiaLLC/ESP32-Bus-Pirate/tree/retia-badge-port",
      "page": "https://github.com/RetiaLLC/ESP32-Bus-Pirate/releases/tag/badge-v1.2.1",
      "note": "⚠ Transmit- & attack-capable: Wi-Fi deauth/sniff, BLE spoof/sniff, LoRa & RF transmit, bus/RF jam. Use ONLY on hardware, networks & RF you own or are authorized to test. Never TX on LoRa without a 915 MHz antenna. I2C targets go on the SAO header (J5), not Qwiic.",
      "gate": true,
      "capabilities": [
        "Wi-Fi deauth / sniff / nmap",
        "Bluetooth LE spoof / sniff",
        "LoRa & Sub-GHz transmit",
        "bus & RF jamming"
      ],
      "builds": [
        {
          "file": "bitpirate-badge.factory.bin",
          "label": "full multitool — buses + Wi-Fi/BLE/LoRa, on-screen scan & BME dash",
          "url": "firmware/bitpirate-badge.factory.bin",
          "addr": 0,
          "sha256": "695a924b2502d7e25b8057c3875d239c373009075f11e1cfee5f0772d6851cc6"
        }
      ]
    }
  ]
}
