Trade with retail Pokémon games from your computer.

pokeldn turns an ESP32 board on USB into a Nintendo Switch local wireless radio. It hosts or joins sessions with seven Pokémon games for trades, Mystery Gifts and Tera Raids. Nothing is installed on the Switch or Switch 2.

Latest release · AGPL-3.0 · macOS on Apple silicon, Windows, Linux

Jump to a scene
The optional OLED on the board. These frames come from the firmware's own drawing code, run offline through a Sword/Shield trade and a Mystery Gift.
The pokeldn desktop app hosting a FireRed trade, offering a level 50 shiny Chansey

Hosting a FireRed Direct Corner trade. PKHeX builds the Pokémon and checks that it is legal; the session panel lists what to do on the console.

Seven games, one board

Every game trades through the ESP32. FireRed and LeafGreen work in English, French, German, Italian, Spanish and Japanese. Scarlet and Violet also host and join Tera Raids.

Feature FRLG LGPE SwSh BDSP PLA SV PLZA
Trade Works Works Works Works Works Works Works
Online trade, two players far apart Works Offline tested Offline tested Offline tested Offline tested Works Offline tested
Mystery Gift Works No such feature Works No such feature No such feature No such feature No such feature
Link battle Works Not done Not done Not done No such feature Not done Not done
Code on the console, save read and write Works Not done Not done Not done Not done Not done Not done

What the app does

The desktop app includes the radio firmware, flashes the board and runs each tool with tested settings. The only file it asks for is prod.keys from your own Switch.

Trades
Host or join a trade with any of the seven games. Queue up to six Pokémon in one session.
Online trades
Two players far apart each host their own console. The apps meet through public Nostr relays under a shared code, with no server to run.
Mystery Gift
Send gifts to FireRed/LeafGreen and Sword/Shield, including 171 official Sword/Shield event cards. Opens .wc3, .wc8 and shared .pokegift files.
Bank
Keeps every Pokémon a trade brings in, imports Pokémon files and game saves, and moves a Pokémon into another game wherever HOME would.
GTS
List a banked Pokémon against a species you want. Another player's app trades for it, even when you are not both online at the same time.
Tera Raids
Host or join local Scarlet/Violet raids with the boss and rewards you choose.
Controller
An ESP32-S3 becomes a wired controller, a classic ESP32 a wireless Pro Controller. Record macros and share them as .pokemacro files.
Legal Pokémon
PKHeX.Core builds each Pokémon you offer for the game on the other end and checks it before the trade.

Compatible boards

Any of these chips works as the radio, on 2.4 GHz. The app's Board page flashes the firmware. Building it yourself takes ESP-IDF v6.1.

Chip Connects through Firmware
Classic ESP32 WROOM-32E, D0WD USB serial bridge CP210x, CH340 pokeldn-radio.bin
ESP32-S3 Native USB pokeldn-radio-s3.bin
ESP32-C3 Native USB pokeldn-radio-c3.bin
ESP32-C6 Native USB pokeldn-radio-c6.bin
  • Boards covered in the docs include the Seeed Studio XIAO ESP32C3, ESP32S3 and ESP32C6, ESP32-S3 N8R2 and N16R8 boards, the ESP32 DevKit V1, the ESP32-C6-DevKitC-1 and the ESP32-C3 0.42-inch OLED board.
  • On a board with two USB sockets, use the native USB one.
  • The XIAO ESP32C3 and ESP32S3 need their supplied antenna attached.
  • The controller firmware runs on an ESP32-S3 (wired, on the Switch's USB-C port) or a classic ESP32 (Bluetooth). The C3 and C6 cannot be controllers.
  • ESP32-S2 is not supported.

Add a screen

An SSD1306, SSD1315 or SSD1309 128×64 I2C OLED shows the radio's traffic, the Pokémon each trade sends and receives, and the Mystery Gift card. The ESP32-C3 0.42-inch OLED board uses its own 72×40 screen.

To spare the panel, it dims after a minute idle and turns off after ten. The BOOT button wakes it. Wire VCC to 3V3 and GND to GND.

Chip SDA SCL
Classic ESP32 GPIO21 D21 GPIO22 D22
ESP32-S3 GPIO8 GPIO9
ESP32-C3 GPIO6 GPIO7
ESP32-C6 GPIO22 GPIO23

Plugins

Plugins add tools, games and radios to the app. A plugin is a folder of Python files with a plugin.toml, shipped as one .pokeplugin file that you drop on the Plugins page. Plugins stay off until you turn them on.

Before you install one, the app reads its code and lists what it does: network access, starting other programs, deleting files, native code, reading prod.keys. That is a warning, not a sandbox. The project does not distribute, review or support third-party plugins.

examples/plugins/hello/plugin.py
from pokeldn.plugins import Field, Tool


def register(api):
    api.add_tool("frlg", Tool(
        "hello-greet",
        "Say hello",
        "greet.py",
        "Greets your trainer in the output.",
        ("Nothing to do on the console.",
         "Press Start and read the output."),
        fields=(Field("--greeting", "Greeting",
                      default="Hello"),),
        fixed=("--trainer", "{ot}"),
    ))

Download

You need one of the boards above, a Switch or Switch 2 with one of the games, and prod.keys dumped from your own console.

Firmware images and SHA256SUMS are on the release page. To run from source, follow the README.