The ESP32 relay
In development
A ~$5 board, a battery and an antenna, left somewhere useful — carrying messages for whoever comes past. No operating system, no Raspberry Pi, nothing to log in to. It is the smallest thing that can be a full SPORE node rather than a client of one.
Flash it and it works. No pairing, no companion app, no configuration — a board with power is already relaying. Plugging something in doesn't switch it on; it just gives it one more way to pass messages along.
And that turns your phone into a gateway. Connect a phone to the board over USB and the phone reaches the board's radio mesh, while the mesh reaches whatever the phone has — internet, Bluetooth, a shared folder. Messages cross from one to the other in both directions, for as long as the cable is in. Nothing on either side is running "gateway" code: the board passes messages between the things it's connected to, the phone does the same, and a route through both is just what that adds up to.
You cannot run this yet. The toolchain and the core are done and building in CI; the radio, the storage and the phone link are not written. The honest state of each part is in the table further down, and the roadmap tracks the rest.
What it is for
Somewhere with no network
A valley, a building, a field. The board holds messages and hands them on when a phone or another board comes within range.
Cheap enough to leave behind
Losing one costs a few dollars, so you can put them where you would never leave a laptop — and put out enough that no single one matters.
A peer, not a gateway
It runs the same core as the phone app and the daemon, so it stores and forwards on its own. Nothing routes through a server.
How it works
Three parts, and the middle one is why it works unattended:
1. It listens to the air
Raw 802.11 — Wi-Fi frames with no access point and no joining a network. It watches every frame that passes, keeps the ones that are SPORE envelopes, and drops the rest immediately.
2. It keeps what it hears
Envelopes go to flash, so a board that loses power picks up where it left off instead of forgetting. That is what makes it a relay rather than a repeater.
3. It hands them over, if you ask
Plug in a USB cable, or connect over Bluetooth, and the board and your phone swap whatever each is missing. Optional — steps 1 and 2 carry on whether or not anyone ever does this.
Because every envelope is signed and sealed by whoever sent it, the board never needs to be trusted. It cannot read private messages it carries, and it cannot forge one — so leaving a board somewhere you do not control costs you nothing but the board. See Bridges for the radio's exact behaviour and its regulatory notes.
What actually works today
Being straight about this, because everything above except the first row is a plan rather than a thing you can use:
| Part | Status |
|---|---|
| The SPORE core runs on ESP32-S3 | ✅ builds and links in CI, unmodified — no ESP-specific branches |
| Footprint measured | ✅ ~13% of a 4 MB flash part, ~13% of 512 KB RAM |
| Booting on a real board | ⬜ never flashed — the binary exists, nothing has run it |
| Raw 802.11 send/receive | ⬜ not written |
| Flash storage | ⬜ not written |
| USB and Bluetooth link to a phone | ⬜ not written |
No claim on this page has been checked on hardware. Everything green above is a build-time fact, which is a different and much weaker thing — Hardware verification is where a real device run gets recorded, and there is not one for this yet.
Building it yourself
The board is Xtensa, which ordinary Rust does not target, so the build runs in Espressif's Docker image and needs nothing installed on your machine:
docker run --rm -v "$PWD":/work -w /work/esp32 \
espressif/idf-rust:esp32s3_latest \
bash -lc 'cargo build --release'
The first build compiles ESP-IDF itself and takes a while. Full instructions,
including flashing and the footprint report, are in
esp32/README.md.