Kiosk Mode
Kiosk mode enables Liveposter to run in fullscreen without browser UI elements, making it perfect for digital signage, smart displays, interactive kiosks, and unattended installations.
What is Kiosk Mode?
Section titled “What is Kiosk Mode?”Kiosk mode launches a web browser in fullscreen without:
- Address bar
- Tabs
- Bookmarks bar
- Navigation buttons
- Browser menus
This creates an immersive, distraction-free display ideal for public installations, digital signage, retail displays, and anywhere you need professional presentation without browser chrome.
Why Use Kiosk Mode?
Section titled “Why Use Kiosk Mode?”Digital Signage: Display dynamic content in stores, lobbies, or public spaces without any browser UI distractions.
Smart Displays: Transform any screen with a browser into a dedicated display device.
Interactive Kiosks: Create touch-enabled displays for museums, exhibitions, or retail environments.
Trade Shows & Events: Professional presentations without visible browser elements.
Retail Displays: Product showcases that look polished and purpose-built.
Lobby Screens: Welcome displays and information boards that appear as dedicated hardware.
Quick Start
Section titled “Quick Start”The easiest way to run Liveposter in kiosk mode is using the built-in kiosk command:
# Run default demo in kiosk modenpx liveposter kiosk
# Run specific poster in kiosk modenpx liveposter kiosk path/to/your-poster.json
# Run poster list in kiosk modenpx liveposter kiosk path/to/poster-list.jsonThis single command:
- Automatically kills any process using port 3000
- Starts the Liveposter server
- Waits for the server to be ready
- Launches Chrome in fullscreen kiosk mode
- Works cross-platform (Windows, macOS, Linux)
Platform-Specific Instructions
Section titled “Platform-Specific Instructions”Using Chrome
Section titled “Using Chrome”/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \ --kiosk \ --app=http://localhost:3000Additional Options
Section titled “Additional Options”# Disable pinch gestures and navigation/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \ --kiosk \ --app=http://localhost:3000 \ --disable-pinch \ --overscroll-history-navigation=0 \ --disable-features=TranslateUIUsing Safari (Limited Kiosk Features)
Section titled “Using Safari (Limited Kiosk Features)”Safari doesn’t have a true kiosk mode, but you can approximate it:
# Open in fullscreen (then press Cmd+Shift+F)open -a Safari http://localhost:3000For better Safari kiosk mode, consider third-party tools like FullScreen.
Windows
Section titled “Windows”Using Chrome
Section titled “Using Chrome”chrome --kiosk --app=http://localhost:3000Or with full path:
"C:\Program Files\Google\Chrome\Application\chrome.exe" --kiosk --app=http://localhost:3000Using Edge
Section titled “Using Edge”msedge --kiosk --app=http://localhost:3000Additional Options
Section titled “Additional Options”# Disable gestures and prevent closingchrome --kiosk --app=http://localhost:3000 ^ --disable-pinch ^ --overscroll-history-navigation=0 ^ --disable-features=Translate ^ --no-first-runPowerShell Script
Section titled “PowerShell Script”Create launch-kiosk.ps1:
# Kill any process on port 3000$processes = netstat -ano | findstr :3000 | ForEach-Object { $_ -match '\s+(\d+)$' | Out-Null $matches[1]} | Select-Object -Unique
foreach ($pid in $processes) { if ($pid) { Stop-Process -Id $pid -Force -ErrorAction SilentlyContinue }}
# Start Liveposter server in backgroundStart-Process -NoNewWindow -FilePath "npx" -ArgumentList "liveposter", "path/to/poster.json"
# Wait for server to be readyStart-Sleep -Seconds 3
# Launch Chrome in kiosk mode& "C:\Program Files\Google\Chrome\Application\chrome.exe" --kiosk --app=http://localhost:3000Using Chromium
Section titled “Using Chromium”chromium-browser --kiosk --app=http://localhost:3000Using Google Chrome
Section titled “Using Google Chrome”google-chrome --kiosk --app=http://localhost:3000Additional Options
Section titled “Additional Options”# Full kiosk setup with gesture disablingchromium-browser --kiosk --app=http://localhost:3000 \ --disable-pinch \ --overscroll-history-navigation=0 \ --disable-features=TranslateUI \ --no-first-run \ --disable-infobars \ --disable-session-crashed-bubblePreventing Exit (for Public Kiosks)
Section titled “Preventing Exit (for Public Kiosks)”For truly locked-down kiosks, you may want to prevent users from exiting:
# Launch in a separate X session (requires xserver-xorg-video-dummy)xinit /path/to/kiosk-script.sh -- :1Browser Options Reference
Section titled “Browser Options Reference”Essential Kiosk Flags
Section titled “Essential Kiosk Flags”| Flag | Purpose |
|---|---|
--kiosk | Launches browser in fullscreen kiosk mode |
--app=URL | Opens URL as an application window (no tabs) |
Recommended Additional Flags
Section titled “Recommended Additional Flags”| Flag | Purpose |
|---|---|
--disable-pinch | Disables pinch-to-zoom gestures |
--overscroll-history-navigation=0 | Disables swipe navigation |
--disable-features=TranslateUI | Disables translation prompts |
--no-first-run | Skips first-run dialogs |
--disable-infobars | Removes info bars |
--disable-session-crashed-bubble | Removes crash recovery dialogs |
--disable-restore-session-state | Prevents session restore |
Advanced Flags
Section titled “Advanced Flags”| Flag | Purpose |
|---|---|
--incognito | Private mode (no history/cookies) |
--start-fullscreen | Alternative to —kiosk (allows tabs) |
--disable-extensions | Disables all extensions |
--noerrdialogs | Suppresses error dialogs |
--disable-component-update | Prevents component updates |
Example Full Configuration
Section titled “Example Full Configuration”chromium-browser \ --kiosk \ --app=http://localhost:3000 \ --disable-pinch \ --overscroll-history-navigation=0 \ --disable-features=TranslateUI \ --no-first-run \ --disable-infobars \ --disable-session-crashed-bubble \ --disable-restore-session-state \ --incognito \ --noerrdialogsAuto-Start on Boot
Section titled “Auto-Start on Boot”Windows
Section titled “Windows”Method 1: Startup Folder
Section titled “Method 1: Startup Folder”- Press
Win + R, typeshell:startup, press Enter - Create a shortcut to your launch script
- The script will run automatically on login
Create startup-liveposter.bat:
@echo offcd C:\path\to\your\posterstart /B npx liveposter kiosk poster.jsonMethod 2: Task Scheduler
Section titled “Method 2: Task Scheduler”- Open Task Scheduler
- Create Basic Task
- Trigger: “When I log on”
- Action: “Start a program”
- Program:
cmd.exe - Arguments:
/c "cd C:\path\to\poster && npx liveposter kiosk poster.json"
Using Launch Agent
Section titled “Using Launch Agent”Create ~/Library/LaunchAgents/com.liveposter.kiosk.plist:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict> <key>Label</key> <string>com.liveposter.kiosk</string> <key>ProgramArguments</key> <array> <string>/usr/local/bin/npx</string> <string>liveposter</string> <string>kiosk</string> <string>/path/to/your/poster.json</string> </array> <key>RunAtLoad</key> <true/> <key>KeepAlive</key> <true/> <key>WorkingDirectory</key> <string>/path/to/poster/directory</string></dict></plist>Load the agent:
launchctl load ~/Library/LaunchAgents/com.liveposter.kiosk.plistUsing Login Items
Section titled “Using Login Items”- System Preferences → Users & Groups
- Select your user → Login Items
- Click + and add your launch script
Linux (systemd)
Section titled “Linux (systemd)”System-Wide Service
Section titled “System-Wide Service”Create /etc/systemd/system/liveposter-kiosk.service:
[Unit]Description=Liveposter Kiosk DisplayAfter=graphical.target network.target
[Service]Type=simpleUser=displayuserEnvironment=DISPLAY=:0Environment=XAUTHORITY=/home/displayuser/.XauthorityWorkingDirectory=/home/displayuser/liveposterExecStart=/usr/bin/npx liveposter kiosk /home/displayuser/liveposter/poster.jsonRestart=alwaysRestartSec=10
[Install]WantedBy=graphical.targetEnable and start:
sudo systemctl daemon-reloadsudo systemctl enable liveposter-kiosksudo systemctl start liveposter-kioskCheck status:
sudo systemctl status liveposter-kioskView logs:
sudo journalctl -u liveposter-kiosk -fUser Service (Per-User)
Section titled “User Service (Per-User)”Create ~/.config/systemd/user/liveposter-kiosk.service:
[Unit]Description=Liveposter Kiosk DisplayAfter=graphical-session.target
[Service]Type=simpleWorkingDirectory=%h/liveposterExecStart=/usr/bin/npx liveposter kiosk %h/liveposter/poster.jsonRestart=alwaysRestartSec=10
[Install]WantedBy=default.targetEnable and start:
systemctl --user daemon-reloadsystemctl --user enable liveposter-kiosksystemctl --user start liveposter-kioskLinux (Desktop Entry)
Section titled “Linux (Desktop Entry)”Create ~/.config/autostart/liveposter-kiosk.desktop:
[Desktop Entry]Type=ApplicationName=Liveposter KioskExec=/usr/bin/npx liveposter kiosk /home/user/liveposter/poster.jsonTerminal=falseX-GNOME-Autostart-enabled=trueDevelopment Workflow
Section titled “Development Workflow”Testing Kiosk Mode
Section titled “Testing Kiosk Mode”During development, you may not want full kiosk mode. Use development mode instead:
# Hot-reload development modenpx liveposter dev path/to/poster.json
# Then test kiosk mode when readynpx liveposter kiosk path/to/poster.jsonQuick Iteration
Section titled “Quick Iteration”For rapid testing:
- Keep
npx liveposter dev poster.jsonrunning - Edit poster.json (changes auto-reload)
- When satisfied, test with
npx liveposter kiosk poster.json
Script-Based Workflow
Section titled “Script-Based Workflow”Create dev.sh for development:
#!/bin/bashnpx liveposter dev poster.jsonCreate kiosk.sh for testing kiosk mode:
#!/bin/bashnpx liveposter kiosk poster.jsonTroubleshooting
Section titled “Troubleshooting”Browser Won’t Launch in Kiosk Mode
Section titled “Browser Won’t Launch in Kiosk Mode”Issue: Chrome launches but not in kiosk mode
Solutions:
- Ensure no Chrome instances are already running (close all Chrome windows)
- Try adding
--new-windowflag - Check Chrome installation path is correct
- Try
--start-fullscreeninstead of--kiosk
Check Chrome path:
# macOSls -la /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome
# Linuxwhich chromium-browserwhich google-chrome
# Windows (PowerShell)Test-Path "C:\Program Files\Google\Chrome\Application\chrome.exe"Port Already in Use
Section titled “Port Already in Use”Issue: “Port 3000 is already in use”
Solutions:
macOS/Linux:
# Find process using port 3000lsof -ti:3000
# Kill the processlsof -ti:3000 | xargs kill -9Windows:
# Find processnetstat -ano | findstr :3000
# Kill process (replace PID with actual process ID)taskkill /PID <PID> /FThe npx liveposter kiosk command handles this automatically.
Server Not Starting
Section titled “Server Not Starting”Issue: Server fails to start
Solutions:
- Check Node.js is installed:
node --version - Ensure port 3000 is available
- Try a different port:
PORT=3001 npx liveposter kiosk poster.json - Check file paths are correct
- Review poster.json for syntax errors
Browser Exits Immediately
Section titled “Browser Exits Immediately”Issue: Kiosk browser opens then closes
Solutions:
- Server may not be ready yet; add delay before launching browser
- Check server is actually running:
curl http://localhost:3000 - Try accessing URL manually first
- Check for browser crashes in logs
Cannot Exit Kiosk Mode
Section titled “Cannot Exit Kiosk Mode”Issue: Stuck in fullscreen kiosk mode
Solutions:
- Press
Alt + F4(Windows/Linux) orCmd + Q(macOS) - Press
F11to exit fullscreen Ctrl + Alt + T(Linux) to open terminal- Switch to another virtual terminal:
Ctrl + Alt + F1-F6(Linux) - Use Task Manager (Windows) or Activity Monitor (macOS) to force quit
Display Issues
Section titled “Display Issues”Issue: Content appears stretched or misaligned
Solutions:
- Check display resolution settings
- Ensure poster dimensions match display
- Use CSS to constrain container size
- Test with simpler poster first
- Check browser zoom is at 100%
Performance Issues
Section titled “Performance Issues”Issue: Animations are choppy or laggy
Solutions:
- Optimize image sizes (compress large images)
- Use WebP or JPEG instead of PNG for photos
- Reduce transition speeds
- Lower image resolution for large displays
- Close other applications
- Check GPU acceleration is enabled in browser
Auto-Start Not Working
Section titled “Auto-Start Not Working”Issue: Kiosk doesn’t launch on boot
Solutions:
Windows:
- Check startup script is in startup folder
- Verify script paths are absolute, not relative
- Check Task Scheduler task is enabled
- Look for errors in Task Scheduler history
macOS:
- Verify LaunchAgent plist syntax:
plutil -lint file.plist - Check launchd logs:
log show --predicate 'subsystem == "com.apple.launchd"' --last 1h - Ensure paths in plist are absolute
- Check file permissions
Linux:
- Check service status:
systemctl status liveposter-kiosk - View logs:
journalctl -u liveposter-kiosk -n 50 - Ensure service is enabled:
systemctl is-enabled liveposter-kiosk - Verify user has display access (DISPLAY and XAUTHORITY)
Best Practices
Section titled “Best Practices”Security Considerations
Section titled “Security Considerations”Public Kiosks:
- Use
--incognitoflag to prevent data persistence - Disable navigation gestures
- Use separate user account with limited permissions
- Consider physical security (locked case, mounted display)
Network Access:
- Use local images when possible
- Cache external resources
- Consider offline-first approach
- Use HTTPS for remote resources
Reliability
Section titled “Reliability”Automatic Recovery:
- Enable auto-restart on crash (systemd
Restart=always) - Use process monitoring (PM2, systemd)
- Monitor server health
- Log errors for debugging
Resource Management:
- Monitor memory usage
- Restart periodically (daily cron job)
- Clean up temporary files
- Keep system updated
Content Management
Section titled “Content Management”Remote Updates:
- Use network-accessible JSON files
- Implement hot-reload for content changes
- Version your poster specifications
- Keep backups of working configurations
Testing:
- Test on target hardware before deployment
- Verify all images load correctly
- Check timing feels right on actual display
- Test auto-start functionality
Advanced Configurations
Section titled “Advanced Configurations”Multi-Display Setup
Section titled “Multi-Display Setup”Run different posters on multiple displays:
# Display 1DISPLAY=:0 npx liveposter kiosk poster1.json &
# Display 2DISPLAY=:1 npx liveposter kiosk poster2.json &Use different ports:
# Display 1 on port 3000PORT=3000 npx liveposter kiosk poster1.json &
# Display 2 on port 3001PORT=3001 npx liveposter kiosk poster2.json &Remote Management
Section titled “Remote Management”Use SSH to manage remote displays:
# SSH into display devicessh user@display-device
# Check statussystemctl status liveposter-kiosk
# Restartsystemctl restart liveposter-kiosk
# Update contentcd ~/livepostergit pullsystemctl restart liveposter-kioskMonitoring
Section titled “Monitoring”Set up basic monitoring:
#!/bin/bashwhile true; do if ! curl -s http://localhost:3000 > /dev/null; then echo "Server down, restarting..." systemctl restart liveposter-kiosk fi sleep 60doneRun as cron job:
# Add to crontab* * * * * /path/to/monitor-kiosk.shPlatform-Specific Hardware
Section titled “Platform-Specific Hardware”Raspberry Pi
Section titled “Raspberry Pi”For Raspberry Pi deployments, see the dedicated Raspberry Pi Setup Guide which covers:
- OS installation and configuration
- Performance optimization
- GPIO integration
- Power management
- Troubleshooting
Digital Signage Hardware
Section titled “Digital Signage Hardware”Recommended Specs:
- CPU: Dual-core 1.5GHz+
- RAM: 2GB+ (4GB recommended)
- Storage: 8GB+ SD/SSD
- GPU: Hardware video decode
- Display: HDMI output
Tested Platforms:
- Raspberry Pi 3/4/5
- Intel NUC
- Generic x86/x64 PCs
- Android TV boxes (with browser support)
Next Steps
Section titled “Next Steps”- Review animation modes to design your kiosk content
- Explore configuration options for customization
- Check out examples for inspiration
- See Raspberry Pi guide for dedicated hardware setup
Additional Resources
Section titled “Additional Resources”- Chrome command-line switches: chromium.org/developers/how-tos/run-chromium-with-flags
- Systemd service examples: systemd documentation
- Digital signage best practices: Liveposter examples