SlackONOS includes optional, privacy-focused telemetry to help track basic usage statistics.
Telemetry uses PostHog, an open-source product analytics platform with:
- Privacy-focused: GDPR/CCPA compliant
- Self-hostable: Can run your own instance
- Anonymous tracking: No PII collected
- Rich analytics: Unique users, trends, breakdowns
When enabled, the following anonymous data is sent:
- Instance ID: Random UUID generated on first boot and persisted in
config/config.json(anonymous, stable identifier) - used asdistinctId - OS Platform: e.g.,
linux,darwin,win32 - OS Release: Kernel version
- Node Version: e.g.,
v22.21.1
Sent when the application starts.
- App Version: From
package.json - Release Version: Git tag or commit SHA
Sent every 24 hours while running.
- App Version: Current version
- Release Version: Current release
- Uptime Hours: Hours since startup
- Uptime Days: Days since startup
Sent on graceful shutdown (SIGINT/SIGTERM).
- App Version: Current version
- Release Version: Current release
- Total Runtime Hours: Total hours before shutdown
- Total Runtime Days: Total days before shutdown
PostHog automatically enriches events with:
- Timestamp
- User agent
No personally identifiable information (PII) is collected. No IP addresses are stored, and no usernames, Slack/Discord data, or music preferences are transmitted.
- No cookies or tracking scripts (server-side only)
- Anonymous instance IDs (random UUID, persisted in config)
- No user behavior tracking (only system events)
- Fail-silent (errors never crash the app)
- Batched events (PostHog SDK handles buffering and retry)
Compatible with GDPR, CCPA, and other privacy regulations.
Default API key is included, but you can use your own PostHog instance:
Via config file (config/config.json):
{
"telemetryApiKey": "phc_YOUR_PROJECT_API_KEY"
}Via environment variable:
TELEMETRY_API_KEY=phc_YOUR_PROJECT_API_KEYTelemetry is enabled by default but can be easily disabled.
Via admin command (easiest):
setconfig telemetryEnabled false
Via environment variable:
TELEMETRY_ENABLED=false npm startVia config file:
Edit config/config.json and add:
{
"telemetryEnabled": false
}No data will be sent when disabled.
posthog-node: Official PostHog Node.js SDK
- Application starts →
trackStartup()called - PostHog SDK batches event and sends asynchronously
- Every 24 hours →
trackHeartbeat()called - On shutdown →
trackShutdown()+shutdown()to flush pending events
The telemetry module ensures events are flushed before exit:
await telemetry.trackShutdown(version, release);
await telemetry.shutdown(); // Flush pending eventsThis prevents data loss during container restarts or deployments.