Feature Development History
Feature Development History
This document tracks the detailed evolution of features and capabilities in the Bose SoundTouch API client library.
Development Timeline
Phase 1: Foundation (January 2026)
Core HTTP Client
- HTTP Client with XML Support: Complete client implementation for SoundTouch Web API
- XML Model System: Comprehensive typed models for all API responses
- Error Handling: Robust error handling with contextual error messages
- Configuration Management: Flexible configuration via environment variables and config files
Basic Device Control
- Device Information:
/infoendpoint for device details and capabilities - Device Name:
/nameendpoint for device identification - Device Capabilities:
/capabilitiesendpoint for feature detection - Now Playing Status:
/now_playingendpoint for current playback information
Initial CLI Tool
- Basic command-line interface for testing API functionality
- Device connectivity testing
- Simple information retrieval commands
Phase 2: Media Control & Discovery (January 2026)
Media Controls
- Key Commands: Complete implementation of
/keyendpoint- Play, pause, stop, track navigation
- Volume up/down via key presses
- Preset selection (1-6)
- Power and mute controls
- Proper press+release pattern implementation
- Volume Management:
/volumeGET/POST endpoints- Direct volume setting (0-100)
- Incremental volume control
- Safety features and validation warnings
- Volume level categorization (quiet, medium, loud, very loud)
Device Discovery
- UPnP/SSDP Discovery: Automatic device discovery using Universal Plug and Play
- Device Caching: TTL-based caching for improved performance
- CLI Discovery Commands: Device discovery integration in CLI tool
Enhanced CLI
- Host:Port Parsing: Support for
device:portformat in CLI - Comprehensive Commands: Full coverage of implemented endpoints
- Interactive Features: Better user experience with formatted output
Phase 3: Advanced Audio Controls (January 2026)
Audio Management Trilogy
- Bass Control:
/bassGET/POST endpoints- Range validation (-9 to +9)
- Incremental bass adjustment
- Device capability detection via
/bassCapabilities - Safety limits and user warnings
- Balance Control:
/balanceGET/POST endpoints- Stereo balance adjustment (-50 to +50)
- Left/right channel convenience methods
- Balance centering functionality
- Device-dependent feature (not all devices support balance)
Source Selection
- Source Management:
/sourcesGET and POST/selectendpoints - Convenience Methods: Direct source selection helpers
SelectSpotify()- Switch to SpotifySelectBluetooth()- Switch to BluetoothSelectAux()- Switch to AUX inputSelectTuneIn()- Switch to TuneIn radioSelectPandora()- Switch to Pandora
- Source Validation: Comprehensive source availability checking
- Account Management: Support for multi-account sources (Spotify, etc.)
Preset Management (Read-Only)
- Preset Analysis: Complete preset configuration analysis
- Helper Methods: Preset management utilities
GetNextAvailablePresetSlot()- Find empty preset slotsIsCurrentContentPresetable()- Check if content can be saved as preset- Preset categorization and filtering
- API Limitation Documentation: Clarified that POST
/presetsis officially N/A
Phase 4: System Features (January 2026)
Clock and Display Management
- Clock Time:
/clockTimeGET/POST endpoints- Get/set device time
SetClockTimeNow()convenience method- Time format handling
- Clock Display:
/clockDisplayGET/POST endpoints- Display enable/disable
- Brightness control (low/medium/high)
- 12/24 hour format selection
- Convenience methods for common operations
Network Information
- Network Info:
/networkInfoGET endpoint - **Network connectivity details and diagnostics
Enhanced Discovery
- mDNS/Bonjour Discovery: Multicast DNS device discovery
- Unified Discovery Service: Combined UPnP + mDNS + configured devices
- Multiple Discovery Protocols: Fallback discovery methods for different network environments
- Corporate Network Support: Discovery options for restricted networks
Phase 5: Real-time Events (January 2026)
WebSocket Implementation
- WebSocket Client: Complete WebSocket implementation for real-time events
- Event System: Comprehensive event type support
NowPlayingUpdated- Track changes, playback statusVolumeUpdated- Volume and mute status changesConnectionStateUpdated- Network connectivityPresetUpdated- Preset configuration changesZoneUpdated- Multiroom zone changesBassUpdated- Bass level adjustmentsSdkInfoUpdated- Server version informationUserActivityUpdated- User interaction notifications
Connection Management
- Auto-Reconnection: Automatic reconnection with exponential backoff
- Connection Monitoring: Real-time connection state tracking
- Error Recovery: Robust error handling and recovery mechanisms
- Event Filtering: Subscribe to specific event types
WebSocket CLI Integration
- Real-time Monitoring: Live event streaming in CLI
- Event Filtering: Command-line event type filtering
- Formatted Output: Human-readable event display
- Demo Applications: WebSocket demonstration tools
Phase 6: Multiroom Zone Management (January 2026)
Zone Operations
- Zone Information:
/getZoneGET endpoint- Current zone configuration retrieval
- Master/slave device identification
- Zone membership queries
- Zone Management:
/setZonePOST endpoint- Zone creation with multiple devices
- Add devices to existing zones
- Remove devices from zones
- Dissolve zones completely
High-Level Zone API
- Fluent API: Easy-to-use zone management methods
CreateZone()- Create multiroom zonesAddToZone()- Add devices to existing zonesRemoveFromZone()- Remove devices from zonesDissolveZone()- Break up zones
- Zone Status: Zone membership and status queries
IsInZone()- Check if device is in a zoneGetZoneStatus()- Get zone configurationGetZoneMembers()- List all zone members
Low-Level Zone API
- Zone Slave Management: Direct slave operations
/addZoneSlavePOST endpoint/removeZoneSlavePOST endpoint- Device ID and IP-based operations
Validation and Safety
- IP Validation: Comprehensive IP address validation
- Duplicate Detection: Prevent duplicate zone members
- Error Handling: Specific zone-related error types
- Zone Builder: Fluent API for zone construction
Phase 7: Advanced Audio Controls (January 2026)
Professional Audio Features
- DSP Audio Controls:
/audiodspcontrolsGET/POST endpoints- Audio mode switching (movie, music, dialogue, etc.)
- Video sync delay adjustment
- DSP parameter configuration
- Advanced Tone Controls:
/audioproducttonecontrolsGET/POST endpoints- Professional-grade bass and treble adjustment
- Extended range beyond basic
/bassendpoint - Fine-grained audio tuning
- Speaker Level Controls:
/audioproductlevelcontrolsGET/POST endpoints- Individual speaker level adjustment
- Front-center speaker level control
- Rear-surround speakers level control
- Multi-channel audio management
Device Capability Integration
- Automatic Capability Detection: Check device capabilities before feature access
- Conditional Feature Availability: Features only available on compatible devices
- Graceful Degradation: Fallback to basic controls when advanced features unavailable
Phase 8: Speaker Notification System (February 2026)
Notification Features
- Text-to-Speech (TTS):
/speakerPOST endpoint for TTS messages- Multi-language support (EN, DE, ES, FR, IT, NL, PT, RU, ZH, JA, etc.)
- Google TTS integration with URL encoding
- Custom volume control with automatic restoration
- Configurable service metadata for NowPlaying display
- URL Audio Playback:
/speakerPOST endpoint for URL content- HTTP/HTTPS audio content playback
- Custom metadata support (service, message, reason fields)
- Volume control with automatic restoration
- Content interruption and resume functionality
- Notification Beep:
/playNotificationGET endpoint- Simple double beep notification sound
- Content pause/resume during notification
- Quick connectivity testing
Smart Home Integration
- Home Automation Support: Perfect for smart home notifications
- Doorbell alerts with custom TTS messages
- Security system integration with audio alerts
- IoT device status announcements
- Emergency Notifications: High-priority alert system
- Volume override for critical alerts
- Custom audio content for specific scenarios
- Zone-wide notifications for multiroom setups
Device Compatibility
- ST-10 Series Support: Primary compatibility with ST-10 (Series III) speakers
- Device Detection: Automatic capability checking
- Error Handling: Graceful degradation for unsupported devices
- Volume Management: Intelligent volume restoration
CLI Integration
- Comprehensive Commands: Full CLI support for all notification types
speaker tts- Text-to-speech with language optionsspeaker url- URL content playback with metadataspeaker beep- Simple notification beepspeaker help- Detailed functionality guide
- Parameter Validation: Complete input validation and error handling
- Usage Examples: Extensive real-world usage examples
Phase 9: Bug Fixes and Stability (February 2026)
Critical Bug Fixes
- PlayNotificationBeep HTTP Method Fix: Corrected
/playNotificationendpoint to use GET instead of POST- Issue:
go run ./cmd/soundtouch-cli --host <device> sp beepwas failing with HTTP 400 status - Root Cause: Go client was sending POST requests while SoundTouch devices expect GET requests
- Fix: Updated
PlayNotificationBeep()method to use the existingc.get()method withStationResponsemodel - Verification: Tested with SoundTouch 20, confirmed compatibility with curl equivalent (
curl http://<device>:8090/playNotification)
- Issue:
Code Quality Improvements
- Consistent HTTP Method Usage: Leveraged existing client patterns instead of manual HTTP handling
- Model Reuse: Used existing
StationResponsestruct for/playNotificationXML response parsing - Documentation Updates: Added troubleshooting guide for speaker notification issues
Feature Implementation Statistics
API Endpoint Coverage Evolution
| Phase | Endpoints Added | Cumulative Total | Completion % |
|---|---|---|---|
| Phase 1 | 4 | 4 | 15% |
| Phase 2 | 6 | 10 | 38% |
| Phase 3 | 8 | 18 | 69% |
| Phase 4 | 3 | 21 | 81% |
| Phase 5 | 1 | 22 | 85% |
| Phase 6 | 2 | 24 | 92% |
| Phase 7 | 3 | 27 | 96% |
| Phase 8 | 2 | 29 | 100% |
| Phase 9 | 0 | 29 | 100% (Bug fixes) |
Testing Evolution
Unit Test Coverage
- Phase 1: Basic HTTP client tests (25 tests)
- Phase 2: Media control and discovery tests (75 tests)
- Phase 3: Audio control tests (125 tests)
- Phase 4: System feature tests (150 tests)
- Phase 5: WebSocket event tests (200 tests)
- Phase 6: Zone management tests (250 tests)
- Phase 7: Advanced audio tests (300+ tests)
- Phase 8: Speaker notification tests (330+ tests)
- Phase 9: Bug fix verification tests (335+ tests)
Integration Test Coverage
- Real Device Testing: SoundTouch 10 and SoundTouch 20
- Network Scenario Testing: Various network configurations
- Error Scenario Testing: Device offline, network timeouts
- Cross-Platform Testing: Windows, macOS, Linux
CLI Tool Evolution
Command Categories Added by Phase
- Phase 1:
info,name,capabilities - Phase 2:
discover,play,volume,key - Phase 3:
bass,balance,source,presets - Phase 4:
clock,network - Phase 5:
events - Phase 6:
zone - Phase 7: Advanced audio commands
- Phase 8:
speaker(TTS, URL, beep notifications) - Phase 9: Bug fixes (speaker beep reliability)
CLI Feature Enhancements
- Host:Port Parsing: Support for
192.0.2.100:8090format - Auto-Discovery Integration: Seamless device discovery
- Formatted Output: Human-readable, structured output
- Error Handling: Comprehensive error messages and recovery suggestions
- Help System: Comprehensive help and examples
Technical Achievements
Architecture Milestones
- Clean Package Structure: Well-organized pkg/ architecture
- Interface-Based Design: Testable and mockable components
- Error Handling: Comprehensive error types and contextual messages
- Configuration System: Flexible configuration via files and environment variables
Performance Optimizations
- Device Caching: TTL-based caching for discovery performance
- Connection Pooling: Efficient HTTP connection management
- WebSocket Efficiency: Optimized real-time event handling
- Memory Management: Efficient XML parsing and model handling
Cross-Platform Support
- Multi-OS Compatibility: Windows, macOS, Linux support
- Build System: Comprehensive Makefile with cross-compilation
- Docker Support: Containerized deployment options
- WASM Preparation: Foundation for browser integration
User Experience Improvements
Safety Features
- Volume Warnings: Warnings for high volume levels
- Input Validation: Comprehensive input range validation
- Error Recovery: Graceful handling of network issues
- User Feedback: Clear status messages and progress indicators
Convenience Features
- Auto-Discovery: Automatic device finding
- Preset Analysis: Intelligent preset management
- Source Shortcuts: Direct source selection methods
- Zone Management: High-level multiroom operations
Documentation Evolution
- API Documentation: Comprehensive endpoint documentation
- Usage Guides: Detailed feature usage guides
- Troubleshooting: Common issues and solutions
- Examples: Real-world usage examples
Future Enhancement Roadmap
Next Phase Candidates
- Web Application Interface: Browser-based SoundTouch controller
- Home Assistant Integration: Smart home platform integration
- WASM Browser Library: Pure browser implementation
- Mobile App Development: Native mobile applications
- Docker Distribution: Containerized deployment options
Community Features
- Plugin System: Extensible architecture for community plugins
- Custom Event Handlers: User-defined event processing
- Configuration Presets: Shareable device configurations
- Automation Scripts: Scheduled playback automation
Lessons Learned
Development Insights
- Real Device Testing is Critical: API documentation doesn’t capture all device behaviors
- Safety First: User protection features are essential for audio equipment
- Progressive Enhancement: Building features incrementally ensures solid foundation
- Community Value: Open source approach accelerates development and testing
Technical Insights
- XML Parsing Complexity: SoundTouch API has quirks requiring careful XML handling
- Network Variability: Different network configurations require multiple discovery methods
- Device Differences: SoundTouch models have subtle API differences
- WebSocket Reliability: Real-time connections need robust reconnection logic
This document tracks the evolution of the Bose SoundTouch API client from initial concept to production-ready library.
Last updated on