Skip to main content

40 posts tagged with "releases"

View All Tags

Kyber 0.21.0

· 2 min read

Kyber 0.21.0 introduces full authentication support. Both the desktop and web clients can now authenticate with a server that requires credentials, enabling secure deployments where access to the streaming session must be gated. The server generates and validates session tokens, and the full authentication flow is integrated into both the native and browser clients.

On Windows, key repeat is now handled on the host side, ensuring that held keys produce repeated input events correctly regardless of the client's local keyboard repeat settings. Unicode codepoint injection is also now supported on Windows, making it possible to send arbitrary Unicode characters to the host — important for input method editors, non-Latin scripts, and special characters. The virtual display service on Windows now supports more than one virtual screen, enabling multi-monitor remote desktop configurations with multiple virtual monitors.

The capture and encoding server has been updated to FFmpeg 7.1.2. At startup, the server now logs all available GPU adapters and identifies which one it selected for encoding, making it easier to diagnose GPU selection issues in multi-GPU machines. The clock offset between client and server is now always synchronised, not just at connection start, improving timestamp accuracy over long sessions. Server process startup errors are now logged with more detail, making failure diagnosis faster when the server fails to start a subprocess.

Changelog​

  • Add authentication support
  • libclient: always update clock offset
  • libkynput/win32: Implement keypress repetition on Host side
  • libkynput/win32: Add Unicode codepoint injection support
  • windows_service/kidd: Allow to plug more than one screen
  • avserver: Update to ffmpeg 7.1.2
  • avserver/win32: Log available adapters and used adapter
  • controller: Correctly log when a process fails to start
  • (web) Add authentication support
  • (web) libclient: always update clock offset

Kyber 0.20.0

· 2 min read

Clipboard support arrives on Windows in this release, allowing text to be copied and pasted between the client and host machines in both directions. The web client also gains clipboard support, bringing parity across native and browser deployments.

The audio capture pipeline on Windows fixes a channel count mismatch that could cause audio to be incorrectly routed or silenced in certain multi-channel configurations. PS4 controller trigger injection is fixed — triggers were previously not registering correctly when injected on the host side. The input handling layer is updated to SDL 2.32.8, picking up upstream bug fixes and compatibility improvements.

Metrics support is integrated into both the desktop and web clients, providing a foundation for monitoring streaming health and performance. The networking stack has been updated to current versions, incorporating security patches and performance improvements. The web JavaScript API now exposes the current bitrate in client state, and the bitrate is also reported immediately at connection start.

Changelog​

  • Rust toolchain updated to 1.89.0
  • windows: Add clipboard support for client and host side
  • libkynput: Correctly inject PS4 controller triggers. PS4 triggers must also be injected as buttons
  • Integrate metrics support
  • Update actix, rustls, quinn, wtransport
  • avserver/wasapi: Correctly fill channel count
  • libkynput: Update SDL to 2.32.8
  • (web) Rust toolchain updated to 1.89.0
  • (web) libkynput: Add Clipboard support
  • (web) jsapi: Expose bitrate in ClientState
  • (web) libclient: Notify bitrate at startup
  • (web) Integrate metrics support
  • (web) Upgrade web-sys/js-sys to 0.3.77
  • (web) Upgrade wasm-bindgen-cli to 0.2.100

Kyber 0.19.1

· One min read

This patch fixes a crash in the input handling layer where a single malformed network packet would cause the input pipeline to abort entirely. The input handler now skips malformed packets and continues processing, improving resilience in degraded network conditions.

Changelog​

  • libkynput: Don't fail on first malformed packet

Kyber 0.19.0

· 3 min read

Kyber 0.19.0 brings meaningful improvements to streaming quality, session observability, and platform robustness. The most impactful user-facing addition is dynamic bitrate control: the streaming bitrate can now be adjusted at runtime without reconnecting, and the web client exposes this through a live bitrate control API. The default minimum video bitrate is set to 5 Mbps, with a configurable floor for deployments that need it lower. Both audio and video buffer sizes are now tunable via command-line options (--audio-buffer and --video-buffer) on the desktop, and exposed through the JavaScript API on the web, giving users direct control over the latency-versus-smoothness trade-off.

Session tracing improves significantly: the server now generates a unique Session ID at the start of each stream, logs it, and sends it to the client. The client logs this ID upon receiving it, making it straightforward to correlate server and client logs for a specific session when diagnosing issues. The QUIC transport layer now filters out duplicate frames in the GopStream protocol, preventing redundant data from reaching the decoder.

On Windows, the capture and encoding server implements a monotonic clock, avoiding timestamp issues caused by non-monotonic system clock sources. The clock source used by the stream processing pipeline is now configurable from kyber_config.toml. The NVENC encoder now correctly sets the GOP size when intra-refresh is disabled. The QUIC transport automatically finds an available IPC port at startup instead of requiring manual configuration. The input handling C API gains rumble unpack support and includes vendor and product IDs in gamepad plug packets, enabling more precise gamepad identification. The web client fixes cases where mouse position events were incorrectly sent instead of relative mouse move events, and adds Client.disconnect_and_stop() for cleaner teardown from JavaScript. Gamepad plug and unplug notifications are now exposed through the JavaScript API, and audio initialization is skipped gracefully when SharedArrayBuffer is unavailable in the browser context.

Changelog​

  • avserver/win32: Implement monotonic clock
  • windows_service: Correctly log CreateProcessAsUserW() error
  • kymux: Try to find an available port when starting IPC
  • kyaudioreg: Fix compensation
  • desktop: Add --audio-buffer parameter
  • controller: Remove timeout on avserver kill
  • libclient/rtp: Allow to override the SDP folder with envvar KYBER_CACHEDIR
  • libkynput: Add SDL2 feature to be able to trigger SDL2 support
  • libkynput/capi: Add rumble unpack
  • libkynput/capi: Add vendor/product id in libkynput_gamepad_plug_to_packet()
  • txproto: Rebase to upstream/master
  • desktop: Bitrate can now changed dynamically during runtime
  • avservice: Allow to configure txproto clock source from kyber_config.toml
  • kyaudioreg: Rework underflow log
  • desktop: Add video-buffer option
  • avservice: By default, the video bitrate can't be set under 5 mbps
  • avservice: Allow to configure the minimum allowed video bitrate
  • avservice/nvenc: Set GOP when intrarefresh is disabled
  • controller: Generate, log and send a SessionId on streaming start
  • libclient: Log SessionId sent by controller on streaming start
  • kymux: Filter out duplicates in GopStream
  • (web) jsapi: Add audio_buffer parameter
  • (web) kyproto/kyaudioreg/libclient: Use kywasmtime
  • (web) jsapi: Add live bitrate control
  • (web) libclient: Skip audio initialization if SharedArrayBuffer isn't defined
  • (web) kyaudioreg: Rework underflow log
  • (web) jsapi: Add video_buffer option
  • (web) kymux: Filter out duplicates in GopStream
  • (web) libclient: Log SessionId sent by controller on streaming start
  • (web) jsapi: Expose gamepad plug/unplug notifications
  • (web) inputs: Fix cases where MousePosition where sent instead of MouseMove
  • (web) jsapi: Add Client.disconnect_and_stop() to both disconnect and stop the Client

Kyber 0.18.2

· One min read

Initialisation errors in the server are now written to controller.log, making it easier to diagnose startup failures that would previously have gone unrecorded.

Changelog​

  • controller: Log initialization errors in controller.log

Kyber 0.18.1

· One min read

A security fix corrects cookie key generation in the server's authentication layer, which could have produced weak or predictable session cookies. On the web client, input handling now cleanly manages the case where the video canvas is removed from the page during a mouse move event, and window-level event listeners are properly unregistered when the canvas is removed. The client backend now stops correctly when the data plane connection closes.

Changelog​

  • avserver: Log when display enumeration has been started
  • avserver: Add pid in logs
  • txproto/dxgi: Add more error logs
  • txproto/wasapi: Reduce some log severity
  • controller: Log actix server errors
  • controller: Log displays at startup
  • libclient: Stop backend on DataPlaneClosed
  • (web) libkynput: Notify JsElementNotFound once in mousemove if canvas has been dropped
  • (web) libkynput: Unregister window events if canvas has been removed
  • (web) libclient: Stop backend on DataPlaneClosed

Kyber 0.18.0

· 3 min read

Kyber 0.18.0 brings a reworked protocol selection system, expanded TLS flexibility, and quality-of-life improvements for audio control. Protocol selection for both video and audio has been refactored and is now exposed through a dedicated --audio-protocol parameter, giving you independent control over the transport used for each stream. Audio can now be sent over an unreliable QUIC channel, which reduces latency at the cost of occasional dropped packets — a useful trade-off for real-time use cases. The complete TLS certificate chain is now loaded correctly by the server, and you can opt in to using the operating system's built-in certificate store on the client side. Server TLS certificates are now optional when using the WebSocket backend, simplifying local and development setups. The QUIC stack has been updated to quinn 0.11.5, wtransport 0.4.0, and rustls 0.23.13.

The desktop client now correctly hides the cursor at startup when the session requires it, and keyboard shortcuts for adjusting audio volume have been added. A workaround has been applied for a Windows-specific issue where negative presentation timestamps could occur while the NTP clock was adjusting backwards, which previously caused encoding problems.

On the web side, a bug that prevented the correct screen resolution from being applied on display selection has been fixed. A spurious warning that appeared in logs on deliberate disconnect has been suppressed, and missing WebTransport certificate hashes from the server are now handled gracefully. Volume and mute controls are available through the JavaScript API.

Changelog​

  • desktop: Refactor protocol selection and add audio protocol parameter
  • desktop: Correctly hide cursor at startup if required
  • avserver/win32: Workaround negative PTS generation while NTP goes backward in time
  • controller/ws: Handle close control frame
  • libclient: Update VLC. Kymux branch is now based on 6880921445
  • libclient: Allow to rely on builtin OS TLS certificates
  • desktop/kymux-audio: Add unreliable parameter
  • controller: Correctly load the complete certificate chain
  • controller/ws: Make server certificate generation optional
  • desktop: Add audio volume keyboard shortcuts
  • Update Quic stack (quinn 0.11.5, wtransport 0.4.0, rustls 0.23.13)
  • (web) jsapi: Refactor protocol selection and add audio protocol parameter
  • (web) inputs: Fix display selection. The screen resolution wasn't correctly selected
  • (web) Also log video coded size when receiving libclient::Event::CanvasResized
  • (web) libclient: Avoid to display "Failed to receive audio/video from Kymux" when disconnection has been requested
  • (web) libclient: Handle cases where controller gives no Webtransport hash certificate
  • (web) jsapi: Add audio volume/mute API

Kyber 0.17.1

· One min read

This patch adds a --gamepad_force_xbox360 option for the desktop client, which forces all connected gamepads to be reported as Xbox 360 controllers — useful for games or applications that only recognise that specific controller type. The web client gains the equivalent gamepad_force_xbox360 parameter. A regression introduced in web version 0.5.0 that broke display resolution changes has been fixed. A subsequent web-only patch makes the audio regulator lock-free, eliminating a source of potential audio stalls under load.

Changelog​

  • desktop: Add --gamepad_force_xbox360
  • libclient: Log intra_refresh setting received in StreamingSessionConfig
  • (web 0.5.2) jsapi/start_streaming: Correctly return an error when displaylist is unknown
  • (web 0.5.1) Correctly handle display resolution change (0.5.0 regression)
  • (web 0.5.1) libclient: Log intra_refresh setting received in StreamingSessionConfig
  • (web 0.5.1) jsapi: Add gamepad_force_xbox360 parameter

Kyber 0.17.0

· 2 min read

Version 0.17.0 focuses on multi-display support, encoder configurability, and gamepad improvements. You can now stream multiple displays simultaneously by specifying the number of screens with --display_count, making Kyber much more practical for multi-monitor setups. Encoder intra-refresh can be configured directly from the command line with --intra_refresh, and the capture and encoding server can now accept encoder configuration overrides from kyber_config.toml for fine-grained tuning without rebuilding. The data plane port is also overridable, giving more flexibility in network environments that require specific port assignments.

Two bugs in the QUIC transport layer for unreliable datagrams have been fixed — duplicate datagram handling and the sequencer — improving reliability of the low-latency transport path. On Windows, PlayStation controllers are now registered as PS4 controllers, ensuring correct button mapping in games that distinguish between controller types. The console window on Windows is hidden so Kyber runs more cleanly in the background. Audio regulator integration is now complete on both desktop and web, providing stable, drift-free audio playback. The web client also gains the ability to send gamepad Product and Vendor IDs to the host.

Changelog​

  • libclient: Integrate kyaudioreg
  • avserver: Allow to overload encoder configuration from kyber_config.toml
  • kymux: Fix duplicate datagram handling with unreliable
  • kymux: Fix sequencer for unreliable protocols
  • desktop/win32: Hide console
  • desktop: Add multiscreen support. Can be enabled with option --display_count
  • desktop: Allow to configure Intra refresh with option --intra_refresh
  • inputserver/win32: Plug PlayStation controllers as PS4 controllers
  • controller: Allow to override dataplane port
  • (web) libclient: Integrate kyaudioreg
  • (web) Add intra_refresh parameter. This allows to override encoder configuration
  • (web) libkynput: Send gamepad's Product Id and Vendor Id
  • (web) libkynput: Avoid to spam when rumble isn't supported

Kyber 0.16.1

· 2 min read

This patch release addresses several correctness and reliability issues. A bug in the QUIC transport layer that caused an incorrect header size for unreliable datagrams has been fixed, resolving potential data corruption on that protocol path. On macOS 14 Sonoma, a regression that caused the window to report an invalid size when resized has been corrected. Both the capture and encoding server and the input server on Windows are now properly DPI-aware, which prevents scaling issues on high-DPI displays. At session start, the host cursor position is now synchronised to the local cursor position so the pointer appears in the right place immediately on connection. The web client patches include the transport fix, improved connection logging, and a lock-free rework of the audio regulator that eliminates a class of potential contention issues.

Changelog​

  • kymux: Fix unreliable header size
  • desktop: Expose kymux_unreliable protocol
  • macos: Fix window size sometimes being invalid when resizing on macOS 14 Sonoma
  • avserver/win32: Make process DPI aware
  • inputserver/win32: Make process DPI aware
  • desktop: Move the host cursor position to match the local one at startup
  • libclient: Improve start and stop logs
  • (web 0.4.2) libclient: Make AudioRegulator lock free
  • (web 0.4.1) kymux: Fix unreliable header size
  • (web 0.4.1) Expose kymux_unreliable protocol
  • (web 0.4.1) libclient: Improve start and stop logs