Releases: htilly/SlackONOS
Release v2.2.0
Release v2.2.0
Features
- Enhanced authentication setup with WebAuthn/Yubikey support
- OpenAI configuration options in setup wizard
- Improved admin help text with WebUI link
- Crossfade support via Sonos native API
- Case-insensitive setconfig values
Fixes
- Fixed voting system track identification and star emoji display
- Fixed null track reference handling in voting system
- Fixed currentTrackTitle return type consistency
- Improved code consistency and documentation
Release v2.1.0
What's New in 2.1.0
Added
- Slack Thread Support - Added
slackAlwaysThreadconfiguration option to send all bot messages as thread replies - Spotify Region Warnings - Bot now sends messages to admin channel when tracks fail due to region restrictions (errorCode 800)
- Enhanced AI Confirmation Detection - Improved handling of user confirmations like "do it", "yes", "ok" for AI suggestions
- New Screenshots - Added 7 new screenshots to README and testing documentation showcasing features
Changed
- WebAuthn Enhancements - Major improvements to WebAuthn/FIDO2 authentication
- Enhanced WebAuthn configuration and client integration
- Improved user verification and authenticator selection logic
- Updated @simplewebauthn/server to v13.2.2 for better compatibility
- Reduced WebAuthn debug logging for cleaner output
- Admin Panel Improvements
- Collapsed WebAuthn section into new "Security" section with password management
- Moved Log Level setting to Console Logs section for better organization
- Fixed log level filtering to properly respect configured level (debug/info/warn/error)
- Fixed duplicate log entries in admin panel log viewer
- Improved SSE connection management with better reconnection handling
- Branding Updates - Complete rebrand from ZenMusic to SlackONOS
- Replaced all ZenMusic.png references with SlackONOS.png
- Updated CSS colors to match new SlackONOS logo and Slack-inspired palette
- Added rounded corners and smoother logo appearance with better styling
- UI/UX Improvements
- Translated entire setup wizard from Swedish to English
- Improved Spotify region pre-fill in setup wizard (reads existing config value)
- Enhanced login page with "Login with Yubikey!" button text
- Better visual organization of admin panel sections
Fixed
- Discord Token Validation - Fixed regex to correctly validate Discord bot tokens with varying lengths
- SSL Certificate Generation - Added defensive checks for ipAddress to prevent certificate generation errors
- Log Level Not Respected - Fixed issue where debug logs were still showing even when log level was set to info
- Duplicate Log Entries - Fixed duplicate log entries appearing in admin panel log viewer
- GitHub Actions - Fixed GITHUB_REF passing to Docker container for correct release version detection
Dependencies
- Bumped
selfsignedfrom 5.1.1 to 5.2.0 - Bumped
bcryptfrom 5.1.1 to 6.0.0 - Bumped
@simplewebauthn/serverfrom 12.0.0 to 13.2.2
Documentation
- Enhanced README with detailed screenshot descriptions
- Updated Slack documentation (removed gong reactions, added thread support info)
- Improved testing documentation with new screenshots
See CHANGELOG.md for full details.
v2.0.1 — TTS HTTPS Fix + Workflow Improvements
v2.0.1 — TTS HTTPS Fix + Workflow Improvements
🐞 Bug Fixes
- TTS HTTPS Issue
- TTS (text-to-speech) använder nu HTTP istället för HTTPS.
- Sonos-enheter litar inte på självsignerade certifikat → HTTPS bröt uppspelningen.
- HTTP-endpoint fungerar nu stabilt i lokala nätverk.
- HTTPS används fortfarande för Setup Wizard och Admin-gränssnittet.
🔧 Improvements
- Test Workflow
- Lade till
master-branchen i test-workflow för korrekt branch protection.
- Lade till
- Test Fixes
- Åtgärdade timing-relaterad boundary-condition i memory-management-tester.
v2.0.0 - Major Performance & Feature Update
🎉 SlackONOS v2.0.0 - Major Performance & Feature Update
This is a major release with significant performance improvements, a complete web-based setup wizard, WebAuthn authentication, and extensive new features.
🚀 Performance Improvements (75-90% faster!)
Commands are now dramatically faster thanks to parallelized API calls and non-blocking operations:
addcommand: 75-90% faster (removed 1.5s delays, parallel API calls)listcommand: 50% faster (parallel state/queue/track fetching)bestofcommand: 90% faster (parallel track queueing)addalbum/addplaylist: 85% faster (immediate user feedback)getNowPlaying: 40-50% faster (parallel API calls)
All file I/O operations are now async, preventing event loop blocking.
🎨 Complete Web Interface
Setup Wizard (/setup)
Zero-config onboarding experience:
- ✅ Automatic Sonos device discovery (15s timeout)
- ✅ Slack/Discord bot credential validation
- ✅ Spotify API verification
- ✅ Admin password setup
- ✅ Live configuration preview
Admin Panel (/admin)
Full-featured management interface:
- 🎵 Real-time now-playing display with Server-Sent Events
- ⏯️ Playback controls (play, pause, next, volume)
- ⚙️ Configuration management with live validation
- 🔐 WebAuthn/FIDO2 security key management
- 📊 Credential caching and smart reconnection
🔐 Modern Authentication
WebAuthn/FIDO2 Passwordless Login
- Touch ID, Face ID, Windows Hello support
- Yubikey and hardware security key compatibility
- User verification toggle (PIN vs touch-only modes)
- Multi-credential support per user
Traditional Password Authentication
- bcrypt-based secure password hashing
- Secure session management with HttpOnly cookies
🤖 AI Enhancements
- Multi-turn conversations - Bot remembers context across messages
- Better natural language understanding - Improved reasoning and confidence
- Seasonal awareness - Music suggestions based on time of year
- Memory management - Automatic cleanup of old contexts
📁 Project Organization
The repository has been completely reorganized for better maintainability:
- 📚 All documentation moved to
/docsdirectory - 🐳 All Docker files moved to
/dockerdirectory - 🧩 Modular architecture with dedicated
lib/modules - 🧪 Expanded test coverage (622+ tests)
New Modules
lib/auth-handler.js- Authentication logiclib/webauthn-handler.js- WebAuthn implementationlib/setup-handler.js- Setup wizard backendlib/sonos-discovery.js- Device discovery- Validator modules for Slack, Discord, Spotify
🎵 Music Features
New source Command
Identify where music is playing from:
- Queue (SlackONOS-managed)
- Spotify Connect
- AirPlay
- Line-in or other external sources
Improved Queue Display
- Shows currently playing track with metadata
- Time remaining and total duration
- Lock icons for gong-immune tracks
- Source warnings for external playback
🐛 Bug Fixes
- Fixed WebAuthn user verification issues with Yubikey
- Fixed credential validation race conditions
- Fixed SSE connection handling and reconnection
- Fixed config value masking for sensitive data
- Fixed file I/O blocking event loop
- Fixed queue display position matching
- Fixed admin panel real-time update bugs
🔒 Security Enhancements
- Complete sensitive data redaction in all debug outputs
- Secure session management with HttpOnly cookies
- Password hashing with bcrypt
- WebAuthn challenge verification with proper attestation
📖 Documentation
New comprehensive guides:
- Slack Setup Guide - Socket Mode configuration
- Discord Setup Guide - Bot setup instructions
- Testing Guide - Running and writing tests
- Telemetry Documentation - Privacy and opt-out
- Troubleshooting Guide - Common issues
⚠️ Breaking Changes
-
Repository structure changed
- Documentation moved from root to
/docs - Docker files moved from root to
/docker - Update any hardcoded paths in scripts/workflows
- Documentation moved from root to
-
Config format extended
- New optional fields for WebAuthn, setup wizard, AI context
- Existing configs will continue to work
-
Node.js >= 18 recommended
- For optimal performance with native fetch support
- Node.js 16 still supported but not recommended
🎯 Migration Guide
- Update documentation links if you have hardcoded paths (use
/docs/prefix) - Update Docker build paths in custom workflows (use
./docker/Dockerfile) - Optional: Configure WebAuthn for passwordless admin access
- Optional: Set
aiContextLimitfor conversation memory management - Review new config options in
config/config.json.example
📦 Docker Images
Multi-platform images available:
docker pull htilly/slackonos:latestdocker pull htilly/slackonos:v2.0.0docker pull htilly/slackonos:2.0.0
Platforms: linux/amd64, linux/arm64, linux/arm/v7
🙏 Acknowledgments
Special thanks to Claude Code for extensive performance optimization and codebase analysis!
Full Changelog: See CHANGELOG.md for complete details
📥 Installation
Docker Compose (Recommended)
```bash
docker pull htilly/slackonos:v2.0.0
docker compose up -d
```
Node.js
```bash
npm install
node index.js
```
Then visit http://localhost:8000/setup to configure!
Questions? Check the docs or open an issue!
SlackONOS v1.7.3
What's New
Added
- Persistent Telemetry Instance ID - Anonymous telemetry now uses a persistent UUID stored in config, ensuring consistent tracking across restarts
- Soundcraft Volume Display - The
volumecommand now shows configured Soundcraft mixer channel levels alongside Sonos volume
Changed
- Soundcraft volume conversion now uses linear dB mapping for more accurate fader representation
Full Changelog: v1.7.2...v1.7.3
v1.7.2 - Bugfix add and search aligned
fix: resolve merge conflicts for v1.7.2 release
v1.7.1 - Bugfix for template text
Fixed wrong location of template text
v1.7.0 - Comprehensive Integration Testing & Repository Cleanup
Added
- Comprehensive Integration Test Suite: 21 automated end-to-end tests covering all major features
- Multi-channel testing support (regular + admin channels)
- Test configuration system with separate bot credentials (
test/config/) - Integration test tools (
test/tools/integration-test-suite.mjs) - Test documentation (
test/INTEGRATION_TESTING.md)
Changed
- Repository Organization: Moved template files to
config/messages/and help files toconfig/help/ - Dependency Updates:
- sinon: 19.0.2 → 21.0.0
- chai: 6.2.0 → 6.2.1
- posthog-node: 4.3.0 → 5.15.0
- openai: 4.76.1 → 6.9.1
- Updated Docker configuration (image reference, port mapping)
- Enhanced
.dockerignoreand.gitignore
Removed
- Legacy files:
tools/,.travis.yml,.snyk,Procfile - Unused sound file (
sound/gong.mp3) - Outdated Gemini documentation (
.gemini/)
Fixed
- Docker image reference in
docker-compose-example.yml(now useshtilly/slackonos:latest) - All template file paths in
index.jsto reflect new structure - Removed local paths from documentation
v1.6.0 - Track Blacklist & PostHog Telemetry
🎉 What's New in v1.6.0
🚫 Track Blacklist System
Block unwanted tracks and artists from your queue! Perfect for avoiding those overplayed holiday songs.
trackblacklistcommand - Add/remove blacklisted tracks (admin-only)- Smart filtering - Works with individual tracks, albums, playlists, and AI-generated lists
- Transparent warnings - Shows which tracks were skipped and why
- Persistent storage - Blacklist saved in
config/track-blacklist.json
Example: Block all versions of "Last Christmas" and the bot will automatically skip them when adding Christmas playlists!
📊 PostHog Telemetry
Anonymous usage tracking to help improve SlackONOS:
- Migrated from Plausible to PostHog SDK
- Tracks startup, heartbeat (24h), and shutdown events
- Includes OS platform, Node version, market info
- Opt-out anytime via
telemetryEnabled: falsein config - Full privacy documentation in TELEMETRY.md
🎛️ Soundcraft Ui24R Integration
Control your mixer directly from Slack/Discord:
- Multi-bus support (master, aux, fx, custom channels)
- WebSocket-based real-time connection
- Named channel control:
setvolume receptionen 30 - Auto-reconnection on disconnect
- Complete setup guide in SOUNDCRAFT.md
⚡ Performance Improvements
- Channel ID support - Avoid rate limits in large Slack workspaces (100+ channels)
- Auto-save IDs - First lookup saves IDs to config for instant future startups
- Smart detection - Automatically detects if config uses IDs vs names
🧪 Testing
138 passing tests covering:
- Text cleaning (Slack formatting, HTML entities, quotes)
- Voting system with dynamic config changes
- Integration tests for command logic and Spotify API
🐛 Bug Fixes
- Slack Socket Mode auto-reconnect prevents crashes
- Removed build.txt dependency (was causing ENOENT errors)
- Fixed private channel IDs (G...) support
- Corrected Soundcraft API calls for aux/fx bus control
- ARM v7 platform support for Raspberry Pi
📝 Full Changelog
See CHANGELOG.md for complete details.
Upgrade from v1.5.0:
- Pull latest code:
git pull origin master - Install dependencies:
npm install - Add optional configs (see SOUNDCRAFT.md and TELEMETRY.md)
- Restart your bot
Docker users:
docker pull ghcr.io/htilly/slackonos:v1.6.0
# or rebuild: docker build -t slackonos .v1.5.0: AI Natural Language
What's Changed
- Merging with changes from vibol by @htilly in #6
- Gongcheck, logging and better replies by @htilly in #7
- Add Dockerfile and fix Blacklist by @jangrewe in #8
- fix up some exceptions for undeclared vars by @jimmyjames in #9
- Added htmlentity decoding for _vote. by @truncj in #12
- Add access token for spotify by @MadMikeyB in #21
- Using addSpotify instead of addSpotifyQueue by @truncj in #22
- only show admin help commands in the admin channel by @jgoulah in #24
- PL from sineqa by @htilly in #29
- Switch to semver released versions of Sonos by @bencevans in #31
- Add shuffle admin command by @ashleyryan in #32
- Async node sonos by @htilly in #35
- Lots of fixes and new spotify auth by @codebynumbers by @htilly in #44
- Fix Dockerfile by @fixdocker in #56
- [Snyk] Security upgrade eslint from 4.19.1 to 5.0.0 by @snyk-bot in #55
- [Snyk] Fix for 1 vulnerabilities by @snyk-bot in #54
- [Snyk] Security upgrade eslint from 4.19.1 to 6.0.0 by @snyk-bot in #53
- [Snyk] Fix for 1 vulnerable dependencies by @snyk-bot in #48
- [Snyk] Fix for 1 vulnerable dependencies by @snyk-bot in #47
- [Snyk] Security upgrade nconf from 0.8.5 to 0.11.0 by @snyk-bot in #57
- Bump hosted-git-info from 2.8.8 to 2.8.9 by @dependabot[bot] in #62
- Bump handlebars from 4.7.6 to 4.7.7 by @dependabot[bot] in #61
- [Snyk] Security upgrade snyk from 1.437.3 to 1.611.0 by @snyk-bot in #71
- Bump glob-parent from 5.1.1 to 5.1.2 by @dependabot[bot] in #65
- Bump ws from 5.2.2 to 5.2.3 by @dependabot[bot] in #72
- Bump color-string from 1.5.4 to 1.9.0 by @dependabot[bot] in #73
- Bump lodash from 4.17.20 to 4.17.21 by @dependabot[bot] in #63
- Dev by @htilly in #75
- Dev by @htilly in #76
- new package-lock.json by @htilly in #77
- Node 17 by @htilly in #78
- Removed COPY . . by @htilly in #79
- [Snyk] Security upgrade xml2js from 0.4.23 to 0.5.0 by @htilly in #96
- Bump xml2js from 0.5.0 to 0.6.2 by @dependabot[bot] in #97
- Bump nconf from 0.11.4 to 0.12.1 by @dependabot[bot] in #99
- Bump urlencode from 1.1.0 to 2.0.0 by @dependabot[bot] in #98
- Bump @slack/web-api from 7.3.4 to 7.4.0 by @dependabot[bot] in #100
- Bump @slack/web-api from 7.4.0 to 7.5.0 by @dependabot[bot] in #102
- Bump node from 22.8-slim to 22.9-slim by @dependabot[bot] in #103
- Bump winston from 3.14.2 to 3.15.0 by @dependabot[bot] in #104
- Bump @slack/web-api from 7.5.0 to 7.6.0 by @dependabot[bot] in #105
- Bump node from 22.9-slim to 23.1-slim by @dependabot[bot] in #109
- Bump mocha from 10.7.3 to 10.8.1 by @dependabot[bot] in #110
- Bump @slack/web-api from 7.6.0 to 7.7.0 by @dependabot[bot] in #107
- Bump chai from 5.1.1 to 5.1.2 by @dependabot[bot] in #108
- Bump mocha from 10.8.1 to 10.8.2 by @dependabot[bot] in #111
- Bump winston from 3.15.0 to 3.16.0 by @dependabot[bot] in #112
- Bump mocha from 10.8.2 to 11.0.1 by @dependabot[bot] in #115
- Bump winston from 3.16.0 to 3.17.0 by @dependabot[bot] in #113
- Bump node from 23.1-slim to 23.3-slim by @dependabot[bot] in #114
- Bump @slack/web-api from 7.7.0 to 7.8.0 by @dependabot[bot] in #116
- Bump node from 23.3-slim to 23.4-slim by @dependabot[bot] in #118
- Bump @slack/rtm-api from 7.0.1 to 7.0.2 by @dependabot[bot] in #117
- Bump node from 23.4-slim to 23.5-slim by @dependabot[bot] in #119
- Bump node from 23.5-slim to 23.7-slim by @dependabot[bot] in #122
- Bump mocha from 11.0.1 to 11.1.0 by @dependabot[bot] in #121
- Bump node from 23.7-slim to 23.9-slim by @dependabot[bot] in #125
- Bump chai from 5.1.2 to 5.2.0 by @dependabot[bot] in #123
- Bump mocha from 11.1.0 to 11.5.0 by @dependabot[bot] in #137
- Bump nconf from 0.12.1 to 0.13.0 by @dependabot[bot] in #131
- Bump node from 23.9-slim to 24.0-slim by @dependabot[bot] in #133
- Bump @slack/web-api from 7.8.0 to 7.9.2 by @dependabot[bot] in #136
- Bump glob from 10.4.5 to 10.5.0 by @dependabot[bot] in #167
- Bump node from 24.0-slim to 25.1-slim by @dependabot[bot] in #166
- Bump js-yaml from 4.1.0 to 4.1.1 by @dependabot[bot] in #168
- Bump chai from 5.2.0 to 6.2.0 by @dependabot[bot] in #156
- Bump @slack/web-api from 7.9.2 to 7.12.0 by @dependabot[bot] in #165
- Bump @slack/rtm-api from 7.0.2 to 7.0.4 by @dependabot[bot] in #152
- Bump winston from 3.17.0 to 3.18.3 by @dependabot[bot] in #159
- Bump mocha from 11.5.0 to 11.7.4 by @dependabot[bot] in #161
- Add Discord integration with role-based permissions by @htilly in #169
- feat: AI natural language support with OpenAI integration by @htilly in #170
New Contributors
- @htilly made their first contribution in #6
- @jangrewe made their first contribution in #8
- @jimmyjames made their first contribution in #9
- @truncj made their first contribution in #12
- @MadMikeyB made their first contribution in #21
- @jgoulah made their first contribution in #24
- @bencevans made their first contribution in #31
- @ashleyryan made their first contribution in #32
- @fixdocker made their first contribution in #56
- @snyk-bot made their first contribution in #55
- @dependabot[bot] made their first contribution in #62
Full Changelog: https://github.com/htilly/SlackONOS/commits/v1.5.0