Skip to content

fr33n0w/rmap-rnode-web-flasher

Repository files navigation

RNode Flasher (RMAP)

A browser-based flasher for Reticulum RNode firmware. Flash, provision and configure LoRa boards over USB directly from the browser - no drivers, no Python install, nothing to set up on the user side.

Built for rmap.world.

Pick your board, pick the firmware, plug in over USB, click Flash. Done.


✨ What makes it different

Compared to other RNode / LoRa web flashers, this one adds:

  • 📥 Automatic firmware download - firmware is fetched live from each project's official GitHub releases (with a version picker), cached server-side and streamed. No hunting for .zip files, no manual uploads.
  • True one-click flash - a single button runs flash → automatic EEPROM provisioning → firmware-hash setup in sequence (for RNode Official / CE). Most flashers leave provisioning as separate manual steps.
  • 🎛️ In-browser after-flash config - Bluetooth on/off & pairing, display rotation & brightness, and full LoRa / TNC (standalone) setup - no rnodeconf.
  • 🧩 Many projects & boards in one place - Official, CE, microReticulum/TN, RTNode and the SenseCAP T1000-E; ESP32 and nRF52 (DFU).
  • 💾 Remembers your choices across reloads · 🌍 built-in page translator · 📊 usage stats · two clean interfaces (card / dropdown).
  • 🔌 100% browser (Web Serial) - nothing to install for the end user.

Two interfaces (same engine)

File Style
index.html Card + accordion UI (visual, step-by-step in one screen)
index2.html Simple dropdown UI (minimal)

Both share the same flashing engine and the same features, and link to each other from the top bar.

Features

  • Flashes ESP32 boards (via esptool-js) and nRF52 boards via DFU (Heltec T114, LilyGO T-Echo, RAK4631, SenseCAP T1000-E).
  • Automatic RNode EEPROM provisioning + firmware hash for RNode Official / CE; other firmware is flashed as-is, with manual provisioning available if needed.
  • Multiple firmware sources, versions fetched live from GitHub releases: RNode Official (markqvist), RNode CE (Liberated Embedded Systems), microReticulum / Transport Node (attermann), RTNode v4 (jrl290), RNode T1000-E (idan2025).
  • After-flash tools: Bluetooth on/off + pairing, display rotation & brightness, LoRa parameters & TNC (standalone) mode, plus manual flash / provision / wipe / full-erase.
  • Remembers your selections across reloads, page translator (any language), console/log, usage stats (visits & devices flashed), credits.
  • ~20 supported boards: Heltec LoRa32 v2/v3/v4, Heltec T114, the LilyGO LoRa32 / T-Beam / T3S3 / T-Deck / T-Echo family, RAK4631, Seeed XIAO ESP32S3 & SenseCAP T1000-E, generic homebrew, and the RNode handheld.

How it works

  1. The browser talks to the board over the Web Serial API.
  2. ESP32 flashing is done in-browser with esptool-js; nRF52 with a JS port of Adafruit's DFU tool. Provisioning uses rnode.js (Liam Cottle).
  3. Firmware is not bundled. A tiny Python server (server.py) acts as a proxy: it fetches the requested release .zip/.bin from the project's official GitHub release and streams it to the browser.
    • This proxy is required because GitHub release assets do not send CORS headers, so the browser cannot download them directly.
    • On the server, firmware for a specific version is cached on disk (fw_cache/) and streamed in 64 KB chunks, so RAM usage stays tiny even with many users. In the browser it lives only in RAM and is discarded after flashing.

Quick start (local)

Requirements: Python 3 (standard library only - no pip packages), and a browser with Web Serial: Chrome, Edge, or Firefox (with dom.serial.enabled).

cd flasher
python server.py            # serves on http://localhost:8000  (or: python server.py 8080)

Then open:

Web Serial works on localhost without HTTPS. Plug your board in over USB, press Connect, choose the port, then Flash now.


Hosting on your own server (VPS)

The app is fully portable: it uses relative URLs, so it works from any path.

  1. Upload the whole flasher/ folder (HTML, rmap.css, the *.js files, devices.js, the js/ libraries, the img/ folder and server.py) to your server, e.g. wwwroot/flasher.

  2. Install: only Python 3. Nothing else.

  3. Run the proxy server (e.g. with screen, tmux or a systemd service):

    cd /var/www/flasher
    python3 server.py 8000
  4. HTTPS is mandatory. Web Serial only works in a secure context - on a public domain that means HTTPS (on localhost it's fine without). Put a reverse proxy with TLS in front of server.py.

    Caddy (automatic HTTPS, simplest):

    flasher.example.com {
        reverse_proxy localhost:8000
    }
    

    nginx (sub-path under an existing site):

    location /flasher/ {
        proxy_pass http://127.0.0.1:8000/;
        proxy_set_header Host $host;
    }

    Then the entry point is https://example.com/flasher/index.html.

The fw_cache/ folder is created automatically and can be cleared anytime.


Credits

Built on the great work of:

EEPROM provisioning is community (unsigned) - perfectly fine for normal Reticulum use.

License

This project's own code is licensed under CC BY-NC-ND 4.0 (share with attribution, no commercial use, no modifications/derivatives). Bundled third-party libraries in js/ keep their own licenses. See LICENSE.

About

RNode Web Flasher, super easy and fast flasher now on rmap.world

Topics

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Contributors