muhiddin@grimoire:~$ cat ./apps/wifile/README.md

Wifile_

Tools · Android · iOS

Offline file transfer.

A peer-to-peer file transfer tool for devices on the same Wi-Fi network. It discovers nearby devices automatically, and files move without an internet connection or any server in between.

platform
Android · iOS
developer
Muhiddin İlhan
server
none, local network only
Google Play ↗App Store · soon
Wifile home screen

## how it works

  1. 01

    Open Receive

    The receiver advertises itself on the local network and shows its name, IP and a QR code.

  2. 02

    Find the device

    The sender discovers receivers automatically, or you scan the QR code or add the IP by hand.

  3. 03

    Accept the offer

    The receiver sees the sender’s name, file count and total size, then accepts or rejects.

  4. 04

    Files stream over

    Files are written straight to disk, each one is acknowledged, and the transfer is saved to history.

## features

Offline transfer

Works on the same Wi-Fi or a phone hotspot, with no cable or account.

Auto discovery

Bonjour/NSD plus a subnet scan lists nearby devices.

Connect via QR

Scan the receiver’s QR code instead of typing an IP.

Receiver approval

Every transfer needs the receiver’s consent; busy and timeout cases are handled separately.

Large files

Multi-GB videos are streamed without buffering in memory, with live speed and ETA.

iPhone ↔ Android

Works cross-platform, and sent or received files open from history in one tap.

## screens

Wifile – Home
Home
Wifile – Send
Send
Wifile – Incoming offer
Incoming offer
Wifile – Transfer
Transfer
Wifile – QR connect
QR connect

## technical details

tech stack

FlutterP2PNetworkAIAndroidiOSGitHub

challenge

Reliable discovery when mDNS is blocked on some networks or hotspots.

solution

The service is advertised and browsed over Bonjour. In parallel, the local /24 subnet is swept with 48 concurrent workers and only hosts that answer with a valid “pong” are listed.

challenge

Keeping raw bytes from corrupting the protocol, and handling interrupted transfers.

solution

A custom TCP protocol: newline-delimited JSON control messages and length-prefixed raw file bytes. Files are written as .part and renamed on completion, and deleted if the connection drops.

challenge

Platform quirks: non-ASCII device names on iOS, files missing from the Android gallery, the screen sleeping mid-transfer.

solution

Only an ASCII ID is advertised over Bonjour and the display name comes from the ping reply. A platform channel triggers an Android media scan, and the screen stays awake during transfers.