All notable changes to libwsv5 are documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
-
Response Handling - Fixed recording/streaming control commands to properly validate response success flags
obsws_start_recording(),obsws_stop_recording()now correctly check response->successobsws_start_streaming(),obsws_stop_streaming()now correctly check response->success- Test suite now properly allocates and validates response objects for all control operations
-
Scene Transformation Protocol - Fixed SetSceneItemTransform requests to use correct OBS WebSocket v5 field names
- Changed JSON field from
"transform"to"sceneItemTransform"(OBS protocol compliance) - All transformation tests (translation, rotation, scaling) now generate correct protocol messages
- Scene item transformations now work reliably with OBS Studio
- Changed JSON field from
-
File Structure - Reorganized for professional release
- Renamed
library.c→libwsv5.cto follow professional naming conventions - Renamed
library.h→libwsv5.hto avoid generic naming conflicts - Consolidated multiple test files into single
test.cexecutable - Removed deprecated and obsolete test files
- Renamed
-
Author Attribution - Added comprehensive headers to all source files
- Author: Aidan A. Bradley (Architect, Author, Maintainer)
- Consistent copyright and license attribution throughout codebase
- Professional file descriptions and purpose statements
-
Documentation Suite - Complete professional documentation
- README.md - User-friendly quick start guide with prerequisites, installation, and examples
- CHANGELOG.md - Detailed version history and progression (this file)
- API_REFERENCE.md - Wiki-style function reference for all 50+ public APIs
- Doxygen - Configured to generate comprehensive HTML and PDF documentation
-
Code Quality - Normalized all comments and naming conventions
- Removed unprofessional naming patterns
- Standardized comment style throughout
- Simplified test output descriptions
- Professional section headers and formatting
- Test Suite Refinement - Unified test binary with clear, professional descriptions
- All tests show proper help output with normalized descriptions
- Test sections properly identify sections and test progress
- Improved statistics tracking and result reporting
- 55/58 tests passing (94.8% success rate)
- Recording/streaming commands now validate both transport-level errors and application-level success
- Scene transformations strictly follow OBS WebSocket v5 JSON field naming specifications
- Improved error detection and reporting for protocol violations
- Standardized response handling pattern across all control operations
- Ensured proper cleanup with explicit
obsws_response_free()calls - Validated response allocation before checking success flags
- CMakeLists.txt updated to reference new professional filenames
- Single unified test executable improves distribution simplicity
- Doxygen configuration updated for new file structure
- ✅ Recording control commands now properly validate responses
- ✅ Streaming control commands now properly validate responses
- ✅ Scene item transformations now use correct protocol field names
- ✅ Scene rotation tests now work reliably
- ✅ Scene translation tests now work reliably
- ✅ Scene scaling tests now work reliably
None - fully backward compatible with 1.0.0
None
Potential features for future releases:
- Enhanced response caching for performance
- Request batching optimization improvements
- Advanced filtering and query syntax
- Built-in logging to file
- Performance metrics dashboard
- Complete Rewrite in C - Ported from Python to native C for performance and portability
- WebSocket v5 Protocol Support - Full implementation of OBS WebSocket v5 (RPC version 1)
- Connection Management - Robust connection establishment, maintenance, and cleanup
- Authentication - SHA256-based authentication with salt and challenge response
- Auto-Reconnection - Configurable automatic reconnection with exponential backoff
- Thread Safety - Thread-safe operations suitable for multi-threaded applications
- Multi-Connection Support - Manage multiple OBS instances simultaneously
- Event System - Real-time event callbacks for OBS state changes
- Error Handling - Comprehensive error codes and diagnostic messages
Connection Management:
obsws_init()- Initialize libraryobsws_cleanup()- Clean up library resourcesobsws_connect()- Establish connection to OBSobsws_disconnect()- Close connectionobsws_is_connected()- Check connection statusobsws_get_state()- Get current connection stateobsws_state_string()- Convert state to human-readable stringobsws_ping()- Send keep-alive ping
Configuration:
obsws_config_init()- Initialize configuration structureobsws_set_log_level()- Set logging verbosityobsws_set_debug_level()- Set debug output levelobsws_get_debug_level()- Get current debug levelobsws_set_log_timestamps()- Enable/disable log timestampsobsws_set_log_colors()- Enable/disable colored outputobsws_set_log_callback()- Set custom logging function
Request/Response:
obsws_send_request()- Send generic request to OBSobsws_response_free()- Free response memory
Scene Operations:
obsws_get_current_scene()- Get active scene nameobsws_set_current_scene()- Switch to sceneobsws_get_scene_list()- Get list of scenes
Recording & Streaming:
obsws_start_recording()- Start recordingobsws_stop_recording()- Stop recordingobsws_get_recording_status()- Get recording statusobsws_start_streaming()- Start streamingobsws_stop_streaming()- Stop streamingobsws_get_streaming_status()- Get streaming status
Source/Scene Item Control:
obsws_set_source_visibility()- Show/hide scene itemobsws_set_source_filter_enabled()- Enable/disable filterobsws_get_input_mute()- Check if input is mutedobsws_set_input_mute()- Mute/unmute input- Scene item transformations (translate, rotate, scale)
Monitoring:
obsws_get_stats()- Get connection statisticsobsws_process_events()- Process pending eventsobsws_version()- Get library version stringobsws_error_string()- Convert error code to message
Public Types:
obsws_connection_t- Connection handleobsws_config_t- Configuration parametersobsws_response_t- Response data structureobsws_stats_t- Connection statisticsobsws_state_t- Connection state enumerationobsws_error_t- Error code enumerationobsws_log_level_t- Logging level enumerationobsws_debug_level_t- Debug level enumeration
Callback Types:
obsws_log_callback_t- Logging callback function pointerobsws_event_callback_t- Event callback function pointerobsws_state_callback_t- State change callback function pointer
OBSWS_OK- SuccessOBSWS_ERROR_INVALID_PARAM- Invalid parameterOBSWS_ERROR_CONNECTION_FAILED- Connection failedOBSWS_ERROR_AUTH_FAILED- Authentication failedOBSWS_ERROR_SEND_FAILED- Send operation failedOBSWS_ERROR_RECV_FAILED- Receive operation failedOBSWS_ERROR_NOT_CONNECTED- Not connectedOBSWS_ERROR_OUT_OF_MEMORY- Memory allocation failedOBSWS_ERROR_TIMEOUT- Operation timed out
- README.md - Quick start and user guide
- API_REFERENCE.md - Complete API documentation
- CHANGELOG.md - Release history
- Doxygen Support - Generate HTML/PDF documentation
- Comprehensive Test Suite - Tests covering:
- Library initialization
- Single connection tests
- Audio control and source properties
- Scene manipulation and transformations
- Multi-connection concurrency
- Batch operations
- Error handling and edge cases
- Connection lifecycle management
- CMake Build - Modern CMake configuration
- Static Library - Produces
libwsv5.a - Optional Features - Tests and documentation generation
- Platform Support - Linux, macOS, BSD
- OBS WebSocket v5 (RPC version 1)
- WebSocket over TCP with optional TLS/SSL
- Authentication using SHA256
- Automatic keep-alive with ping frames
- Request ID tracking for async responses
- Event subscription management
- Single-threaded connection management
- Background event processing thread per connection
- Thread-safe request queuing
- Mutex-protected data structures
- Condition variables for response synchronization
- No global state (fully reentrant)
- Explicit cleanup required
- Response memory ownership transferred to caller
- Automatic cleanup on disconnect
- Configurable buffer sizes
- Automatic reconnection on network failure
- Exponential backoff for reconnection attempts
- Error codes distinguish between recoverable and fatal errors
- Comprehensive error messages
- Statistics tracking for debugging
- Synchronous API only (async returns within timeframe)
- Single-threaded per connection (no request multiplexing within connection)
- No built-in event filtering (receives all subscribed events)
- Requires manual memory management for responses
- WebSocket fragmentation handled internally
- libwebsockets 3.0+ - WebSocket protocol implementation
- OpenSSL 1.1.0+ - Cryptographic functions
- cJSON - JSON parsing and generation
- POSIX - Standard C library features
- Initial C project structure based on Python 1.5.3a feature set
- OBS WebSocket v5 protocol C implementation foundation
- Build system and CMake configuration
- WebSocket connection framework
- Authentication system skeleton
- Test infrastructure setup
Starting May 2nd, 2025, the complete C rewrite began using Python v1.5.3a as the reference implementation. This marked the start of a nearly 6-month development cycle to bring libwsv5 to production-ready C code (v1.0.0 on October 17th, 2025).
- Stable Python implementation with all major features
- OBS WebSocket v5 protocol support
- Scene and source control
- Recording/streaming management
- Event handling system
- Production-ready state before C rewrite decision
Python v1.5.3a represented the mature end-state of the Python implementation (April 2025). Approximately 4 months after v1.0.0 initial full implementation (January 1, 2025), significant refinements were made:
Development Focus (Jan 1 - May 1, 2025):
- Progressive improvements to logging systems
- Enhanced safety protocols and error handling
- Comprehensive monitoring and statistics collection
- Reconnection logic refinement and testing
- Extensive edge case testing and protocol compliance validation
- Full OBS protocol functionality exploration and documentation
- Methodical design planning for C implementation (including hand-drawn architectural diagrams)
Performance Context: The Python implementation experienced variability in Time to Execute (TTE) and signal processing latency - partly due to implementation limitations rather than Python itself. However, this thorough exploration informed a methodical design approach for the C implementation.
After 6 months of Python development, the decision was made to rewrite the entire library in C to achieve dramatically better performance, portability, and eliminate Python runtime dependencies. This version served as the comprehensive reference implementation for the C rewrite that began on May 2nd, 2025.
- Complete OBS WebSocket v5 protocol support
- Full connection management and lifecycle
- All core operations (scene control, recording/streaming, source management)
- Event handling system
- Authentication and security
- Test suite and documentation
- Production-ready Python library
Python v1.0.0 (January 1, 2025) marked the first complete, full-featured implementation of the libwsv5 library. Approximately 3.5 weeks after the v0.1.0 prototype (December 5, 2024), this version represented a fully functional library with all major features implemented. This became the baseline for extensive refinement and optimization work over the following 4 months, ultimately leading to v1.5.3a.
- Project structure and initialization
- WebSocket protocol foundation
- Basic connection framework
- Authentication skeleton
- Initial test infrastructure setup
Python v0.0.1 (November 10, 2024) marked the very beginning of the libwsv5 project as a Python implementation. This initial version established the foundational architecture and began exploring the OBS WebSocket v5 protocol requirements. Within approximately 3.5 weeks, this led to v0.1.0 with a more complete prototype framework.
| Version | Date | Status | Implementation | Key Milestone |
|---|---|---|---|---|
| 1.1.0 | Nov 2, 2025 | Production | C | Bug fixes, protocol compliance, professional release |
| Version | Date | Status | Implementation | Milestone | Duration from v0.0.1 |
|---|---|---|---|---|---|
| 1.1.0 | Nov 2, 2025 | Stable | C | Professionalization & bug fixes | 6 months |
| 1.0.0 | Oct 17, 2025 | Stable | C | Production-ready C rewrite | 5.5 months |
| 0.0.1 | May 2, 2025 | Development | C | C rewrite inception | Start |
| Version | Date | Status | Implementation | Milestone | Duration |
|---|---|---|---|---|---|
| 1.5.3a | May 1, 2025 | Archived | Python | Final production release before C rewrite | 4 months from v1.0.0 |
| 1.0.0 | Jan 1, 2025 | Archived | Python | First complete, full-featured implementation | 3.5 weeks from v0.1.0 |
| 0.1.0 | Dec 5, 2024 | Archived | Python | Early prototype framework | 3.5 weeks from v0.0.1 |
| 0.0.1 | Nov 10, 2024 | Archived | Python | Initial project structure & setup | Start |
- OBS Studio: 29.0.0+
- OBS WebSocket: v5.1.0+
- C Standard: C11
- Operating Systems: Linux, macOS, BSD
- Architectures: x86_64, ARM64, i386 (and other POSIX systems)
To verify correct installation:
cd build
./test -h localhost -p 4455 -w obs_password -d 1Expected output: Pass Rate: 90%+ (minor failures may occur if OBS is not fully configured)
- Documentation: See README.md and API_REFERENCE.md
- Issues: Report via GitHub issues on GitHub
- Testing: See test suite in
tests/test.c - Examples: Check README.md for code examples
libwsv5 is maintained by Aidan A. Bradley