ℹ What This Tool Does
This is a self-hosted web tool that clones the latest MeshCore firmware from GitHub, compiles it with your chosen settings using PlatformIO, and delivers the resulting .bin file to your browser for download or direct USB flashing. It runs entirely on a local server on your own machine — no data leaves your computer to any external service operated by this tool.
✎ Information You Enter
To customise your firmware you may enter:
- GPS pin numbers — RX, TX, and Enable GPIO pin assignments
- BLE PIN code — the pairing PIN for BLE companion radio builds
- WiFi SSID and password — network credentials for WiFi companion radio builds
- Repeater advertised name — the name broadcast by the repeater
- Repeater admin password — the administrative password for the repeater
This information is sent over the local loopback network (127.0.0.1) to the local build server. It is written into the firmware source files, compiled, and then permanently deleted as described below. It is never stored in a database, logged to disk, transmitted to a third party, or retained beyond the lifetime of the build.
🗑 Temporary Build Files & Automatic Deletion
Each build job creates a temporary directory inside the container's temp folder (/tmp/meshcore_builds/<job-id>/). This directory contains a full clone of the MeshCore GitHub repository with your custom flags applied, plus the compiled firmware artefacts.
Deletion happens automatically in all of the following cases:
- Immediately after the compiled .bin is downloaded by your browser
- Immediately after the firmware is fetched by the browser for USB flashing
- If you navigate away from the page while a build is queued or running — the build is cancelled and the directory is wiped
- Every time the build server starts up — all leftover directories from previous sessions are removed
No firmware binary or build artefact is retained on the server after delivery.
🔌 USB Flashing (Web Serial API)
When you click Flash Device via USB, your browser uses the Web Serial API to communicate directly with your connected ESP32-S3. This is a browser-to-device connection — serial port data goes from your browser to your device only. The local build server is not involved in the flashing process at all, and no serial data is transmitted over any network.
You must explicitly grant the browser permission to access the serial port each time you flash. This permission is not stored beyond the current browser session.
☁ Third-Party Network Requests
The page loads two JavaScript libraries from public CDNs. These requests are made by your browser and are subject to those CDNs' own privacy policies:
- cdnjs.cloudflare.com — CryptoJS (used for MD5 checksum verification during USB flashing)
- unpkg.com — esptool-js (the browser-side ESP32 flash tool, fetched once when you first click Flash)
Beyond these two library fetches, your browser makes no other outbound requests initiated by this tool. The build server itself fetches the MeshCore source code from github.com/meshcore-dev/MeshCore on your behalf — this is a standard git clone with no credentials or identifying headers attached.
✓ No Analytics, No Cookies, No Logging
No analytics, telemetry, cookies, user accounts, or session identifiers of any kind. HTTP request logs from the Flask server are suppressed. Build job IDs are random UUIDs generated per-session and discarded on completion.
🐳 Docker Container — Self-Hosted
This MeshCore custom firmware tool runs as a Docker container. The container runs on Linux and has no outbound connections beyond the GitHub clone and the CDN library fetches described above.
The only persistent Docker volume is the PlatformIO toolchain cache (pio-cache:/root/.platformio), which contains compiler toolchains only — no user data, build sources, or compiled firmware.