Drop a print job from your desk.
PrintDrop plugs into your printer's USB port and appears as an ordinary flash drive — while also serving a web UI over Wi-Fi. No cloud, no account, no firmware changes.
Runs on a 4 MB ESP32-S3. Built for printers that only accept USB media.
bus sdio 4-bit @ 20 MHz · fat32 — projected
wifi printdrop.local · 192.168.1.42
lock idle · printer owns the card
benchy.gcode
20 MB · uploaded at ~2 000 KB/s · SDIO 4-bit
~3 200
KB/s card read — SDIO
~2 000
KB/s card write — SDIO
62
KB web UI, self-hosted
~6 s
20 MB job — SDIO (was ~80 s SPI)
SDIO 4-bit — at 20 MHz (stable on jumper wiring) delivers ~3 500 KB/s raw, ~3 200 KB/s USB read and ~2 000 KB/s USB write — a 20 MB job lands in ~6 s instead of ~80 s on SPI (485 KB/s read / 248 KB/s write). SDIO 4-bit at 40 MHz reaches ~6 000 KB/s raw on short wiring. The old SPI path remains available as -e printdrop_spi. The card, not the network, was the limit — SDIO removes it.
The errand the USB stick keeps creating.
Plenty of 3D printers accept jobs only from USB media and have no networking of their own. Every print becomes the same errand: slice at your desk, copy to a stick, carry it across the workshop — then somebody else needs the stick.
Drop. Hand back. Print.
PrintDrop holds the card, serves it to both sides, and never lets them collide. While a file arrives over Wi-Fi the media is withdrawn from the printer; when the write is done it is re-presented, and the new job is simply in the menu.
[desk] drop benchy.gcode → web ui
[device] media withdrawn · writing 20 MB
[device] write done · media re-presented
[printer] FAT re-read · job in the USB menuSmall parts. No surprises.
A 4 MB, no-PSRAM ESP32-S3 drives an SD card over SDIO 4-bit at 20 MHz (40 MHz with short wiring) and presents it through TinyUSB mass storage — ~4× the SPI bandwidth on the same breakout plus two wires, ~6× at 40 MHz. SPI remains available as -e printdrop_spi. The UI is 62 KB of plain HTML, CSS and JavaScript served from a LittleFS partition — no CDN, no external requests, no build step.
One card. Two masters.
A USB host caches the file allocation table. Writing to the card behind its back is how these devices normally corrupt themselves. PrintDrop holds to three rules.
Mass storage callbacks take the lock with a short timeout and fail the transfer rather than block, so a slow upload can never stall a printer mid-job.
Five small pieces, one coherent UX.
Live progress over WebSocket, a heartbeat LED you can read across the room, zero-config discovery that actually works on Windows, a login that lives in NVS, and an OTA path that survives a bad flash — all on the same 4 MB stick.