File transfer that runs on light.
One screen. One camera. Any two devices. The bytes travel through QR codes — no internet, no accounts, no servers. Just because it's fun to watch.
Two screens. Three steps. No internet at all.
Pick a file on the sender
Any file. Photo, PDF, ZIP, voice memo. The app deflates it if it helps, hashes it, and slices it into source blocks.
Watch the QR codes flow
A fountain of XOR-combined symbols streams as QR codes — about seven a second. Each one is independent. Each one is enough on its own.
Point the receiver at it
The other device's camera grabs whichever frames it can. Once it has K + ε symbols, it solves the file, verifies the hash, and hands it to your share sheet.
No pairing. No Bluetooth. No Wi-Fi. Works in airplane mode, on a desert island, in a Faraday cage.
Drop a frame?
Doesn't matter.
A naive cycle of QR codes makes the receiver either ACK what it has or restart on every miss. We don't have a back-channel.
LT codes (Luby Transform) solve this. The sender produces an infinite stream of XOR-combined symbols. The receiver only needs K + ε of them to solve the file. No retransmits, no acknowledgments, no restart.
file → split into K source blocks → fountain encoder │ ▼ ┌──────────────────────────────────────────────────┐ │ infinite stream of XOR-combined symbols │ │ sym1 = b3 │ │ sym2 = b1 ⊕ b2 ⊕ b5 │ │ sym3 = b1 │ │ sym4 = b2 ⊕ b4 │ │ … │ └──────────────────────────────────────────────────┘ │ ▼ rendered as QR codes │ ▼ camera scans whichever it happens to catch │ ▼ decoder belief-propagates until all K blocks recovered │ ▼ file rebuilt
It's the only one that works in airplane mode.
| transfqr | AirDrop | Bluetooth | Cloud sync | |
|---|---|---|---|---|
| Internet required | · | · | · | ● |
| Bluetooth on | · | ● | ● | · |
| Wi-Fi on | · | ● | · | ● |
| Cross-platform (iOS ↔ Android) | ● | · | ● | ● |
| Cross-device (laptop ↔ phone) | ● | ● | · | ● |
| No account needed | ● | ● | ● | · |
| Air-gapped friendly | ● | · | · | · |
transfqr is slower than a real network. That's the trade-off — when the air around you is a network you can't use, transfqr is the one that still works.
From your terminal, no UI in the way.
macOS and Linux ship with a terminal that's perfectly capable of rendering QR codes. So we did.
transfqr ./photo.jpg streams the file as QR codes in your terminal. Open the app on your phone, point it at your laptop screen — the file lands in Photos.
size 148.6 KB (deflate)
frame 00027
npx transfqr ./photo.jpg We can't see your files. We literally cannot.
Zero servers.
There is no transfqr backend. Files travel between two devices through camera light. Your bytes do not leave the room.
No accounts.
No email, no phone number, no identifier. Open the app and start.
No telemetry by default.
Anonymous analytics are opt-in. We only ever record bucketed signals — file size buckets, transfer outcome — never names, content, or IP.
Local-first.
Files you receive land in your photo library or app sandbox. Nothing is uploaded, mirrored, or copied off the device unless you tap Share yourself.