JA
/
EN

How to Build a Windows Kiosk Terminal: Node.js, Auto-Start, and Stable Operation

  • Windows
  • 常設コンテンツ

Note: The screenshots in this article were captured in a Japanese-language Windows environment. Menu and setting names may differ slightly in an English-language installation.

To operate a Windows PC as a kiosk terminal such as a digital signage or reception terminal, it must be configured to not only be able to launch applications, but also to automatically start displaying after signing in to Windows and to be able to recover from reboots and temporary failures.

This article provides an overview of everything from preparing the execution environment using Windows Terminal, nvm-windows, and Node.js to display application placement, automatic startup, operation confirmation, and continued operation. For detailed installation instructions for each software, please refer to sister articles with screens.

What is a Windows kiosk?

A Windows kiosk terminal is a PC that constantly displays a specified web page or business application without requiring the user to perform normal desktop operations. It is used for digital signage, reception systems, product search terminals, display terminals, etc.

Windows has a kiosk feature called "Assigned Access." On the other hand, for unique applications that run on Node.js or configurations that use multiple processes such as XAMPP, there is a way to combine dedicated users, startups, task schedulers, etc.

The main target of this article is a configuration in which a dedicated user is prepared in a regular Windows desktop environment and a Node.js app is automatically displayed after signing in. This is not a procedure for introducing the OS standard kiosk function itself into Node.js.

configurationSuitable case
assigned accessI want to limit the display to only compatible browsers or a single app.
startupI want to easily start an app after a dedicated user signs in.
task schedulerI want to finely manage delayed startup, retries, execution conditions, etc.

If it is necessary to strongly restrict users' ability to operate the OS, simply displaying the app in full screen is not sufficient. Be sure to include Windows restrictions in your design, such as assigned access.

Environment created in this article

ItemContent
OSWindows 10/11
Operation terminalWindows Terminal
Node.js managementnvm-windows
Application execution environmentNode.js/npm
Main usesDigital signage, reception terminal, exhibition terminal
Automatic startup methodStartup or Task Scheduler

Windows Terminal is not required software for kiosk display. It is used to facilitate administrative tasks such as initial construction, log confirmation, and Node.js version switching.

Things to decide before building

Before you begin, decide on the following items:

  • Are you displaying a web page or a local Node.js app?
  • Do you need to continue viewing even when offline?
  • Do you want to use automatic sign-in to Windows?
  • Should the app be restarted automatically when it closes?
  • Do you operate only one device or deploy to multiple devices?
  • How to perform remote maintenance and log collection

Automatic sign-in carries the risk that someone with physical access to your device can take advantage of your user environment. Please consider the installation location, information stored on the device, and network privileges when deciding whether to use it.

When editing configuration files, HTML/CSS, and startup batch files on a terminal, a code editor makes it easier to check the changes. See How to install VSCode if needed. VSCode is not required for kiosk display itself, but is a tool for construction and maintenance work.

Step 1: Prepare Windows Terminal

First, prepare a Windows Terminal to use for building a Node.js environment and troubleshooting.

  1. Search for "Terminal" in the Start menu.
  2. If it is already installed, start it immediately.
  3. If you can't find it, install it from the Microsoft Store.
  4. After booting, confirm that the PowerShell prompt is displayed.

For instructions with screenshots, please refer to How to install Windows Terminal.

Step 2: Install nvm-windows

Using nvm-windows, you can fix the version of Node.js on each device and switch it as needed.

Before installation, check if you have an existing Node.js installed.

node -v
where.exe node

If you find an existing Node.js, back up your configuration and uninstall it to avoid PATH conflicts. After that, get the installer from the nvm-windows official GitHub and set it up.

If the "Desktop Notifications" screen is displayed in the nvm-windows 1.2.2 installer, turn off all release notifications for Node.js, nvm-windows, etc. on unattended terminals that are constantly displayed to prevent unnecessary notifications from being displayed on the screen during operation.

For detailed steps and precautions, please refer to nvm-windows installation instructions.

Step 3: Set up Node.js and npm

Open PowerShell as an administrator and install the version of Node.js you want to use. Below is an example using Node.js 22.12.0.

nvm install 22.12.0
nvm use 22.12.0
node -v
npm -v

When operating multiple machines, instead of specifying a moving target like nvm install lts, fix the specific version number that has been confirmed to work with the app. When building a new app, check the app's compatibility and select an LTS release that's within its maintenance period. If node -v succeeds but npm -v fails with only a PowerShell execution policy error, first check whether npm itself is working with the following command.

npm.cmd -v

Before changing the execution policy, check your device management policy and your organization's security policy. This is explained in more detail in How to install Node.js/npm with nvm.

When deploying to multiple devices, not only the Node.js version but also the PowerShell execution policy and scope of application should be unified and recorded between devices. There is also an approach where automatic-startup batch files avoid the execution-policy-affected npm.ps1 and explicitly call npm.cmd instead.

Step 4: Place the display app and check its operation

Once the Node.js environment is ready, deploy the display app to the device. Below is the general flow — match the actual commands to what's in the app's README or package.json.

cd C:\kiosk\app
npm ci
npm run start

npm ci can be used if the app has a package-lock.json whose contents match package.json. We also manage lock files on production-equivalent devices so that verified dependencies can be reproduced.

Before configuring automatic startup, check the following for manual startup:

  • App starts without error
  • Display content and screen size are correct
  • Japanese characters and symbols are not garbled
  • Display when disconnected from network is as expected
  • You can close the app and restart it
  • The location where logs are saved is determined.

If you manually set automatic startup when it is not working properly, it will be difficult to isolate the cause.

Autostart settings when using XAMPP

In configurations where the display app uses XAMPP's Apache or MariaDB, register the necessary modules as Windows services so that the local server can be recovered without manually operating the XAMPP Control Panel after Windows is restarted.

This setting is not required for Node.js apps that do not use XAMPP. If you have not yet installed XAMPP itself, please refer to Windows version of XAMPP installation procedure.

If you want to align the DB credentials for local development with MAMP on Mac and XAMPP on Windows, please also check How to set XAMPP root password to root. The root/root setting is a compatibility setting limited to localhost, and is not used in an externally exposed environment.

If a CMS on XAMPP needs URL rewriting via .htaccess, check How to set AllowOverride in Apache. Allow the necessary overrides only on the target site's directories, rather than across the entire file system.

Confirmation before service registration

Before registering as a service, manually start Apache and MySQL from the XAMPP Control Panel and verify that the required pages are displayed.

http://localhost/dashboard/

If Apache or MySQL does not start at this point, resolve any port conflicts or configuration errors before registering the services. Administrator privileges are required to register and cancel Windows services.

Register Apache and MySQL as Windows services

  1. "Run as administrator" the XAMPP Control Panel.
  2. Check the checkbox in the "Svc" column in the Apache row.
  3. If a registration confirmation for Windows service is displayed, confirm that the target is Apache and allow it.
  4. If you use a database, do the same with MySQL rows.
  5. Open the Windows service management screen and check the registration status and startup type.

To open the service management screen, press Windows key + R and enter the following.

services.msc

The service name may be displayed differently depending on the environment, so do not rely on the name alone, but also make sure that the path to the executable file refers to the installed XAMPP.

Check autostart after reboot

  1. Restart Windows.
  2. Open the required local page in your browser without starting the XAMPP Control Panel.
  3. Verify that the page is visible.
  4. In services.msc, check that the status of Apache and MySQL is "Running".

Even if the Apache page is displayed, it does not necessarily mean that the application using the database is normal. Open the page that connects to MariaDB and check the entire app.

Cancel service registration

To terminate kiosk operation or isolate service conflicts, open the XAMPP Control Panel as an administrator and turn off "Svc" for the target module. After canceling, restart Windows and confirm that the service does not start automatically.

When using it only via localhost on the same PC, you don't need to allow connections to Apache from an external terminal. Even when connecting from another device within the LAN, limit the permission range of Windows Firewall to the minimum necessary, such as a trusted private network.

Step 5: Set app auto-start

There are two typical ways to automatically start Node.js apps: startup and task scheduler.

methodSuitable useFeatures
startupRun a simple command once after signing inEasy to set up
task schedulerRequires delayed startup, administrator privileges, and rerun on failureConditions and recovery actions can be set in detail
Windows assigned accessDisplay only a single compatible app to usersOS standard kiosk control can be used

When using startup

If you want to run a simple app or startup batch file after the target user signs in, you can use the current user's startup folder, shell:startup. For how to set it up, create shortcuts, and troubleshoot if it doesn't work, see How to automatically launch apps on kiosk terminals for a detailed explanation.

In the batch file that starts the Node.js app, specify the working folder with an absolute path. If you want to continue processing after the npm command, attach call.

@echo off
cd /d C:\kiosk\app
call npm.cmd run start

For an explanation of why call is needed, and an example of running multiple commands in sequence, please refer to Reasons why post-npm commands are not executed in Windows batch.

This method runs after the user signs in. Since it will not start just by turning on the PC, in unattended operation, please check operation including signing in as a dedicated user.

When using task scheduler

For unattended operation, a configuration in which the following items can be set using the task scheduler is suitable.

  • Launch when target user signs in
  • Wait for network connection and start
  • Delay startup by several tens of seconds
  • Rerun if it ends abnormally
  • Run with highest privileges only when necessary

Specify the batch file in "Program/Script" and specify the application's working folder in "Start (optional)". If your app displays a screen, make sure it's set to run in an interactive session where the user is signed in.

Step 6: Check behavior after reboot

After setting automatic startup, restart Windows and check the same flow as in production.

  1. Windows starts normally
  2. Sign in to a dedicated user if necessary
  3. Node.js app starts automatically
  4. Display screen changes to front or full screen
  5. Content is displayed after network connection
  6. Continue displaying without using the keyboard or mouse
  7. Recover using the configured method when the app closes

In addition to normal restarts, we also test booting after power outage, network disconnection and recovery, and abnormal app termination.

Windows settings required for permanent terminals

Automatically starting the Node.js app alone does not complete the operational settings for digital signage and unmanned guide terminals. Depending on how you plan to use your device, also check the following:

Operational itemsConfirmation detailsDetailed steps
touch operationRestrict operations to leave the content, such as swiping at the edge of the screen, to the extent necessary.How to disable touch gestures on kiosk terminals
task barChoose auto-hide settings or assigned access depending on usageHow to hide the taskbar on Windows 11 kiosk
notificationUnderstand the difference between Notification Center and Notification Banner and control only the items you needHow to disable Notification Center in Windows 11
Windows UpdateAvoid unexpected restarts during business hours and update during maintenance hoursHow to control automatic updates and restarts of Windows Update
power managementCheck how to sleep, screen off, auto-shutdown, and wake up the next dayHow to automatically shut down Windows at a set time

If you permanently stop update services and update-related tasks, security updates may not be applied and settings may be reverted due to changes on the Windows side. Rather than designing to permanently stop updates, please prepare an operation that can be applied during maintenance hours after checking on a verification terminal.

Please note that even if you restrict operations using the registry or group policy, it may not prevent all loopholes. For devices that users touch in public spaces, evaluate dedicated user privileges, assigned access, and physical port protection.

Points to note when deploying to multiple devices

With multiple kiosk terminals, reducing differences between terminals leads to maintainability.

  • Unify Windows, nvm-windows, and Node.js versions
  • For Node.js, choose an LTS version that has been confirmed to work with the display app, and fix it with a specific version number.
  • Standardize where the app is placed, e.g. C:\kiosk\app
  • Fix dependencies using package-lock.json
  • Separate device-specific values into configuration files and environment variables
  • Record autostart settings, firewall, and power settings
  • Manage device numbers, installation locations, and app versions in a ledger
  • Perform a reboot test on a verification device before updating

When scripting setup operations, be sure to specify the path, target user, version number, and log the execution.

Notes on security and stable operation

Use a dedicated Windows user

Rather than diverting personal accounts used for daily work to kiosk operations, we provide dedicated users with the minimum necessary privileges. Even if administrator privileges are required during construction, it is not necessarily necessary to run the app that is always displayed as an administrator.

Do not change version automatically

The display may change depending on updates to Node.js or dependent packages. We fix the version on devices in operation and update it in a planned manner after verification.

Check power and sleep

Check the Windows power settings according to the operational requirements to prevent the screen from going to sleep or turning off the screen during unattended display. If business hours are fixed, options include terminating using the task scheduler and starting using the UEFI/BIOS RTC function. However, if your organization has a power saving/security policy, give priority to that policy.

Prepare logs and recovery steps

Rather than relying only on the standard output of the app, save logs that include the date and time to a file or monitoring platform. Decide on recovery procedures — such as "reboot," "revert to the previous version," or "notify maintenance personnel" — for when a failure occurs.

Troubleshooting

node or npm is not found after reboot

Check if the user who runs automatic startup is the same user who set up nvm-windows. Find out where the executable file is referenced with the following command.

where.exe node
where.exe npm
nvm debug

It starts manually but fails when starting automatically

Check the working folder, execution user, environment variables, and network status at the time of startup. Instead of relying on relative paths, specify absolute paths in batch files and task schedulers.

The next process of npm command is not executed

If you want to call a .cmd-style command from a Windows batch file, attach call.

call npm.cmd run start

Windows desktop appears before apps

The startup process begins after you sign in, so you may see the desktop for a short time. Reduce the time it takes to start displaying, or consider Windows assigned access if the app supports it.

Reference materials

Summary

procedureImplementation detailsCompletion conditions
1Prepare Windows TerminalCan start PowerShell
2Introducing nvm-windowsnvm version is displayed
3Introducing Node.js/npmnode -v and npm -v succeeds
4Place display appStart successfully manually
5Set autostartStart automatically after signing in
6Test with failure in mindCan be displayed even after restarting or restoring communication

In order to operate Windows kiosks stably, it is necessary not only to install the software, but also to design a series of mechanisms including automatic startup, version fixing, logging, and failure recovery. First, check the settings on one test device, including restarts and network failures, record the settings, and then deploy to the production device.

Share this article