My ESP32 Wi-Fi bridge for getting original Nintendo DS hardware back online through Wiimmfi by redirecting Nintendo WFC DNS traffic.
I built esp32-wiimmfi to make original Nintendo DS and DS Lite networking usable on a modern home network. An ESP32 joins normal Wi-Fi for uplink, hosts a DS-compatible access point, and redirects Nintendo WFC DNS traffic toward Wiimmfi or another revival target.
esp32-wiimmfi turns a small ESP32 board into a purpose-built bridge for Nintendo DS Wi-Fi Connection games. The board connects to a modern home network, exposes a handheld-compatible access point, and handles the DNS redirection needed to point WFC-era traffic at Wiimmfi or another revival service.
Original DS and DS Lite hardware were built around open or WEP networks, while modern networks generally use WPA2 or better. Many WFC-era games also try to reach Nintendo domains that no longer operate as they did originally. I wanted a small bridge that solved both problems without weakening the rest of the home network.
I built the ESP32 Arduino sketch, the DNS redirect behavior, the AP+STA network flow, and the documentation around flashing, configuring, and validating the setup. I also included a self-hosted server path for cases where the bridge should point at a LAN-hosted WFC backend instead of a public revival IP.
The bridge uses C++ on the Arduino ESP32 core with WiFi.h and WiFiUdp.h. The optional self-hosted backend path uses Docker and a vendored WFC server stack with Go and PostgreSQL components.
The ESP32 runs in AP+STA mode. The STA side joins the normal Wi-Fi network for internet access. The AP side hosts the network the DS connects to. NAPT routes handheld traffic through the uplink, while a small UDP DNS server answers *.nintendowifi.net lookups with a configurable WFC revival IP and forwards unrelated DNS queries upstream.
Active technical project. The current version documents both the ESP32 bridge path and the optional self-hosted backend path.
Repository and related topic hub: Pokemon ACE and retro game experiments.
Set up arduino-cli with Espressif's ESP32 board index and install the ESP32 core.
arduino-cli config initarduino-cli config add board_manager.additional_urls \https://espressif.github.io/arduino-esp32/package_esp32_index.jsonarduino-cli core update-indexarduino-cli core install esp32:esp32
Replace the board FQBN and serial port for your ESP32 board.
arduino-cli compile --fqbn esp32:esp32:esp32 esp32-wiimmfi.inoarduino-cli upload --fqbn esp32:esp32:esp32 -p /dev/ttyUSB0 esp32-wiimmfi.inoarduino-cli monitor -p /dev/ttyUSB0 -c baudrate=115200
The repo includes Docker tooling for running the vendored WFC backend on a LAN host.
cp .env.example .env# set DB_PASSWORD and API_SECRETdocker compose up -d --builddocker compose logs -f wwfc