Send files and folders between Android, iPhone and Windows, in any direction, without internet and without a router. Original quality (no compression, dates kept), every byte checked with BLAKE3, encrypted, and it picks up where it left off if the connection drops.
Pick files -> show QR (or tap a nearby device) -> done
"✅ 1,003 files verified, 0 errors"
| Folder | What it is |
|---|---|
lib/ |
The Flutter app (screens, state, platform bridge) |
lib/screens/ |
Home, Send, Share (QR + nearby), Receive, Scan, Transfer, Finish, History, Settings |
lib/services/engine_isolate.dart |
Runs the engine on a background thread |
packages/transfer_core/ |
The transfer engine: pure Dart, no UI. Protocol, BLAKE3, TLS, resume |
android/app/src/main/kotlin/.../BeamPlatform.kt |
Wi-Fi Direct group, LocalOnlyHotspot, joining Wi-Fi, file pickers, raw file reads |
ios/Runner/AppDelegate.swift |
Original photo export, iPhone-to-iPhone peer-to-peer, Wi-Fi settings shortcut |
windows/runner/beam_platform.cpp |
Wi-Fi Direct soft-AP hotspot, keep awake |
codemagic.yaml, .github/workflows/ |
Free cloud builds of the iPhone app (no Mac needed) |
DECISIONS.md |
Why things are built the way they are |
KNOWN_LIMITATIONS.md |
What still needs testing on real devices |
How a transfer works: see packages/transfer_core/lib/src/transfer/sender.dart
(top comment). Short version: handshake (TLS + pairing token) → manifest →
small files packed together, big files in 4–8 MB pieces over 3 parallel
connections → receiver hashes every piece and asks again only for bad ones →
on disconnect it reconnects and skips what is already verified → summary.
These are already installed on this PC in E:\dev (see DECISIONS.md).
On a fresh PC:
- Flutter:
git clone https://github.com/flutter/flutter.git -b stable E:\dev\flutter, then addE:\dev\flutter\binto your userPATH. - Android SDK: install Android Studio (or the command-line tools) and
run
flutter doctor --android-licenses. - Visual Studio 2022 (Community or Build Tools) with the "Desktop development with C++" workload (for the Windows app).
- Developer Mode (needed for Windows builds with plugins): Settings › System › For developers › Developer Mode = On.
- Check everything:
flutter doctor- Get the packages:
flutter pub getRun the engine tests (fast, ~15 s):
cd packages/transfer_core && dart test test/blake3_test.dart test/unit_test.dartThe big integration test (1,000 files + 2.2 GB, two forced disconnects; needs ~5 GB free disk, takes 2 minutes):
cd packages/transfer_core && dart test test/integration_test.dartSpeed benchmark (prints MB/s on localhost):
cd packages/transfer_core && dart compile exe bin/benchmark.dart -o build/benchmark.exe && build/benchmark.exeApp checks:
flutter analyzeflutter testflutter run -d windowsThe first time you share, Windows Firewall asks about Beam Share: allow it on private networks, otherwise phones can't reach the PC.
- On the phone: Settings › About › tap Build number 7 times, then Developer options › USB debugging on.
- Plug it in, accept the prompt, then:
flutter run -d androidOr build the APK and copy it to the phone:
flutter build apk --releaseThe APK is build/app/outputs/flutter-apk/app-release.apk (also in
release/). Open it on the phone and allow "install unknown apps".
flutter build windows --releaseThe app is the whole folder build/windows/x64/runner/Release/ (zip it;
beam_share.exe needs the DLLs and data/ next to it).
Two free pieces: a cloud Mac builds the app, and SideStore/AltStore on your Windows PC installs it on the iPhone with your normal Apple ID.
Free-account limits (Apple's rules, not ours):
- The app must be refreshed every 7 days (AltServer/SideStore does it in one tap, or automatically when the PC and iPhone are on the same Wi-Fi). Your files are kept when it refreshes.
- Max 3 sideloaded apps at a time.
- The app can't join Wi-Fi by itself, so the iPhone joins the other device's offline Wi-Fi with the Camera app (scan the "iPhone Wi-Fi" code, tap Join) or in Settings. Beam Share guides you and continues on its own.
Create a free account at github.com, make a new private repository
beam_share (empty, no README), then:
cd "E:\CLAUDE AI\beam_share"git remote add origin https://github.com/YOUR-NAME/beam_share.gitgit push -u origin mainOption A: Codemagic (500 free Mac minutes/month, no credit card):
- codemagic.io › Sign up with GitHub › choose the free personal plan.
- Add application › GitHub › pick
beam_share› project type Flutter App (via codemagic.yaml). - Start new build › workflow iOS (free, unsigned IPA) › Start.
- After ~10–15 minutes open the build › Artifacts › download BeamShare-unsigned.ipa to your PC.
Option B: GitHub Actions (already in the repo):
- GitHub › your repo › Actions tab › enable workflows if asked.
- iOS unsigned IPA › Run workflow.
- When it's green, open the run › Artifacts › download
BeamShare-unsigned-ipa(a .zip containing the .ipa; unzip it).
If the build fails, copy the red error lines from the log and send them to Claude: the Swift code was written without a Mac, so a small fix may be needed on the first build.
AltStore is a well-known free, open-source sideloading tool (altstore.io). It signs the app with your Apple ID through Apple's own free developer service. Use an Apple ID you're comfortable with; some people make a separate free Apple ID just for this.
- On the PC install, from Apple's website (not the Microsoft Store): iTunes and iCloud for Windows. AltServer needs them.
- Download AltServer for Windows from altstore.io and install it. It appears as a diamond icon in the system tray (bottom right).
- Plug the iPhone in with a cable, unlock it, tap Trust This Computer.
- Tray icon › Install AltStore › choose your iPhone › enter your Apple ID.
- On the iPhone: Settings › General › VPN & Device Management › your Apple ID › Trust. On iOS 16 or newer also: Settings › Privacy & Security › Developer Mode › On (the iPhone restarts).
- Copy
BeamShare-unsigned.ipato the iPhone (iCloud Drive, or the Files app via cable) › open AltStore › My Apps ›+› pick the .ipa. AltStore signs and installs Beam Share. - Open Beam Share and allow Local Network, Camera and Photos.
- Every few days: open AltStore › My Apps › Refresh All while the PC (with AltServer running) is on the same Wi-Fi. If you forget for 7 days, the app just won't open until you refresh; nothing is lost.
(SideStore, sidestore.io, is a free alternative that refreshes from the iPhone itself without the PC after the first setup.)
If you ever buy the Apple Developer Program, the ios-testflight-paid
workflow in codemagic.yaml builds for TestFlight (no 7-day refresh) and
enables joining Wi-Fi automatically. The comments in that file list the
steps. You never need it for the app to work.
Mobile data off, Wi-Fi on on every device (it doesn't need to be connected to anything). Write down phone models, MB/s and any error.
- Phone A: Send › Photos & videos › pick ~20 photos + 1 big video ›
Next. Allow "Nearby devices"/"Location". It should say
Offline Wi-Fi "DIRECT-bs-…" is on. - Phone B: Receive › Scan QR code › tap Connect in the popup.
- Halfway: turn Phone B's Wi-Fi off for 5 s and on again → "Reconnecting…", then it continues.
- End: "✅ N files verified, 0 errors" › Open folder. Compare a photo's size/date/location with the original.
- Both iPhones: Wi-Fi and Bluetooth on in Control Center (they power Apple's peer-to-peer Wi-Fi). Keep both unlocked and close.
- iPhone B: Receive.
- iPhone A: Send › pick › Next › tap iPhone B under Nearby devices.
- iPhone B: Accept.
- Android/PC: Send › pick › Next. Wait for
Offline Wi-Fi … is on. - Tap iPhone Wi-Fi above the QR code.
- iPhone: open the Camera app (not Beam Share), point at the code, tap the Join "DIRECT-bs-…" banner.
- On the Android/PC tap Beam Share code.
- iPhone: Beam Share › Receive › Scan QR code › scan it. The transfer starts. (If you scan the Beam Share code first, the app shows the Wi-Fi name, copies the password, and offers Open Wi-Fi settings; join there, come back, and it continues by itself.)
The iPhone can't create a Wi-Fi network, so the receiver makes it:
- Android/PC: Receive › Show my code. Wait for
Offline Wi-Fi … is on. - Tap iPhone Wi-Fi › iPhone Camera app › scan › Join.
- Android/PC: tap Beam Share code.
- iPhone: Beam Share › Send › pick › Next › Scan receiver's code › scan. (Or, now that both are on the same network, the receiver appears under Nearby devices: tap it and accept on the receiver.)
- Offline: like A. A PC can't scan with a camera, so on the phone tap Copy code, send it to the PC (e.g. a USB cable or a note), and use Receive › Paste code on the PC.
- Easier: put both on the same home Wi-Fi. Receiver: Receive. Sender: Send › pick › Next › tap the receiver under Nearby devices › Accept.