Free open-source kiosk mode for Android tablets
Alternative to Fully Kiosk Browser
Website โข Installation โข FAQ โข Features
A Rushb Project
FreeKiosk is a completely free and open-source kiosk mode application for Android tablets. It's the perfect alternative to expensive commercial solutions.
Built by Rushb, a French tech company passionate about creating innovative open-source solutions.
- โ 100% Free - No hidden fees, no subscriptions
- โ Open Source - MIT Licensed, fully auditable
- โ No Tracking - Your privacy matters
- โ Device Owner Support - Complete lockdown mode
- โ Optional Screen Pinning - User choice: full lock or normal mode
- โ HTTPS Support - Works with self-signed certificates
- โ Easy Setup - One-time ADB command
- โ Home Assistant Ready - REST API + MQTT with auto-discovery
- Full Kiosk Browser Mode with Android Device Owner API
- External App Mode (Beta) - Lock any Android app instead of a WebView
- Optional Screen Pinning - Choose between full lock or normal mode
- WebView Display for any URL (dashboards, websites, etc.)
- HTTPS Support - Including self-signed certificates
- Password Protection - Default: Numeric PIN (4-6 digits). Optional: Advanced mode with alphanumeric passwords (letters, numbers, special characters)
- Immersive Fullscreen - No navigation/status bars
- Reset Settings - Clear configuration from within the app
- Exit Kiosk Mode with restrictions deactivation
- 40+ Endpoints - Full device control via HTTP
- Sensors: Battery, brightness, light, proximity, storage, memory, WiFi
- Controls: Screen on/off, brightness, volume, navigation, reload
- Audio: Play sounds, TTS, beep notifications
- Screenshot: Capture screen as PNG image
- Camera Photo: Take photos via front/back camera as JPEG
- Remote Control: Android TV navigation (D-pad, back, home, etc.)
- Optional API Key authentication
- Full API Documentation
- 27 Entities auto-discovered in Home Assistant via MQTT Discovery
- Sensors: Battery, brightness, light, WiFi SSID/signal, IP, memory, storage, volume, URL, app version
- Binary Sensors: Screen on/off, screensaver, charging, kiosk mode, device owner, motion
- Controls: Brightness slider, volume slider, screen power switch, screensaver switch
- Buttons: Reload, wake, reboot, clear cache, lock
- Text: Navigate to URL
- Additional Commands: TTS, toast, audio play/stop/beep, launch app, execute JS, URL rotation
- Push-based: Real-time status updates (configurable interval, default 30s)
- LWT: Automatic availability tracking (online/offline)
- Auto-reconnect: Handles WiFi drops and broker restarts
- Always-on Motion Detection: Optional camera-based motion sensor
- Full MQTT Documentation
- Headless Provisioning - Configure via ADB without touching the screen
- Mass Deployment - Script deployment across multiple devices
- Full Config Support - URL, app lock, REST API, screensaver, etc.
- Secure - PIN required (first setup or modification)
- Full ADB Configuration Guide
- Complete Device Lockdown
- Auto-start on Boot - Launch automatically
- System App Suspension (Samsung bloatware, etc.)
- Notification Blocking
- Home Button Disabled
- Recent Apps Disabled
- Settings Access Blocked
- Status Bar Hidden
- Launch Any App - Select from installed apps picker
- 5-Tap Anywhere - Tap 5 times rapidly anywhere on screen to access settings (no corner targeting needed)
- Optional Visual Indicator - Show bottom-right indicator (5-tap works everywhere regardless)
- Auto-Relaunch - Automatically restart app on Home/Back press
- Lock Task Support - Full kiosk lockdown for external apps
- PIN Protection - Require PIN to access settings
- Test Mode - Safety back button (enabled by default)
- Blocking Overlay - Touch Logger with countdown and coordinate display
- Toggle Screen Pinning ON/OFF - User decides the security level
- Default OFF - Non-intrusive by default
- In-app Reset - Clear settings without ADB access
- ๐ Home Assistant Dashboards
- ๐จ Hotel Information Displays
- ๐ฝ๏ธ Restaurant Digital Menus
- ๐ช Retail Point of Sale
- ๐จ Museum Exhibits
- ๐ Digital Signage
- ๐ฎ Event Check-in Stations
- ๐ฅ Healthcare Kiosks
- ๐ Transportation Info Boards
- Download the latest APK from Releases
- Install on your Android tablet (8.0+)
- Configure your URL and PIN in settings
- Optional: Enable "Pin App to Screen" for full lockdown
- Start kiosk mode
For complete lockdown with full security, follow these steps:
- Android 8.0+ tablet
- Windows/Mac/Linux PC
- USB cable
- ADB installed (Download)
1. Factory Reset your tablet
- Settings โ System โ Reset โ Factory reset
โ ๏ธ IMPORTANT: DO NOT add Google account after reset
2. Enable USB Debugging
- Settings โ About tablet โ Tap "Build number" 7 times
- Settings โ Developer options โ Enable "USB debugging"
3. Install FreeKiosk
- Transfer APK to tablet or download from Releases
- Install the APK
4. Activate Device Owner (on PC)
Connect tablet to PC via USB, then run:
adb shell dpm set-device-owner com.freekiosk/.DeviceAdminReceiver
text
You should see: Success: Device owner set to package com.freekiosk
text
5. Configure FreeKiosk
Option A: Via UI
- Launch FreeKiosk
- Tap 5 times anywhere on the screen (optional visual indicator available)
- Enter default PIN: 1234
- Configure your URL
- Optional: Enable "Pin App to Screen" for full lockdown
- Save settings
Option B: Via ADB (Headless Provisioning) ๐
# Configure and lock to external app
adb shell am start -n com.freekiosk/.MainActivity \
--es lock_package "com.example.myapp" \
--es pin "1234"
# Or configure WebView URL
adb shell am start -n com.freekiosk/.MainActivity \
--es url "https://your-dashboard.com" \
--es pin "1234"๐ Full ADB Configuration Guide
Done! Your tablet is now in kiosk mode.
- Tap 5 times anywhere on the screen (optional visual indicator available)
- Enter PIN (default: 1234)
- Access Settings screen
- ๐ URL to Display - Your dashboard/website URL
- ๐ PIN Code - 4-6 digit security code (change from default!)
- ๐ Pin App to Screen - Toggle ON for full lockdown, OFF for normal mode
- ๐ Automatic Reload - Auto-reload page on error
- ๐ Show Status Bar - Display battery, WiFi, Bluetooth, and system icons
- ๐งช Test Mode - Enable back button in External App Mode (default: ON)
- ๐ Reset All Settings - Clear configuration (useful in Device Owner mode)
- ๐ช Exit Kiosk Mode - Close app and disable restrictions
- User can swipe up to exit
- Normal Android navigation
- Good for: trusted environments, testing
- All gestures blocked
- Recent apps disabled
- Status bar hidden
- Only 5-tap anywhere on screen + PIN allows exit
- Good for: public kiosks, unattended devices
| Feature | FreeKiosk | Fully Kiosk |
|---|---|---|
| Price | ๐ข Free | ๐ด โฌ7.90/device |
| Open-source | ๐ข MIT | ๐ด Closed |
| Device Owner | โ | โ |
| REST API | โ 40+ endpoints | โ |
| MQTT + HA Discovery | โ 27 entities | โ |
| Home Assistant | โ | โ |
| Sensors (light, proximity) | โ | โ |
| Screenshot API | โ | โ |
| Audio playback | โ | โ |
| Remote control | โ | โ |
| HTTPS Self-signed | โ | |
| In-app Reset | โ | |
| Auto-start | โ | โ |
| Camera photo API | โ | โ |
| Cloud MDM | Roadmap | โ |
- React Native 0.75+ with TypeScript
- Kotlin native modules for Device Owner API
- Android SDK 26+ (Android 8.0+)
- WebView with custom SSL handling
- ๐ก MQTT + Home Assistant Auto-Discovery: 27 auto-discovered HA entities (sensors, switches, buttons, controls)
- ๐ก Push-based status: Periodic state publishing, LWT availability tracking, auto-reconnect
- ๐ก 20 MQTT commands: TTS, toast, audio, launch app, execute JS, URL rotation, restart UI, and more
- ๐ Samsung Audio Fix: Fixed audio muted in Lock Mode on Samsung/OneUI devices
- ๐ง Fire OS Camera/Mic Fix: Auto-grant WebView media permissions on Echo Show / Fire tablets
- ๐ Inline PDF Viewer: PDFs open directly in-app via bundled PDF.js โ no Google Docs needed
- โฟ AccessibilityService: Cross-app keyboard injection for External App mode (privacy ROM compatible)
- ๐ Screen Lock without Device Owner: 4-tier fallback (Device Owner โ Device Admin โ Accessibility โ dim)
- ๐ Key Injection Fix: Replaced
InstrumentationwithdispatchKeyEvent()for privacy ROM compatibility
- โจ๏ธ Keyboard Emulation API: Full keyboard input, shortcuts & text typing via REST
- ๐ GPS Location API: Device coordinates via
/api/location - ๐ Enriched Battery API: Temperature, voltage, health & technology fields
- ๐ Lock Device API & ๐ Restart UI API: New remote control endpoints
- ๐ฃ๏ธ Text-to-Speech (TTS): Native Android TTS via REST API
- ๐ Volume Read API: Current volume level via
/api/volume - ๐ Screen Sleep Scheduler Fix: Fixed black screen, lockout & wake-on-touch bugs
- ๐ Power Menu Fix (TECNO/HiOS): Fixed power menu dismissed immediately
- ๐งน Clear Cache Fix: Now performs full native cache clear
- ๐ Update 404 Fix: Retrieves actual APK URL from GitHub assets
- โฑ๏ธ Inactivity Return - Scroll to Top: Smoothly scrolls to top when already on start page
- ๐ URL Filtering (Blacklist / Whitelist): Control allowed URLs with wildcard patterns
- ๐ URL Filtering Form Fix: Fixed form submissions blocked in whitelist mode
- ๐ก NFC Monitoring Fix: Fixed relaunch loop when NFC is enabled
- ๐พ Backup/Restore Fix: Added 20 missing settings keys to export/import
- ๐ฑ Status Bar Rotation Fix: Fixed custom status bar disappearing after screen rotation in external app mode
- ๐ง Lock Mode False Warning Fix: Fixed "Device Owner not configured" false warning due to JS/native method signature mismatch
- ๐จ๏ธ WebView Print Support: Native Android printing via
window.print()interception- Supports all connected printers (WiFi, Bluetooth, USB, Cloud Print, PDF)
- ๐ URL Filtering (Blacklist / Whitelist): Control which URLs users can navigate to
- Blacklist or Whitelist mode with wildcard pattern support
- Works with traditional navigation and SPA/client-side routing
- โฌ
๏ธ Back Button Mode via ADB:
back_button_modeparameter synced to native SharedPreferences โ ๏ธ Usage Stats Permission Warning: Permission check and grant button in Settings- ๐ง Back Button Fix: Fixed back button completely blocked when
test_mode=false - ๐ ADB Config Fix:
lock_packagenow takes priority overurlfor display mode - ๐ Auto Launch on Boot Fix: Fixed wrong AsyncStorage database name in native Kotlin files
- ๐ Settings Buttons Fix: Lock task temporarily stopped before opening system settings
- ๐ Navigation Buttons Blocked in Lock Mode: Fixed Home/Recents buttons not properly blocked in kiosk lock mode
LOCK_TASK_FEATURE_NONEcorrectly blocks all system navigation by default- Updated
hideSystemUI()to modernWindowInsetsControllerAPI for Android 11+
- ๐ Inactivity Return to Home: Auto-navigate back to start page after inactivity timeout
- Configurable timeout (5โ3600 seconds), resets on touch/scroll/click
- Option to clear cache on return and reset timer on new page load
- Smart detection: paused during Screensaver, URL Rotation, and URL Planner
- ๐ Screen Sleep Scheduler: Automatically turn off screen during scheduled time periods
- Multiple schedule rules with custom names, specific days, sleep/wake times
- Supports midnight-crossing schedules with AlarmManager integration
- Wake on touch option and PIN bypass for automatic wake-up
- ๐ Background App Monitoring: Auto-relaunch monitoring for External App mode
- ๐ Update Installation on Samsung Devices: Silent install via PackageInstaller API with auto-restart
- ๐ ADB Configuration Kiosk Mode: Fixed kiosk mode not activating on first launch
- ๐ REST API Reboot Endpoint: Fixed reboot via native DevicePolicyManager
- ๐ REST API Method Handling: Control endpoints now accept both GET and POST
- ๐ท Camera Photo API: Take photos via REST endpoint using device cameras
GET /api/camera/photo?camera=back&quality=80- Capture JPEG photoGET /api/camera/list- List available cameras with capabilities- Supports front and back cameras with configurable JPEG quality (1-100)
- Auto-exposure and auto-focus warmup for optimal photo quality
- Optimized resolution (~1.2MP) for fast HTTP transfer
- Compatible with Home Assistant
cameraplatform integration
- ๐ผ๏ธ Screensaver API State Separation: Clarified screen status reporting
"on": Reports PHYSICAL screen state (PowerManager.isInteractive)"screensaverActive": Separate boolean for screensaver overlay state- Allows clients to distinguish: screen physically on vs content visible to user
- ๐ข Dynamic Version Reporting: API now reads version from BuildConfig
- Automatically syncs with
versionNamein build.gradle - No manual updates needed when version changes
- Automatically syncs with
- ๐ก HTTP Server Screen-Off Availability: Fixed server becoming unreachable when screen is off
- Added
WifiLock (WIFI_MODE_FULL_HIGH_PERF)to prevent WiFi from sleeping - Added
PARTIAL_WAKE_LOCKto keep CPU active for background HTTP processing - Server now remains accessible 24/7 regardless of screen state
- Locks are automatically released when server stops to preserve battery
- Added
- ๐ Blocking Overlay: Bug fixes for blocking overlay display and behavior
- ๐ Auto Relaunch External App: Bug fixes for automatic external app relaunching
- ๐ท Motion Detection Camera Selection: Choose which camera to use for motion detection (front/back)
- ๐ Flexible PIN Access Button: Choose between fixed corner button or tap-anywhere mode for accessing settings
- โฌ ๏ธ WebView Back Button: Optional back navigation button in WebView for easier browsing
- โ๏ธ Auto Brightness: Automatic brightness adjustment based on ambient light sensor
- ๐ Enhanced PIN System: Improved PIN mode with advanced password option
- ๐ REST API Key Security: API key now stored in Android Keychain (encrypted) with automatic migration
- ๐ง Bug Fixes: Fixed blocking overlay display issues and auto-update reliability
- ๐ Volume 5-Tap Gesture: Alternative to shake for accessing PIN screen
- Press Volume Up/Down 5 times quickly to access settings
- Works when volume is at max or min
- Only active when kiosk mode is enabled
- ๐ฅ๏ธ Screen On/Off API Fix: Improved reliability for Device Owner and non-Device Owner modes
- ๐ง React Native New Architecture: Fixed compatibility with BroadcastReceivers
- ๐ ADB Configuration Support: Configure FreeKiosk via command line for automated deployment
- ๐ฆ Headless Provisioning: Set locked app, URL, and all settings without UI interaction
- ๐ Auto-restart & Launch: Automatically restart and launch external app after configuration
- ๐ JSON & Parameter Support: Full JSON config or individual parameters via ADB
- ๐ ๏ธ Mass Deployment Ready: Perfect for CI/CD and enterprise provisioning
- ๐พ Backup & Restore: Export/import complete FreeKiosk configuration to/from JSON file
- ๐ Allow Power Button: New security setting to allow power menu access in Lock Mode
- ๐ง REST API Fixes: Improved server stability and error handling
- ๐ ADB Configuration Guide with examples and scripts
- ๐จ Complete Settings UI Redesign: Modern Material Design with 4 organized tabs (General, Display, Security, Advanced)
- ๐ URL Rotation: Automatically cycle through multiple URLs at configurable intervals
- ๐ URL Planner: Schedule URLs based on time/date with recurring and one-time events
- ๐ REST API Server: Built-in HTTP server for Home Assistant integration
- ๐ก 40+ Endpoints: Complete device control via HTTP
- ๐ Sensor Endpoints: Battery, brightness, light, proximity, storage, memory, WiFi
- ๐ฎ Control Endpoints: Screen on/off, brightness, volume, navigation, reload
- ๐ Audio Endpoints: Play URL, stop, beep sound
- ๐ธ Screenshot Endpoint: Capture screen as PNG
- ๐บ Remote Control: Android TV navigation (D-pad, back, home, menu, play/pause)
- ๐ API Key Authentication: Optional security
- ๐ Full API Documentation
- ๐ In-App Direct Update: Update FreeKiosk directly from within the app (Device Owner mode)
- ๐จ Status Bar Item Selection: Show/hide individual items (Home, Time, Battery, WiFi, Bluetooth, Sound)
- ๐งช Test Mode Options: Three test modes for External App (Test Mode, Immediate Return, Delayed Return)
- ๐ Status Bar Position: Fixed status bar now properly sticks to the top in External App mode
- ๐ Clock Visibility: Fixed time display issue
- โจ๏ธ Keyboard Mode: Default, Force Numeric, or Smart Detection
- ๐ Status Bar in External Mode: Choose to display on external app overlay and/or return screen
- ๐ Status Bar System: Debug and stability fixes
- ๐ PIN Code Max Attempts: Fixed counter issue
- ๐ Status Bar Display: New option to show/hide Android status bar (battery, WiFi, Bluetooth, sound)
- ๐งช Test Mode for External App: Safety feature with back button (enabled by default)
- ๐๏ธ Overlay Button Visibility Toggle: Show/hide return button in External App Mode
- ๐๏ธ Device Owner Removal: Easy removal of Device Owner privileges for uninstallation
- ๐ข Configurable PIN Attempts: Set maximum attempts (1-100) with 15min lockout
- ๐ Critical Fix: PIN attempts now auto-reset after 1 hour of inactivity
- ๐ Critical Fix: Expired PIN attempts properly persisted to storage
- ๐ฑ External App Mode (Beta): Launch and lock any Android app instead of a WebView
- ๐ Enhanced Lock Task: Whitelisted external apps in lock task mode
- ๐ฏ Auto-relaunch: Configurable automatic app restart on exit attempts
- ๐ Potential fix for infinite loading on login pages (cookie/session handling)
- ๐ Lock task mode stability improvements
- ๐ฅ Motion detection (Beta): Camera-based motion detection to exit screensaver mode
- ๐ช Cookie management: Basic cookie handling via react-native-cookies for web session persistence
- ๐ WebView optimization: Performance improvements specifically for Fire OS tablets
- ๐ Enhanced WebView security: Additional security measures for safe web content display
- ๐ WebView stability improvements on Fire OS devices
- ๐ Brightness control: Adjustable screen brightness slider in settings
- ๐ Screensaver mode: Configurable inactivity timer that dims screen to save power
- ๐ฅ Added CAMERA permission for web apps needing camera access
- ๐ค Added RECORD_AUDIO permission for web apps with audio features
- ๐ Added ACCESS_FINE_LOCATION and ACCESS_COARSE_LOCATION permissions for location-based web apps
- ๐ Added READ_EXTERNAL_STORAGE and WRITE_EXTERNAL_STORAGE permissions for file access support
- โ Auto-launch toggle: Enable/disable automatic app launch at device boot
- โ Screen always-on feature: Keep screen awake while app is running
- โ Improved Device Owner auto-launch handling
- โ Configuration access button on main screen
- โ HTTPS self-signed certificate security prompt
- โ Clear trusted certificates in reset settings
- โ Improved Play Store compliance for SSL
- โ Initial public release
- โ Full kiosk mode with Device Owner support
- โ Optional screen pinning toggle (ON/OFF in settings)
- โ WebView display for any URL
- โ HTTPS self-signed certificate support
- โ PIN code protection (4-6 digits configurable)
- โ Reset settings button
- โ Auto-start on device boot
- โ Samsung popup blocking (Device Owner mode)
- โ Immersive fullscreen mode
- โ Lock task mode support
- โ System apps suspension (Device Owner mode)
- โ English language UI
- ๐ท Camera Photo API - Take photos via REST endpoint
- ๐ Auto-brightness - Adjust brightness based on light sensor
- ๐ฒ QR Code Config - Scan QR to configure app settings
- ๐พ Backup/Restore - Export and import configuration
- ๐ค Acoustic Wake - Voice detection to wake from screensaver
- ๐ Webhook Events - Send events (motion, tap, battery) to URL
- ๐ฌ Media Player - Play videos, images, playlists (digital signage)
- โ๏ธ FreeKiosk Cloud - MDM Dashboard for fleet management
- ๐ฑ Multi-device management - Control all tablets from one place
- โ๏ธ Remote configuration - Push settings to devices remotely
- ๐ Analytics & monitoring - Usage stats, health checks, alerts
- ๐ OTA Updates - Deploy app updates to all devices
- ๐ฅ User management - Roles and permissions
- ๐ข Organization support - Multi-tenant for businesses
- ๐ก Device groups - Organize devices by location/function
- ๐ HACS Integration - Native Home Assistant plugin
- ๐ Multi-language - French, Spanish, German, Portuguese
- ๐จ Custom Themes - Personalize UI colors and branding
- ๐ก MQTT Support - Native MQTT with Home Assistant Auto-Discovery (27 entities)
- ๐ Tasker Integration - Android automation support
- ๐บ Chromecast Support - Cast content to displays
- ๐ฎ Physical Button Remapping - Reassign device buttons (volume, camera, custom) to custom actions
- Node.js 18+
- React Native CLI
- Android Studio
- JDK 17+
Clone repository git clone https://github.com/rushb-fr/freekiosk.git cd freekiosk
Install dependencies npm install
Android setup cd android gradlew clean
Run on device npx react-native run-android
text
cd android gradlew assembleRelease
APK location: android/app/build/outputs/apk/release/app-release.apk text
We welcome contributions! See CONTRIBUTING.md for guidelines.
- ๐ Report bugs via Issues
- ๐ก Suggest features
- ๐ง Submit pull requests
- ๐ Improve documentation
- ๐ Translate to other languages
- โญ Star the project!
- Factory reset required to remove Device Owner (Android limitation)
- Some Samsung devices may require additional ADB permissions
See Issues for full list.
MIT License - see LICENSE file for details.
Copyright (c) 2025 Rushb
FreeKiosk is developed and maintained by Rushb, a French tech company specialized in innovative software solutions.
Other Rushb Projects:
- More coming soon! ๐
Contact:
- Website: rushb.fr
- Email: contact@rushb.fr
- GitHub: @rushb-fr
- Built with React Native
- Thanks to the open-source community