ExtLab

Guide. Last checked 5 November 2026 on Chrome 156.

Chrome kiosk mode for dashboards and signage

Chrome kiosk mode runs a web page full screen, with no address bar, tabs or window frame. You start it with the --kiosk flag, and it shows that page until someone closes Chrome.

Run one of these. Replace the URL with your dashboard.

Windows (Command Prompt)

"C:\Program Files\Google\Chrome\Application\chrome.exe" --kiosk --no-first-run --user-data-dir=C:\ChromeKiosk https://example.com

macOS (Terminal)

/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --kiosk --no-first-run --user-data-dir="$HOME/ChromeKiosk" https://example.com

Linux

google-chrome --kiosk --no-first-run --user-data-dir="$HOME/.config/chrome-kiosk" https://example.com

ChromeOS

There is no command. Use a kiosk app in the Admin console. See ChromeOS.

Two extra flags in those commands do real work:

Which setup do you need?

Your screenUse
One page, nobody touches it--kiosk
Several pages in turn, reloads, opening hours--kiosk plus a tab rotator
Public screen with a keyboard or touch--kiosk plus policies and an OS lockdown
ChromeOS deviceManaged kiosk app

Sign in before you lock the screen. Kiosk mode has no address bar. Run your command without --kiosk first, with the same --user-data-dir. Sign in to your dashboards, install any extensions, then quit Chrome. Now add --kiosk back.

Windows

Make the shortcut

  1. Create a standard local account for the screen. Do not use an administrator account.
  2. Right-click the desktop, then choose New, Shortcut.
  3. Paste the Windows command above as the location. The path stays in quotes, and the flags go after the closing quote.
  4. Name it, then double-click it to test.

Start at login

  1. Press Win+R, type shell:startup and press Enter.
  2. Move the shortcut into that folder.
  3. For every account on the PC, use shell:common startup instead.

Log in by itself

Use Microsoft's Sysinternals Autologon tool, which stores the password as an LSA secret. The manual registry method stores it in plain text. To skip auto-login for maintenance, hold Shift after a restart or sign-out.

Stop the screen sleeping

Run these on mains power. A value of 0 means never.

powercfg /change monitor-timeout-ac 0
powercfg /change standby-timeout-ac 0

Restart Chrome if it closes (optional)

Save this as C:\Kiosk\kiosk.bat, and put a shortcut to it in the startup folder instead. A console window stays open behind Chrome. Close it first when you want to stop the kiosk.

@echo off
:loop
start "" /wait "C:\Program Files\Google\Chrome\Application\chrome.exe" --kiosk --no-first-run --user-data-dir=C:\ChromeKiosk https://example.com
timeout /t 5 /nobreak >nul
goto loop

macOS

Test it

Paste the macOS command into Terminal. In our tests it ran while another Chrome was open. If you use open instead, include -n. Without it, your flags are lost when Chrome is already running.

Start at login: simple way

  1. Create a standard account for the screen.
  2. Open Script Editor and paste this line:
do shell script "open -na 'Google Chrome' --args --kiosk --no-first-run --user-data-dir=$HOME/ChromeKiosk https://example.com"
  1. Choose File, Export, and set File Format to Application.
  2. Open System Settings, General, Login Items & Extensions. Click Add and pick the app.

A login item cannot take flags on its own, so the small app holds them for you.

Start at login and restart on a crash

Use a LaunchAgent instead of the login item, not both. Save this as ~/Library/LaunchAgents/com.example.kiosk.plist. Write the full path, because $HOME does not work here.

<?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.example.kiosk</string>
  <key>ProgramArguments</key>
  <array>
    <string>/Applications/Google Chrome.app/Contents/MacOS/Google Chrome</string>
    <string>--kiosk</string>
    <string>--no-first-run</string>
    <string>--user-data-dir=/Users/kiosk/ChromeKiosk</string>
    <string>https://example.com</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
  <key>KeepAlive</key>
  <true/>
</dict>
</plist>

It loads at each login. To start it now, run:

launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.example.kiosk.plist

When we killed Chrome, launchd had started it again when we checked 12 seconds later. One limit: closing the last window leaves Chrome running with no window, so launchd does not restart it.

Log in by itself

Open System Settings, Users & Groups, and pick the account next to Automatically log in as. FileVault must be off. Apple advises against using an administrator account for this.

Stop the screen sleeping

sudo pmset -a displaysleep 0 sleep 0

Also set the screen saver to Never in Lock Screen settings. caffeinate -d keeps the display awake for as long as it runs, if you prefer not to change settings.

Linux

The command is google-chrome for Google Chrome. Chromium is usually chromium or chromium-browser, depending on the distribution.

Start at login: desktop autostart

This works on most desktops. Save it as ~/.config/autostart/kiosk.desktop. Write the full path, because $HOME does not work in this file.

[Desktop Entry]
Type=Application
Name=Chrome kiosk
Exec=/usr/bin/google-chrome --kiosk --no-first-run --user-data-dir=/home/kiosk/.config/chrome-kiosk https://example.com

Start at login and restart on a crash: systemd

Use this instead of autostart, not with it. Save it as ~/.config/systemd/user/kiosk.service.

[Unit]
Description=Chrome kiosk
PartOf=graphical-session.target
After=graphical-session.target

[Service]
ExecStart=/usr/bin/google-chrome --kiosk --no-first-run --user-data-dir=%h/.config/chrome-kiosk https://example.com
Restart=always
RestartSec=5

[Install]
WantedBy=graphical-session.target
systemctl --user daemon-reload
systemctl --user enable --now kiosk.service

This needs a desktop that starts graphical-session.target, such as GNOME. If yours does not, use autostart.

Log in by itself

On GDM, add this to /etc/gdm/custom.conf. Debian and Ubuntu use /etc/gdm3/custom.conf. Other login managers have their own setting.

[daemon]
AutomaticLoginEnable=True
AutomaticLogin=kiosk

Stop the screen sleeping

To block suspend, create /etc/systemd/sleep.conf.d/nosuspend.conf:

[Sleep]
AllowSuspend=no
AllowHibernation=no
AllowSuspendThenHibernate=no
AllowHybridSleep=no

To stop the screen going blank, run one of these in the kiosk session:

# GNOME, on X11 or Wayland
gsettings set org.gnome.desktop.session idle-delay 0

# Any X11 session, not Wayland
xset s off -dpms

ChromeOS

Managed kiosk

A real ChromeOS kiosk needs a device enrolled in your organization, with an upgrade such as the Kiosk & Signage Upgrade or the ChromeOS Enterprise Upgrade. The Kiosk & Signage Upgrade needs ChromeOS 104 or later, and it leaves no user sessions or managed guest sessions on the device.

  1. In the Admin console, go to Devices, Chrome, Apps & extensions, Kiosks.
  2. Pick an organizational unit if you need one.
  3. Choose Add, Add by URL. Enter the URL and save.
  4. Next to Auto-launch app, pick the app, and save.
  5. If the page uses other origins, add them under Additional URL origins for this kiosk app.

Only one app can auto-launch. Google warns that a kiosk grants all web permissions without asking, including camera and microphone, so add only pages you trust. Avoid redirects in the URL, because permissions are granted only for the original URL.

Use a website or web app, not a Chrome app. Google's schedule makes ChromeOS 150 (July 2026) the last release with Chrome apps in kiosk mode. Long-term support devices keep them until April 2027.

A plain Chromebook

We found no unmanaged kiosk option. Google documents kiosk setup only through the Admin console.

How to exit kiosk mode

If a watchdog restarts Chrome, stop that first, or Chrome comes straight back. That means the batch file, the LaunchAgent or the systemd service.

Windows

macOS

Linux

ChromeOS

Useful flags

Google says some flags are for development, and that they can change or go away without notice. It tells IT admins to use enterprise policies where they can. To see what Chrome received, open chrome://version and read the command line.

Three ways to fill a screen, tested on macOS
ModeBrowser UIExit noticeRestore bubble
--kioskHiddenNoNo
--start-fullscreenStayed visibleYesYes
--app=URLTitle bar onlyNoNo
--kiosk Use
Starts Chrome full screen with no address bar or tabs. It also skips most startup bars, the restore bubble and DevTools.
Watch out: It does not lock anything. Chromium notes that this is not ChromeOS kiosk mode. New tabs and windows still open. See the security section.
--no-first-run Use
Skips first-run tasks and dialogs.
Watch out: Without it, a new profile stopped at a Welcome to Google Chrome dialog and no page loaded. Keep it on every launch. Chromium says the flag does not mark first run as done.
--user-data-dir=PATH Use
Sets the profile folder. Logins, extensions and settings live there.
Watch out: A new folder is a new profile: signed out, with no extensions. Use one folder per screen, and keep the path the same on every launch.
--window-position=X,Y Use
Sets where the window opens. With --kiosk, it picks the screen.
Watch out: X and Y are logical coordinates. On a scaled display the numbers are smaller than the panel pixels.
--window-size=W,H Use
Sets the first window size.
Watch out: It only matters without --kiosk, for example to run --app in part of a screen.
--start-fullscreen Use with care
Starts as if someone pressed F11 after launch.
Watch out: This is ordinary full screen. On macOS the tabs and address bar stayed visible, an exit notice appeared, and the restore bubble still showed after a crash.
--app=URL Use with care
Opens one page in a window with no address bar or tabs.
Watch out: The title bar stays, unless you add --kiosk. There are no tabs, so a tab rotator has nothing to switch.
--incognito Use with care
Opens the first window in Incognito.
Watch out: Logins and cookies go away when Chrome closes, so signed-in dashboards break at each restart. Extensions stay off unless you allow them in Incognito.
--no-default-browser-check Use with care
Hides the default browser prompt.
Watch out: On its own it does not stop the Welcome dialog. Use --no-first-run as well.
--autoplay-policy=no-user-gesture-required Use with care
Lets a page play sound without a click. Muted video can autoplay without this flag.
Watch out: Google lists it as a developer switch. For managed browsers, use the AutoplayAllowed policy.
--kiosk-printing Use with care
Presses Print in print preview for you, so printing skips the dialog.
Watch out: Use it only if the page has to print. We read this in the source and did not test it.
--hide-crash-restore-bubble Internal
Hides the restore bubble. This is the current flag for that job.
Watch out: Chromium describes it for a ChromeOS case, but it worked on macOS. You only need it without --kiosk. It can change without notice.
--noerrdialogs Internal
Chromium describes it as suppressing error dialogs. The code we read ties it to fatal error dialogs.
Watch out: It did not hide the restore bubble, and we saw no effect on a normal screen.
--disable-infobars Internal
Still in Chrome, but Chromium gives it no description.
Watch out: It did not hide the restore bubble. --kiosk already skips most startup bars, so you can drop it.
--disable-session-crashed-bubble Gone
Nothing today. Many guides still list it.
Watch out: It is not in current Chromium source or in the Chrome 156 binary, and the bubble still appeared with it. Use --kiosk, or --hide-crash-restore-bubble without it.
--load-extension=PATH Gone
Used to load an unpacked extension at startup.
Watch out: Google Chrome stopped honoring it in version 137. Chromium and Chrome for Testing still do. Install from the Chrome Web Store, or force-install by policy.
--restore-last-session Internal
Restores the last session at startup.
Watch out: Chromium says it does not force a restore after a crash. For a screen, put the URLs on the command line.

Common problems

Chrome ignores --kiosk

Chrome is already running with that profile. In our test, a --kiosk launch against a running profile just added a tab to the normal window. Use a dedicated --user-data-dir. If you must share a profile, quit every Chrome process first.

The screen stays blank on the first start

The first-run dialog is waiting for a click, and no page has loaded. Add --no-first-run. --no-default-browser-check alone did not help.

"Restore pages?" after a crash or power cut

Use --kiosk and you do not need a fix. Chromium skips this bubble in kiosk mode, because nobody is there to dismiss it. --disable-session-crashed-bubble no longer exists, and you do not need to edit exit_type in the Preferences file.

We killed Chrome, then relaunched it with one flag
Flag on relaunchRestore bubble
No flagsShown
--start-fullscreenShown
--disable-session-crashed-bubbleShown
--noerrdialogsShown
--disable-infobarsShown
--kioskNot shown
--app=URLNot shown
--incognitoNot shown
--hide-crash-restore-bubbleNot shown

The screen goes to sleep

Chrome does not keep the display awake for a normal page. With a plain page in --kiosk, macOS showed no sleep block from Chrome. Set this in the operating system: see Windows, macOS, Linux. Check the display too, because many TVs and monitors have their own power timer.

If you own the page, it can also ask for a Screen Wake Lock. That needs HTTPS, and Chrome releases the lock when the page is hidden. So it does not replace the OS setting on a screen that rotates tabs.

Multiple monitors

Give each screen its own profile and its own position. You need both. This ran two kiosks on two displays in our test:

google-chrome --kiosk --no-first-run --user-data-dir="$HOME/.config/kiosk-left" --window-position=0,0 https://example.com/left
google-chrome --kiosk --no-first-run --user-data-dir="$HOME/.config/kiosk-right" --window-position=2304,0 https://example.com/right

Auto-login

A screen that restarts must get past the login window by itself. Steps are under each OS above. Both Apple and Microsoft warn about the risk: anyone who can restart the computer gets that account. Use an account with no admin rights, and keep the computer out of reach.

Updates

Chrome applies updates when it closes and reopens. A screen that runs for weeks stays on the old version, and kiosk mode has no menu to show Relaunch. Restart the computer or Chrome on a schedule, outside opening hours.

The network is not ready at startup

Chrome shows its error page, then retries. In our test the page came back about 3 seconds after the server did. A login page or a Wi-Fi sign-in page will not clear by itself, so test a cold start on the real network.

Video has no sound

Muted video can always autoplay. Sound needs a click, or --autoplay-policy=no-user-gesture-required. In our test, audio stayed suspended without the flag and ran with it.

Opening several pages

You can list several URLs. They open as tabs, and only the first shows. See the next section.

Show several pages

This command opens three tabs, but the screen stays on the first one:

google-chrome --kiosk --no-first-run --user-data-dir="$HOME/.config/chrome-kiosk" https://example.com/sales https://example.com/status https://example.com/support

Kiosk mode has no tab strip and no timer. Nothing moves to the next tab unless someone presses Ctrl+Tab. Some dashboard tools have their own playlist or slideshow. If yours does, and that covers your pages, use it.

If your pages come from different tools, you need something that switches tabs. We make ExtLab Rotate, a Chrome extension for this job, so read this section with that in mind.

What ExtLab Rotate does

What it does not do

Use it with --kiosk

  1. Run your command without --kiosk, with the same --user-data-dir.
  2. Install ExtLab Rotate in that profile, and set it up. See the ExtLab Rotate guide.
  3. With Pro, turn on kiosk auto-start. Then quit Chrome.
  4. Start Chrome with --kiosk, as usual.

Kiosk mode has no toolbar, so there is no icon to click. Without auto-start, press Alt+Shift+P to start, which needs a keyboard. Skip --incognito, because extensions stay off there unless you allow them.

ExtLab Rotate is coming soon to the Chrome Web Store. It will need no account.

Coming soon to the Chrome Web StoreSee what it does

Security: --kiosk is not a lockdown

--kiosk hides the browser. It does not restrict the person at the keyboard. We pressed these keys in a --kiosk window on macOS:

KeysResult
Cmd+TOpened a new tab, on screen.
Cmd+NOpened a new full-screen window.
Cmd+OOpened the file picker.
Cmd+POpened print preview.
Cmd+,Opened Chrome settings.
Control+Cmd+FLeft full screen.
Cmd+WClosed the tab.
Control+TabSwitched to the next tab.
Cmd+Option+IBlocked. Chrome said DevTools is not allowed.
EscNothing, on a single press.

We expect the Ctrl shortcuts to act the same on Windows and Linux, but we did not test them. Operating system shortcuts such as Alt+Tab are outside Chrome's control. So a screen with a keyboard is an open browser on your network.

For a wall screen

For a screen people can touch

FAQ

How do I start Chrome in kiosk mode?
Start Chrome with the --kiosk flag and a URL. Add --no-first-run and a --user-data-dir folder for that screen. On Windows, put the flags in a shortcut. On macOS and Linux, run the command from a terminal or a login item. ChromeOS has no flag; use a kiosk app in the Admin console.
How do I exit Chrome kiosk mode?
On Windows and Linux, press Alt+F4 or Ctrl+Shift+W. On macOS, press Control+Cmd+F to leave full screen, or hold Cmd+Q to quit. On a ChromeOS kiosk that starts by itself, press Ctrl+Alt+S during startup, unless your admin turned that off. If something restarts Chrome for you, stop that first.
Can Chrome kiosk mode show more than one page?
Not by itself. Extra URLs open as tabs, but no tab strip shows and nothing switches between them. To cycle pages you need a tab rotator extension such as ExtLab Rotate, or a playlist feature in your dashboard tool.
What is the difference between --kiosk and --start-fullscreen?
--start-fullscreen is ordinary full screen, as if someone pressed F11. On macOS it kept the tabs and address bar on screen. --kiosk hides them, skips the restore bubble after a crash and blocks DevTools. For a screen nobody touches, use --kiosk.
Why does Chrome ignore the --kiosk flag?
Chrome is usually already running with the same profile. The new launch hands the URL to that process and drops the flag, so you get a new tab in a normal window. Give the kiosk its own --user-data-dir, or quit every Chrome process first.
Is Chrome kiosk mode secure?
No. --kiosk hides the browser UI, but anyone with a keyboard can still open tabs, settings and the file picker. Keep the keyboard away from the screen, run a standard account, and add Chrome policies or an operating system lockdown for public screens.
Does a Chromebook have a kiosk mode without Admin console?
We found no such option. Google documents kiosk setup only through the Admin console, on an enrolled device with an upgrade. A plain Chromebook can show a page full screen and keep the display on, but it cannot start a page by itself or stop someone from leaving it.

How we checked this, and sources

We ran the macOS commands on Google Chrome 156.0.8078.81 and macOS 26.6, with two displays, using throwaway profiles. That covers every "in our test" result on this page, and the key table. We also read the Chromium source and searched the Chrome 156 binary for each flag.

We did not run the Windows, Linux or ChromeOS steps. Those come from the documents below, and flag behavior can differ by OS. We could not complete a full Cmd+Q hold in automated tests, and we tested the Script Editor line from the command line, not as a saved login item.

Chromium

Google

Microsoft

Apple

Linux