Working somewhere with bad Wi-Fi
Cafe networks are slow, captive portals log you out, and hotel Wi-Fi charges per device. Your phone already has a better connection than any of them — this hands it to the laptop.
Android → Wi-Fi Direct or USB → your PC
No mobile router, no second SIM, no hotel Wi-Fi. Your phone is already a modem — PocketModem gives your laptop the connection it is already paying for, anywhere the phone has signal.
Measured on a Galaxy A53 over LTE. The link runs well above the cellular connection it carries — the tunnel is not the bottleneck.
A phone is a modem with a screen. PocketModem stops treating those as two purchases.
A mobile router is a second device to buy, a second line to pay for, and a third thing to remember to charge. It does one job your phone already does — and does badly, because it is the one you leave behind.
Your phone is charged, in your pocket, and on the best network you could get. PocketModem turns that into a connection your laptop can use, anywhere the phone has signal.
No second device, no second SIM, nothing extra to charge or lose.
A network you control, on any desk, in any country your plan reaches.
USB carries the same tunnel at 284 Mbps and charges the phone while it works.
The PC remembers the pairing and connects itself the next time.
The pattern is the same every time: you have a laptop, you have signal, and the thing in between is the problem.
Cafe networks are slow, captive portals log you out, and hotel Wi-Fi charges per device. Your phone already has a better connection than any of them — this hands it to the laptop.
Anywhere there is no Wi-Fi at all. The phone is charged and in your pocket, which is exactly the device a mobile router keeps failing to be.
Outages happen mid-deadline. A laptop back online in under a minute, on a connection you already pay for, is the difference between a delay and a lost day.
A local SIM in the phone covers the laptop too. No roaming router, no second data plan, no hunting for a shop that sells one at the airport.
Large uploads over a shared network are miserable. A tunnel of your own, measured at 156 Mbps down and 101 up over LTE, usually beats the building's connection outright.
A colleague's laptop, a test box, a machine being set up before it has network. Up to four PCs share one phone, each paired separately and each revocable.
What leaves the phone is one app making ordinary connections. There is no forwarded packet, because at the IP layer there is no second device.
A hotspot hands your PC to the carrier's tethering stack. That stack is the thing that gets metered separately, throttled, or refused outright.
PocketModem never touches it. The phone reads your PC's TCP and UDP streams and opens ordinary Android sockets to the same destinations, bound to the cellular interface, then copies bytes between the two.
Replacing a mobile router is the low bar. These are the parts that have no equivalent in a box with one pipe and no idea what is in it.
Windows Update and Steam are excluded out of the box, and you can add any site or address range. Those keep using the network they were already on, so nothing disconnects — a modem has one pipe and everything takes it.
Installed as a service, it connects at boot, before anyone logs in, and keeps retrying while the phone is away. A machine that reboots overnight is online again without being asked.
Cap the whole connection, or any single computer. The limit lets bursts through at full speed and only holds back sustained transfers, so browsing stays quick while a download is kept to its share — and the phone stays usable.
Every computer is named and listed, and any of them can be blocked on the spot — it drops immediately rather than at its next reconnect. Turn on approval and a new machine waits until you say yes, so the pairing code alone is no longer enough.
Point DNS at a Pi-hole, a company resolver, or anything else you run. A modem hands you whatever the carrier gives it.
Everyone has used the built-in hotspot. It is worth being precise about where this differs, because two of those rows are the whole reason the project exists.
| Phone hotspot | PocketModem | |
|---|---|---|
| Carrier sees | A tethered device | One app on your phone |
| Uses the tethering stack | Yes | Never |
| Counts against a tether allowance | Yes | It is ordinary data |
| Needs root | No | No |
| Radio | Access point for anything nearby | One paired PC, or a cable |
| Data usage | One total for everything | Per computer, with a bar for each |
| Limits | None, or the whole connection off | A monthly cap overall, and one per computer |
| Encryption | WPA2, shared passphrase | WPA2 plus per-frame AES-GCM |
| Survives a dropped link | Apps lose their connections | Adapter stays up, tunnel rebuilds |
| Choose what uses mobile data | All or nothing | Per site or per address range |
| Starts without you | Toggled by hand each time | A service, connected before you log in |
| DNS | Whatever the carrier hands out | Yours, including a home resolver |
| Which computers may connect | Anyone with the passphrase | Approved list, blockable per machine |
| Speed limits | None | Overall, and per computer |
| Battery | Access point running constantly | Same, or charging over USB |
A hotspot is simpler and works with anything that speaks Wi-Fi. If that suits you, use it — this exists for when it does not.
Six things that took the longest to get right.
The link and the tunnel were timed separately, so a slow result could be attributed to one or the other rather than guessed at.
You need both halves — the phone app and one desktop app. They work as a pair.
Open PocketModem and tap Wi-Fi Direct. It shows a pairing code and a Wi-Fi passphrase.
Run PocketModem, enter the pairing code, press Connect. It joins the phone's network itself, and asks for elevation only at that point — creating a network adapter is privileged.
| Phone | Android 12 or newer, with Wi-Fi Direct |
|---|---|
| PC | Windows 10/11 x64, or Linux x64 with a tun-capable kernel |
| Rights | Administrator on Windows, root or CAP_NET_ADMIN on Linux |
Everything the app does is available from a terminal, and --json makes any command scriptable.
pocketmodem # prompts for the pairing code
pocketmodem -t k7m2xq4p # with a known code
pocketmodem connect --for 2h # disconnect after two hours
pocketmodem status # is a tunnel running?
pocketmodem doctor # why it will not connect
pocketmodem recover # restore routing after a crash
Works through platform, privileges, driver, Wi-Fi group, reachability and leftover routes in order, then says what to do about anything it finds — rather than reporting that the connection failed.
Rules are matched on the destination, so they apply to every program at once. Excluded traffic keeps using whatever network the PC was already on — it is not blocked, it simply does not take the phone.
pocketmodem split # what the rules are now
pocketmodem split bypass steamcontent.com # keep it off the phone
pocketmodem split bypass 203.0.113.0/24 # a range works too
pocketmodem split via 198.51.100.5 # force one through
pocketmodem split remove steamcontent.com # drop a rule
pocketmodem split only-listed # invert: nothing unless listed
Windows Update, Steam and the private address ranges are excluded from the start. The most specific rule wins, so a range can be excluded with one address inside it kept. Changes apply on the next connection.
Installed as a service, the PC connects at boot and keeps retrying while the phone is away — backing off as it goes, so a phone that is simply switched off does not mean an attempt every second all night.
pocketmodem install-service --token=k7m2xq4p --passphrase=<wifi>
pocketmodem uninstall-service
Administrator or root is required, and the pairing code is stored in the service definition rather than separately, so removing the service removes the credential with it. Uninstalling also restores normal routing.
Every PC that connects is listed on the phone, with a name you can change. Block one and it drops immediately rather than at its next reconnect. Turn on Approval required and a machine that has never connected waits until you allow it, so someone who reads the pairing code off your screen still cannot get in.
Cap the connection as a whole, or any single computer, in Mbps. The limit holds one second of capacity, so a page load bursts through at full speed and only sustained transfers are slowed — a limited link feels slow rather than broken.
Traffic over the limit is delayed rather than dropped, which lets the sender upstream slow down on its own instead of retransmitting. Limits apply to new data at once; a transfer already running slows rather than failing.
The default is 1.1.1.1; the phone's own resolver is not
reachable from the PC. Change it in Settings in the app, or per
connection:
pocketmodem --dns 192.168.1.10 # a Pi-hole on the local network
Routing changes are journalled to disk before they are applied and replayed on next start, so this should recover on its own. If it does not:
pocketmodem recover
Or run Fix my internet from the Start menu. Disabling and re-enabling the Wi-Fi adapter also clears everything.
Usually MTU. The tunnel probes for it, but a network in the middle can still black-hole large packets. pocketmodem doctor will say more.
Fewer than four links are up. The tunnel works with one; throughput and stall resistance drop. Usually a weak radio link.
It is not code-signed, so SmartScreen does not recognise it — a statement about the certificate, not the software. Choose More info, then Run anyway.
The same tunnel runs over USB, which is worth reaching for when the 2.4 GHz band is crowded or you want the phone charging while it works. It measured 284 Mbps down and 245 Mbps up — roughly double the wireless link, and far above any cellular connection it would carry.
Three pieces. The middle one is where the idea lives.
The link is a dumb pipe either way — nothing above it changes.
| Transport | Measured | Reach for it when |
|---|---|---|
| Wi-Fi Direct | 156 / 101 Mbps | The phone stays in your pocket |
| USB | 284 / 245 Mbps | Wi-Fi is congested, or you want the phone charging |
Wintun on Windows, /dev/net/tun on Linux. A real network interface is why every application works with no configuration — the main advantage over proxy-based tools, which only cover apps you configure.
Raw IP packets are classified and multiplexed across four parallel TCP connections. Four rather than one because a single connection means one lost frame stalls every stream behind it, felt as an occasional total freeze rather than steady slowness.
The phone never forwards a packet. It parses each stream and opens an ordinary Android socket to the destination, bound explicitly to the cellular network, then copies bytes between the two.
The Wi-Fi group is WPA2, but a group passphrase is shared with every device that ever paired, so it is not a session secret. Two further layers:
Nothing is sent anywhere else. No account, no telemetry, no server — the phone and the PC talk directly.
Requires the .NET 9 SDK; the phone app additionally needs JDK 17 and the Android SDK.
dotnet build
dotnet test PocketModem.Tests
# Windows — Wintun (amd64) must sit beside the exe
dotnet publish PocketModem.App -c Release -r win-x64 -o dist
# Linux
dotnet publish PocketModem.App -c Release -r linux-x64 -o dist-linux
The desktop client is open source under MIT. The Android app is proprietary.
Version 1.0.0
You need the phone app and one desktop app. They work as a pair.
The documentation covers the rest, including what to do when something goes wrong.
Privacy & terms · 8 September 2026
The app itself has no analytics and no telemetry. Your browsing is never recorded. The only thing that reaches a server of ours is proof that you paid.
PocketModem moves your PC's traffic through your phone. Everything about that — which sites you visit, what you send, who you connect to — stays between your devices and is never sent to us, stored by us, or inspected. The desktop client is open source, so that part is checkable rather than something you take on faith.
PocketModem is paid software, and validating a subscription does require a small amount of data. That is set out in full below rather than buried.
None of the following is transmitted anywhere.
| What | Where | Why |
|---|---|---|
| Pairing code and Wi-Fi passphrase | Phone, and each paired PC | So you do not retype them every time |
| Daily and monthly byte totals | Phone | Data caps and the usage display |
| Session history | Phone | Start and end time, bytes moved, and the local address of the PC — not what was visited |
| Crash reports | PC only | Written to a local file so a crash leaves evidence. Never uploaded |
| Routing journal | PC only | Lets normal routing be restored if the app is interrupted |
Paid features are sold through Google Play. Google handles the payment itself — we never see your card details, billing address or full name, and Google does not pass them to us.
To check that a subscription is genuine and still active, the app sends the following to a server we operate:
| What | Why it is needed |
|---|---|
| Play purchase token | The receipt Google issues. It is what we verify with Google to confirm the subscription is real and current |
| Product and order identifier | Which plan was bought, and to recognise a renewal or refund |
| An install identifier | A random value generated on first run, so an entitlement follows your install. It is not your device ID, advertising ID, phone number or account |
| App version and Android version | To reject builds with a known billing defect |
That is the complete list. No usage data, no traffic data, no location, no contacts, no advertising identifier, and nothing about what you do with the connection.
Under GDPR this processing is necessary to perform our contract with you — you bought a subscription and we have to honour it — rather than resting on consent. Under KVKK the equivalent basis is that it is directly related to and necessary for performing that contract.
Installing through Google Play means Google collects data about that install independently of us, under their privacy policy, not this one. That typically includes your Google account, device model, and purchase records.
Two things Google may also show us, in aggregate:
We do not add any analytics of our own. There is no Firebase, no Crashlytics, no advertising SDK and no third-party tracker in the app — which you can verify from the build file in the repository.
Traffic passes through the phone by design — that is what the product does — but it is relayed, not inspected, stored or copied. Between your PC and the phone every frame is encrypted with AES-GCM using a key derived from your pairing code.
Beyond the phone your traffic is exactly as private as it would be if you had opened the same connections on the phone itself. HTTPS stays HTTPS; anything unencrypted was already unencrypted.
Nothing is sold, rented or shared for advertising. There are no data brokers, and no third party receives your data for their own purposes.
| What | Kept |
|---|---|
| Subscription records | While the subscription is active, then up to the period tax law requires records of a sale to be retained |
| Install identifier | Deleted with the subscription record |
| Server logs | 30 days, then deleted |
| Everything on your devices | Until you delete it or uninstall |
Data is stored on servers in Germany, inside the EEA. If that ever changes, this page changes with it.
Under GDPR and KVKK you may request a copy of the personal data we hold about you, ask for it to be corrected, ask for it to be deleted, object to processing, or ask for it in a portable form.
In practice that means the subscription records above — which is all we hold. Everything else lives on your devices, where you can inspect and delete it yourself without asking us.
Write to dev.emirbaycan@gmail.com and we will respond within 30 days. Deleting a subscription record ends the entitlement it proves, so a refund request should go to Google first.
You also have the right to complain to a supervisory authority — in Turkey the Personal Data Protection Authority (KVKK), or in the EU your national data protection authority.
PocketModem is not directed at children and we do not knowingly collect data from anyone under 16. If you believe a child has provided data through a subscription, write to us and it will be deleted.
PocketModem routes your PC's traffic through your mobile connection. Whether that use is permitted is governed by your agreement with your mobile operator and by the law where you are. That is yours to check, not something this software can decide for you.
You are responsible for the data you move and the charges you incur. The built-in cap helps with the second, but it is a convenience, not a guarantee.
The software is provided as is, without warranty of any kind, express or implied, including the implied warranties of merchantability, fitness for a particular purpose and non-infringement.
To the fullest extent the law allows, we are not liable for any damages arising from use of or inability to use the software — including lost data, lost profits, business interruption, data charges, or action taken by your mobile operator.
If this page changes the date at the top moves. A change that materially affects what is collected will be announced in the app before it takes effect.
Questions go to dev.emirbaycan@gmail.com, or the issue tracker.