kiFOSSk is a minimal, privacy-focused Android kiosk browser designed for displaying remote dashboards (e.g., ADS-B flight trackers, Home Assistant, Grafana) on dedicated hardware.
Built with zero Google Play Services dependencies, it runs natively on AOSP, GrapheneOS, and standard Android devices. Perfect for turning old phones into always-on informational displays.
What's New:
- Full gesture conflict fix β WebView long-press context menu completely disabled
- CSS injection prevents text selection highlighting in kiosk mode
- Optional auto-refresh with configurable interval (10sβ15min presets)
- Auto-refresh pauses on background to preserve battery
Full Changelog β | Download APK | F-Droid | β Ko-fi
- Home Launcher Mode: Automatically launches on boot without needing Device Owner privileges.
- Lockscreen Bypass: Uses
setShowWhenLocked()to skip the lock screen on startup. - WebView Kiosk: Fullscreen immersive mode, back button disabled, long-press to access settings.
- Gesture Protection: Long-press restricted to bottom-right corner zone (Β±80px) with 10-second cooldown to prevent accidental triggers. WebView native context menu fully disabled β no text selection, no "Copy/Share" popups.
- Auto-Refresh: Optional automatic page reload with configurable intervals (10s, 30s, 1min, 5min, 15min). Pauses when app is backgrounded to save battery.
- Network Resilience: Automatic retry with exponential backoff (max 10 attempts) when offline β no infinite loops or battery drain.
- Battery Optimization: Includes a one-click dialog to request "Unrestricted" battery usage.
- Customizable: Set dashboard URL, screen timeout, orientation (portrait/landscape/auto), boot autostart, and auto-refresh interval.
- Privacy First: No analytics, no telemetry, no internet permissions beyond your configured URL.
- URL Sanitization: Only
http/httpsschemes allowed β blocksjavascript:,file:,intent:,content:,data:redirects.
- ADS-B Flight Displays: Perfect for aviation enthusiasts near airports.
- Home Dashboards: Always-on view of Home Assistant, Prometheus, or custom Flask apps.
- Digital Signage: Simple, reliable display for offices, lobbies, or retail spaces.
- Privacy Kiosks: Run on GrapheneOS for maximum security in public spaces.
Now available! Install directly from F-Droid! Auto-updates when new versions release.
- Download the latest
kiFOSSk-vX.Y.Z-release.apkfrom the Releases page. - Transfer to your device and open the APK file.
- Enable "Install Unknown Apps" when prompted.
- Tap "Install" (may show Play Protect warning β tap "Install anyway").
- Open the app, configure your dashboard URL in Settings.
- Tap "Set as Home Launcher" when prompted (or go to Settings > Apps > Default Apps > Home App).
Note: Google Play Protect may warn about "unauthorized developer" when installing. This is expected for sideloaded apps β kiFOSSk is not signed by a Google-certified certificate authority. The app contains no malicious code. Tap "Install anyway" to proceed.
Samsung / One UI users: Play Protect is especially aggressive on Samsung devices due to Knox integration. If installation is silently blocked:
- Open Google Play Store β Menu β Play Protect
- Tap Scan
- If kiFOSSk appears under "Harmful apps found," tap Details β Allow anyway
- Retry the APK installation
This does not happen on OxygenOS, Pixel, or GrapheneOS β those platforms show the "Install anyway" button directly.
git clone https://github.com/ShinyDiscoBallsDev/kiFOSSk.git cd kiFOSSk ./gradlew assembleRelease
APK located at: app/build/outputs/apk/release/kiFOSSk-X.Y.Z-release.apk
- Open Settings: Long-press the bottom-right corner of the screen for 2 seconds.
- Enter URL: Input your dashboard address (e.g., http://192.168.50.152:3001).
- Enable Boot Autostart: Toggle the switch ON.
- Battery Exemption: Tap "Request Unrestricted Battery" and confirm in system settings.
- Set as Home App: Tap "Set as Home Launcher" and select "Always".
- Reboot: The app should launch automatically on boot.
Note: Settings access is restricted to the bottom-right corner zone with a 10-second cooldown between accesses to prevent accidental triggers during device movement.
If your dashboard doesn't auto-refresh server-side:
- Long-press the bottom-right corner to open Settings
- Toggle "Enable automatic page reload" ON
- Select your desired interval (10sβ15min)
- Tap "Save & Launch"
Auto-refresh automatically pauses when the app is backgrounded and resumes when the page reloads. This prevents unnecessary battery drain when nobody is viewing the display.
If kiFOSSk is set as your default home launcher and you need to use other apps:
- Long-press the bottom-right corner to open Settings
- Tap "Switch to Different Launcher"
- Select "System Launcher" or your preferred home screen
- Swipe through the lockscreen (normal behavior resumes without kiFOSSk as home)
- Use your device normally
- To return to kiosk mode: Open kiFOSSk β Settings β "Set as Home Launcher"
Note: When switching away from kiFOSSk as your home launcher, the lockscreen will appear. This is expected Android behavior β the lockscreen bypass only applies while kiFOSSk is the active home app.
Alternatively: Long-press the home button and select kiFOSSk as temporary launcher.
You can uninstall via ADB without changing your launcher:
adb uninstall com.shinydiscoballsdev.kifossk
Or via phone: Settings > Apps > kiFOSSk > Uninstall. The system will prompt you to select a new default launcher after removal.
- Orientation: Choose Portrait, Landscape, or Auto (state preserved across rotation).
- Screen Timeout: Toggle to keep screen on while charging.
- Auto-Refresh: Enable/disable with configurable interval (10sβ15min).
kiFOSSk was built with a minimal attack surface philosophy. Every permission, dependency, and background process was scrutinized β if it wasn't strictly necessary for a kiosk browser, it was cut.
- URL Sanitization:
UrlValidator.ktblocks all non-HTTP(S) schemes (javascript:,file:,intent:,content:,data:). - Gesture Protection: Bottom-right corner zone (Β±80px) + 10s cooldown prevents accidental settings access. WebView native long-press context menu fully disabled β no text selection, no "Copy/Share" popups.
- CSS Hardening:
user-select: noneinjected on page load to prevent text selection highlighting. - Network Safety: Coroutine-based retry with
MAX_RETRIES=10and exponential backoff β no infinite loops. - Minimal Permissions: Only
INTERNET,ACCESS_NETWORK_STATE,REQUEST_IGNORE_BATTERY_OPTIMIZATIONS. That's it. - No Background Services: All logic runs in the foreground Activity. No foreground service, no background workers.
- Local Storage Only: All settings stored in private SharedPreferences. No cloud sync.
- Zero Dependencies: No Google Play Services, no Firebase, no analytics SDKs.
- Network Isolation: Only connects to the URL you explicitly configure.
kiFOSSk is purpose-built as a simple kiosk browser β nothing more, nothing less. Because the scope is intentionally narrow, the permission footprint is minimal:
| Permission | Why kiFOSSk Needs It |
|---|---|
INTERNET |
Fetch your dashboard URL |
ACCESS_NETWORK_STATE |
Detect connectivity for retry logic |
REQUEST_IGNORE_BATTERY_OPTIMIZATIONS |
Allow always-on display without Doze killing the app |
3 permissions. No location tracking. No camera access. No NFC. No notification spam. No background services.
For users who prioritize simplicity, privacy, and transparency over feature breadth, kiFOSSk provides a focused solution that does one thing well.
This app is fully compatible with GrapheneOS.
- Lockscreen: May still appear if "Hardened Mode" is enabled. Disable lockscreen or accept manual unlock.
- Background Restrictions: Ensure "Unrestricted" battery mode is set manually.
Most stock Android devices are well-supported out of the box.
- Adaptive Battery: May need to exempt kiFOSSk from Adaptive Battery restrictions (Settings > Battery > Adaptive Preferences > Exempt apps).
- Doze Mode: Kick the device awake after heavy idle periods β kiosk mode should prevent this automatically.
- App Standby Buckets: Keep kiFOSSk in the "Active" bucket by using it regularly.
Verified on OxygenOS 13+ with
- zero manual configuration required.
- All permission prompts appear automatically when needed.
- No Developer Options required.
- No additional settings changes needed beyond initial setup.
- Tested after factory reset β only required: install APK, grant permissions, set as Home Launcher.
β οΈ Known Limitation: After major Android system updates, lock screen may appear once. Normal reboots work without issue. This is an Android OS-level security measure, not a kiFOSSk bug.
Google Play Protect may warn about "unauthorized developer" when sideloading β tap "Install anyway" to proceed.
Samsung's One UI has the most aggressive background restrictions.
- Put Apps to Sleep: Settings > Battery > Background Usage Limits > Sleeping Apps > Remove kiFOSSk.
- Never Optimizing Apps: Settings > Battery > Background Usage Limits > Never Optimizing Apps > Add kiFOSSk.
- Secure Folder: If you use Secure Folder, install kiFOSSk outside of it for proper boot integration.
- Play Protect: May silently block installation. See sideloading note above for workaround.
MIUI is notorious for killing background apps.
- Autostart: Settings > Apps > Permissions > Autostart > Enable for kiFOSSk.
- Battery Saver: Settings > Apps > Manage Apps > kiFOSSk > Battery Saver > No restrictions.
- Security App: Open the Security app > Battery > App Battery Saver > kiFOSSk > No restrictions.
Generally work well, but check your specific ROM's power management settings.
- Battery Optimization: Look for equivalent "Ignore optimizations" or "Unrestricted" settings.
- SELinux: If building from source, ensure SELinux is permissive or properly configured for your ROM.
If boot autostart fails after initial setup:
- Check Home Launcher Assignment: Settings > Apps > Default Apps > Home App > Select kiFOSSk.
- Disable Battery Saver: Turn off global battery saver mode while using the device as a kiosk.
- Stay Awake Setting: Enable Developer Options > Stay awake (keeps screen on while charging).
- Restart Test: Reboot the device twice to ensure settings persist through boot cycles.
- Logcat Debugging: Use adb logcat | findstr "kifossk" to identify any startup errors.
| Issue | Severity | Workaround |
|---|---|---|
| Lock screen may appear after Android system updates (not on normal reboots) | Low | Unlock and reopen app |
Contributions are welcome! Whether it's bug fixes, new features, or documentation improvements:
- Fork the repository.
- Create a feature branch (git checkout -b feature/amazing-feature).
- Commit your changes (git commit -m 'Add amazing feature').
- Push to the branch (git push origin feature/amazing-feature).
- Open a Pull Request.
If kiFOSSk has been useful, consider buying me a coffee:
kiFOSSk is and always will be free and open source. Donations help cover development time and device testing.
MIT License β see LICENSE for details.
Created by ShinyDiscoBallsDev