We shipped SuperDMZ for ESP32 — and how it landed on the Arduino Library Manager
The SuperDMZ Arduino library is now available straight from the IDE. Four lines of code turn any ESP32 into a public https://your-host.dmzgate.com address. We also walk you through the GitHub journey and the release behind the scenes.
Why ESP32 is now part of SuperDMZ
About half of the support tickets we get are a variation of: "I have a sensor/camera/panel running on an ESP, can I expose it through SuperDMZ without installing the client on a PC next to it?". Answer is now yes — in four lines of code.
The Windows/Linux/macOS client is great when there's a real OS at the edge. For IoT that requirement is friction: the device IS the "PC". Forcing an intermediate machine just to run the tunnel raises the BOM, expands the failure surface, and adds another cable we have to maintain.
The SuperDMZ library we shipped today embeds the tunnel protocol straight into the ESP32 firmware. The device connects on its own to a SuperDMZ relay over WebSocket TLS and becomes reachable at https://<your-host>.dmzgate.com with a valid Let's Encrypt cert — no public IP, no router port forwarding, no external cloud.
Compatibility
The whole ESP32 family is supported:
- ESP32 classic (WROOM-32, WROVER)
- ESP32-S2 and ESP32-S3
- ESP32-C3 and ESP32-C6 (RISC-V)
- Arduino Nano ESP32 — works out of the box; it's an ESP32-S3 in Nano form factor
ESP8266 is officially out — its embedded mbedtls doesn't have enough heap to keep WSS stable in production. You can compile for it with some effort, but we don't recommend it for real deployments.
Roadmap is already on the table for Arduino UNO R4 WiFi (v1.1), MKR WiFi 1010 / Nano 33 IoT (v1.2), Portenta H7 / Giga R1 WiFi (v1.3), and Raspberry Pi Pico W (v2.0). Each one is a port of the network layer to the chip-specific library (WiFiS3.h, WiFiNINA.h, MbedOS WiFi, etc.) — same public API.
How to install
In Arduino IDE 2.x:
- Sketch → Include Library → Manage Libraries…
- Search for
SuperDMZ - Click Install. Dependencies (
WebSocketsby Markus Sattler andArduinoJsonby Benoit Blanchon) are offered in the same prompt.
In PlatformIO:
; platformio.ini
lib_deps =
superdmz/SuperDMZ@^1.0.2
Hello World
Four lines to bring up an ESP32 talking to the world:
#include <WiFi.h>
#include <WebServer.h>
#include <SuperDMZ.h>
WebServer server(80);
SuperDMZ tunnel;
void setup() {
WiFi.begin("YOUR_WIFI", "YOUR_PASS");
while (WiFi.status() != WL_CONNECTED) delay(200);
server.on("/", [](){ server.send(200, "text/html", "<h1>Hello</h1>"); });
server.begin();
tunnel.begin("PASTE_YOUR_48_HEX_TOKEN", 80);
}
void loop() {
server.handleClient();
tunnel.loop();
}
Build, upload, open the Serial Monitor at 115200 baud. Within ~5 seconds:
[wifi] OK, IP = 192.168.1.42
[http] local WebServer on port 80
[SuperDMZ] connecting wss://spo1.nodes.superdmz.com:443/ws/tunnel ...
[SuperDMZ] ONLINE: https://your-host.dmzgate.com -> http://localhost:80
Done. Open the public URL from any phone on the other side of the planet, and the ESP page responds.
The path to the Arduino Library Manager
For the library to show up in the IDE's official Library Manager for anyone in the world, it has to be accepted in the index maintained by Arduino. The flow is all public on GitHub and takes about 30 minutes end-to-end when everything is in order.
Here's what we did:
- Public repo at github.com/superdmz/SuperDMZ-Arduino with the code, examples,
library.properties,library.json,LICENSE,keywords.txt, andCHANGELOG.md. - Semver tag pointing at the release commit (
1.0.1). - GitHub Actions CI running
arduino/arduino-lint-actionin strict mode plusarduino/compile-sketchescompiling examples across a six-board ESP32 matrix — zero regressions on future releases. - Fork of
arduino/library-registry, add one line torepositories.txtwith the URL of our repo, open a PR. - Arduino's bot runs the automated check (stricter than our local CI), comments the result, and merges if everything is green.
- The Arduino indexer syncs the index every hour. On the next Library Manager refresh inside the IDE, the library shows up for everyone in the world.
Worth noting: for future releases (v1.0.2, v1.1, etc.) we don't have to open another PR. Just push the new tag to our repo — the indexer picks it up and publishes it in ~1 hour.
The bug the author hit
On the initial publish we fell into a classic trap for anyone working on a multilingual product: we left Portuguese comments inside the library's .ino and .cpp files. Serial.printf was already in English from the start (logs are consumed by global tooling — Stack Overflow, grep, dashboards — and translation breaks integrations), but the comments slipped through. A few hours later that became v1.0.2 with a full cleanup. Internal lesson reinforced: code that ships to the world via Library Manager is English in everything: logs, comments, docstrings, example strings.
Next steps
For you, the user:
- The full installation guide has the step-by-step, the 7 steps, an API reference table, and troubleshooting.
- Create the tunnel in the panel with protocol HTTP and
local_port = 80. - The
WebServerBridge(ESPAsyncWebServer + JSON + GPIO) andProvisioningPortal(captive portal saving WiFi+token in NVS) examples cover real use cases — including OTA.
For folks building products: ProvisioningPortal solves the provisioning problem without compiling a custom firmware per customer. The device leaves the factory in AP mode, the end customer points their phone at it, configures WiFi and token through the captive portal, and the ESP reboots as a regular client. Marketing copy writes itself: "your IoT gets a public address in 30 seconds — no public IP, no router port forwarding, no external cloud".
Happy hacking. Bugs and new-board requests: GitHub Issues.
Want to try SuperDMZ?
Free plan, no credit card. Your first tunnel runs in under 60 seconds.
Create a free accountMore in Updates
SuperDMZ Arduino v1.1.0: production-grade ProvisioningPortal + new SmartIoT example
Four hours after v1.0.2 we shipped v1.1.0 with the two examples needed to turn the library into a real product. Captive portal with WiFi scan, live dashboard over the tunnel, OTA through the tunnel itself, and a GPIO0 button with partial reconfiguration.
SuperDMZ v1.8.6: Linux and macOS client reaches feature parity with Windows
The release that closes 3 versions of gap between the desktop clients. Gateway, global and per-tunnel pause, weekly scheduling — now also via CLI on Linux and macOS.