A Dufs-based, lightweight cross-platform file distribution GUI optimized for air-gapped LANs and restricted industrial environments. Built on dufs. Zero config, zero barrier — share a folder or a single file from one device, and anyone with a browser can access and transfer it. The other side needs no app.
The other side doesn't need an app. Install DufsHub on ONE device, start the server, and anyone with a browser can upload and download files.
| Feature | |
|---|---|
| 📱 One device is enough | The rest use a browser |
| 📄 Folder or single file | Share a full directory or just one file |
| ⬆️⬇️ Bidirectional | Upload AND download, not just send |
| 🔗 Just open a link | QR code or URL — that's all the other side needs |
| 🔐 Secure | Optional password auth, CORS control |
| 🔀 Fine-grained permissions | Upload, delete, search, archive download — toggle each one |
| 🎨 Customizable | 6 color schemes + dark / light mode |
| 🌐 Multilingual | 简体中文 · 繁體中文 · English |
| 📦 Zero setup | Self-contained — no external dependencies |
| Scenario | How |
|---|---|
| 🏭 Factory / industrial offline transfer | One PC starts → operators scan → distribute firmware / logs / docs |
| 🏠 Home file sharing | Phone hotspot → browser access → transfer photos / docs |
| 💼 Office quick transfer | One PC starts → colleagues scan → share project files |
| 🎓 Classroom distribution | Teacher starts → students scan → download courseware |
| 🔧 Device debugging | Embedded device → phone hotspot → download logs |
| 📷 Photo dump | Camera/phone starts → PC bulk downloads |
| Platform | File | |
|---|---|---|
| 🪟 Windows | dufshub-*-windows-x64-setup.exe (installer) or .zip (portable) |
✅ Tested |
| 🤖 Android | dufshub-*-android-arm64.apk |
✅ Tested |
| 🐧 Linux x64 | .AppImage (zero deps) or .deb |
✅ Tested |
| 🐧 Linux ARM64 | .AppImage or .deb (Kylin/UOS compatible) |
✅ Tested |
| 🍎 macOS | DufsHub-*-macos-arm64.zip |
🤖 Also available on F-Droid (pending review)
- Pick a folder or a single file
- Tap "Start Server"
- Scan QR code or enter URL in browser (port required)
- Share files — done!
Recent builds also add a smoother start/stop transition state, so slower devices feel less abrupt when the embedded file server is starting or shutting down.
Simplest setup: All devices on the same WiFi or hotspot.
| Environment | |
|---|---|
| 🏠 Same WiFi | Just connect and share |
| 📱 Phone hotspot | One device creates a hotspot, others join — no router needed |
| 🌍 Remote access | Works with ZeroTier, Tailscale, EasyTier, or any VPN |
🔒 All transfers happen directly between your devices. No data passes through third-party servers.
⚠️ DufsHub binds to all network interfaces by default (0.0.0.0)
| Network | Recommendation |
|---|---|
| Home WiFi | ✅ Safe — LAN only |
| Public WiFi | |
| Corporate network | |
| Public internet | ❌ Not recommended — use VPN instead |
Best practices:
- Enable auth in public environments
- Stop the server when done
- Review access logs periodically
Symptom: Can't list files, "Need all files access permission"
Fix: Settings → Apps → DufsHub → Permissions → Allow "All files access"
Symptom: Start fails, "Port XXX already in use"
Fix: Change port (try 8080–9000 range) or kill the occupying process
Symptom: Double-click does nothing
Fix:
chmod +x dufshub-*.AppImage
./dufshub-*.AppImageSymptom: "Can't verify developer" on open
Fix:
xattr -d com.apple.quarantine DufsHub.appSymptom: Other devices can't connect
Fix: Allow DufsHub through Windows Firewall (you'll be prompted on first launch)
Q: Does the other side need DufsHub? A: No! Only one device runs DufsHub. Others just open a browser.
Q: Can I share a single file instead of a whole folder? A: Yes. Choose a single file and DufsHub will expose just that file through the browser.
Q: Can I access it remotely? A: LAN by default. For remote access, use ZeroTier / Tailscale / EasyTier.
Q: Is HTTPS supported? A: Not yet. Planned for a future release.
Q: Max file size? A: No hard limit. Tested with a single 70GB+ archive over gigabit LAN — sustained full bandwidth throughout. Large downloads may have a brief delay while loading file info, which is normal. Actual speed depends on filesystem, disk I/O, and Wi-Fi throughput.
Q: How many devices can connect at once? A: No hard limit — depends on bandwidth and device performance.
Q: Are files uploaded to the cloud? A: No! Everything stays local. Transfers are device-to-device.
- Flutter SDK 3.41+
- Windows: VS Build Tools 2022 (C++ workload)
- Android: Android SDK, NDK
- Linux: clang, lld, llvm, libgtk-3-dev
- macOS: Xcode
git clone https://github.com/zocs/dufshub.git
cd dufshub
flutter pub get
# Run (debug)
flutter run -d windows
flutter run -d android
# Build
flutter build windows --release
flutter build apk --release# Linux (x64 or ARM64)
bash scripts/build_linux.sh x86_64
bash scripts/build_linux.sh aarch64
# macOS (ARM64)
bash scripts/build_macos.sh aarch64Output: AppImage, deb, rpm, tar.gz (Linux) and zip (macOS).
# Android release APK (optionally pass signing env vars)
bash scripts/docker_build_android.sh
# Linux x64 packages
bash scripts/docker_build_linux.sh x86_64Notes:
- The Docker workflow currently supports Android and Linux x64 only.
- Windows Docker packaging can be explored later.
- macOS and iOS remain GitHub Actions-only because they require native Apple toolchains.
- The Android Docker image generates
android/local.propertiesinside the container so host SDK paths are not required. - Outputs land under
docker_build/:docker_build/android/outputs/apk/(APKs) anddocker_build/linux/x86_64/outputs/packages/(AppImage/deb/tar.gz).
GitHub Actions builds all platforms on tag push (v*) and creates a release automatically.
lib/
├── main.dart # Entry + window init
├── app.dart # MaterialApp + theming
├── constants.dart # Reverse-domain + MethodChannel constants
├── l10n/app_localizations.dart # i18n (zh/en/zhTW)
├── models/
│ ├── server_config.dart # Config model + persistence
│ └── transfer_log.dart # Transfer log parser
├── pages/
│ ├── home_page.dart # Home: dir / perms / start / QR
│ ├── settings_page.dart # Settings: theme / color / language
│ ├── setup_wizard_page.dart # First-run wizard
│ └── log_page.dart # Transfer log viewer
└── services/
├── dufs_service.dart # dufs lifecycle (platform dispatch)
└── dufs_ffi.dart # FFI bindings (desktop)
scripts/
├── build_dufs.sh # Cross-compile dufs (7 platforms)
├── build_linux.sh # Linux packaging (AppImage/deb)
├── build_macos.sh # macOS packaging
└── dufs-ffi/lib.rs # Rust FFI wrapper
android/app/src/main/kotlin/.../DufsForegroundService.kt # Android native service
installer/dufshub.nsi # Windows NSIS installer
Desktop builds embed dufs through Rust FFI; Android uses a foreground native service to survive Activity recreation on lower-memory devices.
DufsHub is built on top of dufs — a brilliant utility file server by sigoden. Without dufs, DufsHub wouldn't exist. Thanks for making file sharing so simple.
DufsHub — the hub for dufs.
