CollaboKeys uses Winston for structured logging. All significant server events — player connections, name changes, keypresses, emulation errors — are captured and written to log files on disk. At the same time, log entries are streamed in real time to every authenticated admin page session over Socket.IO, so you can monitor activity without opening a terminal.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/tinkerer9/collabokeys/llms.txt
Use this file to discover all available pages before exploring further.
Log Files
Logs are written to thelogs/ directory inside the project folder. When running the packaged Electron app, the logs/ folder is placed in the macOS user data directory instead of the project root.
Three log files are created by default, controlled by the logs.logFileTypes array in src/config.json:
error.log
Contains error level entries only. These represent major failures — for example, a keyboard emulation error caused by a missing accessibility permission.
warn.log
Contains warn and error level entries. Because Winston transports capture the configured level and everything more severe, setting this transport to
warn also includes error entries alongside minor issues like unsupported OS warnings.combined.log
Contains error, warn, and info level entries together. Info entries include all player activity: keypresses, connections, name changes, and admin authentications.
deleteAtStart — By default this is false, so log files accumulate across server restarts. Set it to true in src/config.json to clear the entire logs/ folder each time the server starts.
src/config.json
Log Levels
Winston uses a numeric priority system. CollaboKeys emits log entries at four levels, listed from highest to lowest severity:| Level | Priority | Used for |
|---|---|---|
error | 0 | Major failures (e.g. emulation error, server crash) |
warn | 1 | Minor issues (e.g. unsupported OS, configuration problem) |
info | 2 | Normal player activity (keypresses, connections, name changes) |
http | 3 | Socket.IO connect and disconnect events |
combined.log file captures error, warn, and info. The error.log transport is set to error level so it captures only error entries. The warn.log transport is set to warn level, so it captures warn and error entries (Winston captures the configured level and everything more severe). The http level is not written to any log file by default — the logger’s base level is info (priority 2), and since http has priority 3 (lower importance), it falls below the threshold. Http events are streamed to the admin page transport, which is configured at http level separately.
Admin Page Logs Panel
The admin page streams log entries in real time so you can monitor the session without keeping a terminal window open.Connect and authenticate
Open the admin page at
http://<host-ip>:<port>/admin and authenticate. The Logs panel appears at the bottom of the page once authenticated.Watch live entries
As events occur on the server — players joining, keys being pressed, errors being raised — new entries are prepended to the Logs panel automatically. No refresh is needed.
Read the colour coding
Log entries are styled based on their level:
- Red / bold —
errorentries (ERROR: <message>) andwarnentries (WARNING: <message>) - Normal with bold level prefix —
infoandhttpentries
The admin page transport captures log entries at the
http level and above — meaning all four levels (error, warn, info, http) are streamed to the admin page. Only authenticated admins (those who have joined the admin Socket.IO room) receive these events.Log HTTP Pages
CollaboKeys serves log file content over HTTP so you can read logs in any browser without accessing the host filesystem directly. This feature requireslogs.logPage.enabled to be true in src/config.json (the default).
| URL | Content |
|---|---|
/logs | combined.log — errors, warnings, and info |
/logs/error | error.log — error level only |
/logs/warn | warn.log — warn and error levels |
/logs/<name> | Any log file matching <name>.log in the logs folder |
LEVEL: message, with multi-line messages indented to align under the level prefix. If the log file is empty, the page shows Logs empty. If no matching file exists, the server returns 404 Log file not found.
Example URLs:
Disabling Log Pages
If you do not want log content to be accessible over HTTP, setlogs.logPage.enabled to false in src/config.json:
src/config.json
/logs or /logs/<name> returns 404 Log page is disabled. Log files on disk are unaffected — they continue to be written normally.