Your files. Always within reach.
FileBeacon is an Android app that turns your phone into a wireless file server. Start the server, open the displayed URL on any device sharing the same WiFi network, and you have a full-featured file manager in your browser — no cables, no cloud, no accounts required.
- Browse the full phone file system from any browser
- Upload multiple files with drag-and-drop — original filenames always preserved
- Download files individually or bulk-select for batch download
- Create folders, rename, move, copy, and delete files
- Multi-file selection with batch operations (move, copy, delete, archive)
- Inline search across file names and file contents
- Image gallery with slideshow mode
- Audio and video media player with Google Cast support
- Inline PDF viewer with PDF-to-image conversion
- Full-text search with content matching and line previews
- Create ZIP archives from any selection of files
- Extract ZIP, RAR, TAR, and GZ archives
- Browse archive contents before extracting
- 5 color themes: Light, Dark, Blue, Green, Purple
- 3 icon packs: Emoji (default), Minimal, Colorful
- All preferences persist across sessions
- One-tap server start and stop
- Real-time WiFi status indicators
- Displays connected network (SSID) and the server URL
- Configurable server port
- Nearby device discovery via mDNS
- Optional HTTP Basic Auth password protection
- Multiple Material3 app themes (Light, Dark, AMOLED, Blue, Green, Purple, Sunset)
- Portrait and landscape layouts
FileBeacon runs NanoHTTPD as an embedded HTTP server inside a foreground service on your Android device. When started, the app shows a local URL such as http://192.168.1.100:8080. Any device on the same WiFi network can open that URL in a browser to access the full web UI.
The web UI is plain HTML, CSS, and JavaScript, served directly from the app's assets. No internet connection is needed — everything runs on your local network.
- Android 8.0 (API 26) or higher
- Both devices connected to the same WiFi network
- Any modern browser (Chrome, Firefox, Safari, Edge)
| Permission | Purpose |
|---|---|
INTERNET |
Run the local web server |
ACCESS_WIFI_STATE |
Read IP address and connection info |
ACCESS_FINE_LOCATION |
Required by Android to read the WiFi SSID |
READ_MEDIA_* / READ_EXTERNAL_STORAGE |
Browse and serve files |
WRITE_EXTERNAL_STORAGE |
Save uploaded files (Android ≤ 12) |
MANAGE_EXTERNAL_STORAGE |
Full file system access (Android 11+) |
CHANGE_WIFI_MULTICAST_STATE |
mDNS device discovery |
FOREGROUND_SERVICE |
Keep the server running while the app is backgrounded |
- Clone the repository
- Open in Android Studio (Hedgehog or newer)
- Sync Gradle
- Build and run on a device or emulator
./gradlew assembleDebugThe Montserrat font is required. Download from Google Fonts and place the files in app/src/main/res/font/:
Montserrat-Regular.ttf→montserrat_regular.ttfMontserrat-Bold.ttf→montserrat_bold.ttf
| Library | Version | Purpose |
|---|---|---|
| NanoHTTPD | 2.3.1 | Embedded HTTP server |
| NanoHTTPD Apache FileUpload | 2.3.1 | Multipart file upload parsing |
| JmDNS | — | mDNS/Bonjour device discovery |
| Gson | 2.13.2 | JSON serialization |
| Apache Commons Compress | 1.28.0 | ZIP/TAR archive support |
| Junrar | 7.5.7 | RAR archive extraction |
| Kotlin Coroutines | 1.10.2 | Async file search |
| Material3 | — | UI components |
app/src/main/
├── java/com/jphat/filebeacon/
│ ├── MainActivity.kt # App entry point, UI, server control
│ ├── WebServer.kt # NanoHTTPD server, all HTTP endpoints
│ ├── FileManager.kt # File operations (save, delete, move, copy)
│ ├── FileExplorerService.kt # Foreground service wrapper
│ ├── ArchiveManager.kt # ZIP/RAR/TAR create and extract
│ ├── SearchManager.kt # File name and content search
│ ├── AuthManager.kt # HTTP Basic Auth
│ ├── DeviceDiscoveryManager.kt # mDNS advertising and discovery
│ ├── ThemeManager.kt # App theme management
│ ├── ThemeSelectionDialog.kt # Theme picker dialog
│ ├── PdfConverter.kt # PDF to image conversion
│ ├── ResumableTransferManager.kt # Resume offset tracking
│ └── TransferTaskManager.kt # Upload/download task tracking
├── assets/
│ ├── script.js # Web UI JavaScript
│ ├── style.css # Web UI styles and themes
│ ├── manifest.json # PWA manifest
│ └── sw.js # Service worker
└── res/
├── layout/activity_main.xml # Portrait layout
└── layout-land/activity_main.xml # Landscape layout
By default the server is accessible to anyone on the local network. To restrict access:
- Tap Security Settings in the app
- Set a password
- Enable authentication
Once enabled, the browser will prompt for credentials. Access uses HTTP Basic Authentication.
Note: HTTP Basic Auth is not encrypted. Use password protection only on trusted private networks. Never expose the server port to the public internet.
This project is open source. See LICENSE for details.
Built by jPHat