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.
| configuration | Suitable case |
|---|---|
| assigned access | I want to limit the display to only compatible browsers or a single app. |
| startup | I want to easily start an app after a dedicated user signs in. |
| task scheduler | I 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
| Item | Content |
|---|---|
| OS | Windows 10/11 |
| Operation terminal | Windows Terminal |
| Node.js management | nvm-windows |
| Application execution environment | Node.js/npm |
| Main uses | Digital signage, reception terminal, exhibition terminal |
| Automatic startup method | Startup 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.
- Search for "Terminal" in the Start menu.
- If it is already installed, start it immediately.
- If you can't find it, install it from the Microsoft Store.
- 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
- "Run as administrator" the XAMPP Control Panel.
- Check the checkbox in the "Svc" column in the Apache row.
- If a registration confirmation for Windows service is displayed, confirm that the target is Apache and allow it.
- If you use a database, do the same with MySQL rows.
- 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
- Restart Windows.
- Open the required local page in your browser without starting the XAMPP Control Panel.
- Verify that the page is visible.
- 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.
| method | Suitable use | Features |
|---|---|---|
| startup | Run a simple command once after signing in | Easy to set up |
| task scheduler | Requires delayed startup, administrator privileges, and rerun on failure | Conditions and recovery actions can be set in detail |
| Windows assigned access | Display only a single compatible app to users | OS 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.
- Windows starts normally
- Sign in to a dedicated user if necessary
- Node.js app starts automatically
- Display screen changes to front or full screen
- Content is displayed after network connection
- Continue displaying without using the keyboard or mouse
- 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 items | Confirmation details | Detailed steps |
|---|---|---|
| touch operation | Restrict 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 bar | Choose auto-hide settings or assigned access depending on usage | How to hide the taskbar on Windows 11 kiosk |
| notification | Understand the difference between Notification Center and Notification Banner and control only the items you need | How to disable Notification Center in Windows 11 |
| Windows Update | Avoid unexpected restarts during business hours and update during maintenance hours | How to control automatic updates and restarts of Windows Update |
| power management | Check how to sleep, screen off, auto-shutdown, and wake up the next day | How 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
- Installing Windows Terminal (Microsoft Learn)
- nvm-windows official README
- XAMPP official download page (Apache Friends)
- XAMPP Windows FAQ(Apache Friends)
- Windows Kiosks and Limited User Experience (Microsoft Learn)
- Task Scheduler documentation (Microsoft Learn)
- Windows Update Client Policy (Microsoft Learn)
Summary
| procedure | Implementation details | Completion conditions |
|---|---|---|
| 1 | Prepare Windows Terminal | Can start PowerShell |
| 2 | Introducing nvm-windows | nvm version is displayed |
| 3 | Introducing Node.js/npm | node -v and npm -v succeeds |
| 4 | Place display app | Start successfully manually |
| 5 | Set autostart | Start automatically after signing in |
| 6 | Test with failure in mind | Can 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.
Related Articles
-
How to Automatically Power On Your PC at a Set Time in BIOS [RTC Alarm]
-
How to Disable Touch Gestures on a Windows 11 Kiosk Terminal
-
How to Install nvm-windows on Windows 10 and 11
-
How to Install and Switch Between Node.js and npm Versions with nvm on Windows
-
How to Install XAMPP for Windows: Apache, MariaDB, and PHP
-
How to Install VS Code on Windows 10 and 11