Link your phone, laptop and tablet to one account and push a file or a block of text to any of them. When two devices can reach each other directly, the file goes straight between them and the server only introduces them.
A small tool with one job: moving something from one of your devices to another.
Register each device once and it shows up as a target. Transfers only ever move between devices on the same account — there is no cross-account transfer anywhere in the design.
A file transfer tries a direct WebRTC connection between the two devices. When both are on the same network that is fast and the bytes never touch the server at all.
Different networks, or the other device offline? The file falls back to store-and-forward on the server and waits for the receiving device to pick it up.
A block of text — a link, an address, a snippet — goes through the relay and is waiting on the other device the moment it next checks in. Up to 10,000 characters.
Web push tells the receiving device something has arrived, so you are not sitting on a page waiting. It degrades quietly to no notification if push is unavailable.
The receiving device draws a progress bar while a file uploads, but a half-written file is never downloadable — only a transfer confirmed written to the last byte can be fetched.
wire is a PWA, so it installs to a phone or desktop from the browser with its own icon and no browser chrome around it.
Transfers are purged after 14 days, with a 100MB cap per file and 500MB of pending files per account. Nothing accumulates on the server forever.
Where wire sits between the thing that shut down and the thing that only works on one brand.
| wire | Pushbullet | AirDrop | |
|---|---|---|---|
| Runs on your own server | Yes | No | No |
| Cross-platform | Any browser | Android, desktop | Apple only |
| Files peer-to-peer | When possible | No | Yes |
| Works across networks | Yes, via relay | Yes | No, same room |
| Send text between devices | Yes | Yes | Yes |
| Push notifications | Yes | Yes | n/a |
| Free file size limit | 100MB | 25MB on free tier | No limit |
| Account required | Yes, yours | Yes, theirs | No |
| Price | Free | Free tier, then paid | Free |
One Python file and one HTML file, running under systemd on a single Hetzner box.
The backend is a threading HTTP server on the Python standard library, with one optional dependency (pywebpush) for web push — if it is missing, push quietly turns itself off and everything else works identically. The client is a single self-contained HTML file: no bundler, no framework, no build step. Storage is plain JSON files written through a temp file and an atomic rename, so a crash mid-write cannot truncate them. Passwords use PBKDF2 and sessions live in memory, which means a restart logs everyone out — a deliberate trade for not running a session store.
Not if it does not have to. Files try a direct WebRTC connection between your two devices first, and the server relays only the handshake. A file only lands on the server when a direct connection cannot be established.
No. Transfers only move between devices registered to the same account. There is no cross-account transfer path in the app at all.
100MB per file, with 500MB of pending files per account, and text sends up to 10,000 characters.
Fourteen days, then they are purged automatically along with the stored file.
No. wire runs in any modern browser, and it is a PWA so you can install it to your home screen or desktop from the browser if you want the icon.
Yes. Signup at wire.dakshhq.com is open and there is no paid tier — it runs on a server I already pay for.
Signup is open and it costs nothing — wire runs on a server I already pay for.