Skip to main content

Kyber 0.16.0

· 2 min read

Kyber 0.16.0 delivers encoder and audio improvements alongside a number of dependency updates. The capture and encoding server now supports YUV 4:4:4 colour for HEVC when using Intel Quick Sync Video, joining the NVENC support added in 0.15.0. FFmpeg has been updated to version 6.1.1, and the NVENC headers, Intel VPL, and AMD AMF driver libraries on Windows have been refreshed as well. A bug causing missing Direct3D 11 flags on certain AMD Ryzen 7 PRO hardware has been fixed, restoring reliable AMF encoding on those systems.

The most user-visible change in this release is that audio is now enabled by default — you no longer need to pass an extra flag to hear sound from the remote machine. Audio playback now uses the audio regulator on Windows, Linux, and macOS, producing smoother, more consistent output. The web client benefits from the same audio regulator and gains support for YUV 4:4:4 HEVC decoding in Chrome 126 and later.

Changelog​

  • avserver: Support yuv444p for hevc when using qsv
  • avserver/win32: Update nv-codec-headers to n12.1.14.0
  • avserver/win32: Update vpl to v2.10.1
  • avserver/win32: Update amf to 1.4.33
  • avserver: Update ffmpeg to 6.1.1
  • libclient: Update VLC. Kymux branch is now based on dfd6d83e50
  • vlc: Use AudioRegulator on Windows/Linux/macOS
  • desktop: Audio is now enabled by default
  • Update Rust dependencies
  • kymux: Revert timeout detection
  • libclient: Stop websocket on ControlPlaneClosed
  • libclient: Log PlayerConfig on start_streaming()
  • avserver: Improve initialization logs in dxgi and packet_sink
  • avserver/amf: Add missing D3D11 flags to support AMD Ryzen 7 PRO 5875U
  • (web) libclient: Use AudioRegulator
  • (web) Update Rust dependencies
  • (web) kymux: Revert timeout detection
  • (web) libkynput/wasm: Log gamepad id
  • (web) libclient: Send a notification to the main worker when VideoDecoder is configured
  • (web) libclient: Support yuv444p for hevc. Requires Chrome 126

Kyber 0.15.0

· 3 min read

Version 0.15.0 is a substantial update that improves error detection, encoder flexibility, and connection resilience throughout the stack. The capture and encoding server now runs on an integrated media pipeline that enables more sophisticated stream processing. Encoder selection now applies consistently whether you are using QUIC or RTP transport, and HEVC streaming with NVENC now supports the YUV 4:4:4 colour format for richer colour fidelity. When the encoding server encounters a problem — whether during initialisation, frame acquisition, or encoding itself — the error is now detected and forwarded to the application, and outright crashes are also reported rather than silently disappearing. The server will drop already-captured frames instead of encoded ones when the network cannot keep up, which keeps latency lower under congestion.

Connection robustness has also improved: the data plane now has a one-minute timeout so stalled connections are detected, the client stops cleanly if the data plane fails or the streaming session cannot start, and a race condition that was causing spurious 403 errors when starting a stream has been fixed. Support for the Side and Extra mouse buttons has been added to input handling, and macOS builds now use FFmpeg 5.1.1. A new /stop_streaming endpoint lets you stop a streaming session without tearing down the entire server process.

The web client picks up all of these improvements and adds the ability to stop and restart both the client and the streaming session independently without reloading the page. Gamepad detection now works even without a gamepadconnected browser event firing, a decoder crash that affected Mac users has been fixed by increasing the video decoder queue size, and log noise on data plane disconnect has been reduced.

Changelog​

  • Rust toolchain updated to 1.76.0
  • controller: Update wtransport to 0.11.0
  • controller/cors: Allow Access-Control-Allow-Credentials
  • controller: Add /stop_streaming endpoint
  • controller: Fix racy kymux stop. Should fix the remaining 403 errors when starting kymux
  • avserver: Integrate libtxproto
  • avserver: Encoder selection now applies also to RTP backend
  • avserver: Detect Initialization/Acquisition/Encoding errors and forward them to the application
  • controller: Forward avserver crash to the application
  • kymux/kycom: Fix TcpStream read error
  • controller/libclient: Implement connection timeout detection (1 minute) on Data Plane. The event is only logged for now
  • libclient: Stop if Data Plane connection fails, or if streaming start fails
  • libclient/macos: Use ffmpeg 5.1.1 (like Windows) instead of master
  • avserver: Support yuv444p for hevc when using nvenc
  • libkynput: Handle Side/Extra MouseButtonType
  • txproto: Avoid to drop encoded frames when network is slow. Drop acquired frames instead
  • kymux: Correctly handle write during congestion, when using wtransport backend
  • (web) Client can now be stopped and restarted
  • (web) Streaming can now be stopped and restarted
  • (web) libclient/http: Set credentials=include when calling fetch()
  • (web) avserver: Detect Initialization/Acquisition/Encoding errors and forward them to the application
  • (web) controller: Detect avserver crashes and forward them to the application
  • (web) Implement connection timeout detection (1 minute) on Data Plane. The event is only logged for now
  • (web) libclient: Stop if Data Plane connection fails, or if streaming start fails
  • (web) libkynput: Plug gamepad when detected without gamepadconnected
  • (web) libclient: Increase Demuxer -> Decoder video queue size to fix decoder crash on Macs
  • (web) libkynput: Handle Side/Extra MouseButtonType
  • (web) libkynput: Avoid to spam when DataPlane is disconnected

Kyber 0.14.0

· 3 min read

Kyber 0.14.0 brings meaningful improvements to connection reliability and visibility on both desktop and web. The connection process is now split into two distinct stages — first establishing the control plane link, then starting the streaming session — making it clearer exactly where a connection stands at any given moment. If either stage fails, you now receive a specific notification explaining what went wrong and why the session ended, rather than a silent timeout. A one-minute timeout guards the control plane connection, so a failed or stalled attempt is detected and surfaced quickly rather than left hanging indefinitely.

On Windows, a long-standing latency issue with H.264 hardware decoding in Chromium-based browsers has been resolved through a fix to how encoder parameters are packaged for the stream, resulting in noticeably snappier video for affected users.

The web client receives all of the same connection-lifecycle improvements alongside several stability fixes. The host cursor shape is now applied correctly only when the pointer is actually inside the video canvas. A new API lets you query which video codecs the browser supports, and notifications — including canvas resize events — are now delivered through a unified notification system. The client will now automatically stop itself on a video decoding error rather than hanging, and audio decoding errors are handled gracefully as well. Gamepad handling no longer panics on unrecognised buttons or axes, and two startup crashes have been fixed.

⚠️ The web client JavaScript API and the server protocol both contain breaking changes in this release. Existing web integrations will need to be updated.

Changelog​

  • controller/libclient: Implement connection timeout detection (1 minute) on Control Plane
  • Add client lifecycle notifications (connection failed, disconnected + reason)
  • Connection steps are now splitted (1. Connect to the Control plane, 2. Start streaming session)
  • avserver/win32: Correctly patch NVENC H264 SPS to fix H264 latency issue on Windows Chromium when using hardware decoding
  • (web) ⚠️ This version introduces breaking changes ⚠️
  • (web) The JS has breaking changes
  • (web) The protocol with the controller has breaking changes
  • (web) Implement connection timeout detection (1 minute) on Control Plane
  • (web) cursor: Apply Host cursor shape only when the cursor is inside the canvas
  • (web) Add supported_video_codecs()
  • (web) Add a generic notification API. "canvas_resized" is now passed through this API
  • (web) Add client lifecycle notifications (connection failed, disconnected + reason)
  • (web) Improve callstack decoding in browser console
  • (web) Client is now automatically stopped if a video decoding error is detected
  • (web) Handle audio decoding errors correctly
  • (web) gamepad: Avoid to panic when receiving unknown button/axis
  • (web) Connection steps are now splitted (1. Connect to the Control plane, 2. Start streaming session)
  • (web) Fix a case where cursor was hidden and not send after connection
  • (web) Log client revision at startup
  • (web) Fix a crash when VideoFrame queue is full at startup

Kyber 0.13.2

· One min read

This patch makes the server's listening port configurable via kyber_config.toml, removing the need to rely on the default port when running Kyber behind a custom network setup or alongside other services.

Changelog​

  • controller: Make listening port configurable in kyber_config.toml

Kyber 0.13.1

· One min read

This patch updates TLS certificates for both the desktop and web clients, keeping secure connections valid. It also fixes a bug where TLS hostnames were not being set correctly for QUIC and WebSocket connections, which could cause certificate validation failures when connecting by hostname.

Changelog​

  • libclient: Correctly set TLS hostnames for Kymux and Websocket connections
  • Update TLS certificates
  • (web) Update TLS certificates

Kyber 0.13.0

· 2 min read

⚠️ This release is not compatible with 0.12.x. Both the host and client must be updated together.

Version 0.13.0 is a major update that brings web browser support, significant under-the-hood improvements, and a range of compatibility fixes. The headline addition is the initial release of the Kyber web client: you can now connect to a Kyber host directly from a modern browser, with support for H.264 and HEVC video, audio, and the full range of input types including keyboard, mouse, and gamepad. Both WebSocket and WebTransport — with reliable, GOP-stream, and unreliable-FEC protocol modes — are supported in the browser client.

On the desktop side, the server now adds WebSocket and WebTransport as available communication backends, making it easier to bridge browser clients and desktop hosts. The streaming pipeline has been updated to FFmpeg 6.0 with refreshed dependencies. Linux support has been improved with correct handling of libinput version 1.19 and later, and Linux builds now target Debian 12 (Bookworm) as the baseline. Counter-Strike 2 can now be played through Kyber after resolving an input compatibility issue, and a visual bug showing a black cursor instead of an invisible one on certain display configurations has been fixed. The server now detects and terminates a stalled streaming process when a session ends, preventing orphaned processes from lingering in the background.

Changelog​

  • Rust toolchain updated to 1.73.0
  • ci: Debian build now targets Bookworm (12.0)
  • linux: Integrate a correct support of libinput 1.19+
  • avserver: Update ffmpeg to 6.0 and update its dependencies
  • libkynput: Update to SDL 2.28.2
  • kymux: Rework the EndpointId size and generation
  • controller now kills stucked avserver when streaming session stop is requested
  • libkynput: Counter Strike 2 is now playable
  • libkynput: Fix black cursor instead of invisible cursor on VLC 3
  • controller: Add websocket and webtransport backends
  • (web) Video support (H264, HEVC)
  • (web) Audio support
  • (web) Input support: Keyboard, MouseKey, MouseWheel, MousePosition, MouseMove, Cursor, Gamepad
  • (web) Websocket backend
  • (web) Kymux backend, using Webtransport. Protocols supported: reliable, gopstream, unreliablefec

Kyber 0.12.0

· One min read

⚠️ This release is not compatible with 0.10.x or 0.11.x. Both the host and client must be updated together.

Version 0.12.0 introduces new video streaming modes that give you finer control over the trade-off between latency, reliability, and bandwidth. In addition to the standard reliable stream, you can now choose a GOP-stream mode designed for lower latency, or an unreliable FEC mode that uses forward error correction to recover lost packets without retransmission. These modes are selectable via the --protocol option on the client. A new --bitrate option has also been added, letting you set the target video bitrate directly from the command line.

On the encoding side, NVENC intra-refresh is now enabled by default for NVIDIA GPUs, which reduces periodic quality dips caused by keyframe insertion during fast motion. If you prefer the previous behaviour, it can be disabled in the configuration file.

Changelog​

  • Update libvlc to kymux.15. Based on upstream 36b1865d95
  • kymux: Add new video protocols (Gopstream and UnreliableFec)
  • avserver: Enable Intra Refresh when using Nvenc. Can be disabled in kyber_config.toml
  • client: Add --bitrate option to configure the connection bitrate
  • client: Add new possible values for --protocol: kymux_reliable, kymux_gopstream, kymux_unreliable_fec

Kyber 0.11.0

· One min read

Version 0.11.0 adds one important quality-of-life feature for headless Windows host setups. When the Kidd virtual display driver is installed and the host PC has no physical monitor connected, Kyber will now automatically plug in a virtual monitor. This means the host always has an active display to stream, even in a server room or cloud environment where no screen is physically attached.

Changelog​

  • Windows host: If Kidd is installed, a virtual monitor is plugged if the PC has no monitor

Kyber 0.10.1

· One min read

This patch resolves two Windows-specific input injection issues. Ctrl+Alt+Del and Win+L — both intercepted by Windows before reaching normal applications — can now be correctly sent to the host machine, restoring full remote desktop control over these system-level shortcuts.

Changelog​

  • Update Rust dependencies
  • Windows host: Correctly inject Ctrl+Alt+Del
  • Windows host: Correctly inject Win+L

Kyber 0.10.0

· 2 min read

⚠️ This release contains a breaking change to the QUIC transport protocol that makes it incompatible with previous versions. Both the host and client must be updated together.

Version 0.10.0 extends the QUIC transport to support 32-bit targets, opening the door to a wider range of devices and embedded platforms. Display selection is now available from the client command line via --display_idx, so you can choose which monitor to stream when the host has multiple displays connected. The streaming pipeline now correctly handles any host display resolution rather than a fixed set, and it also adapts in real time if the host resolution changes while a session is active — useful for remote desktops where the display configuration may shift.

All Kyber components now write their logs to a dedicated log/ folder, making troubleshooting considerably easier. On Windows, the service installation has been improved: the setup script now configures autostart and firewall rules automatically, and the service no longer spawns a console window in the background during operation.

Changelog​

  • kymux: The implementation is now compatible with 32 bits targets. Breaks compatibility with previous versions
  • client: Add --display_idx option to select the display to stream
  • Handle any Host display resolution
  • Handle Host dynamic resolution update
  • All components are now logging in "log/" folder
  • Windows service: No cmd.exe are spawned anymore
  • Windows service: install_service.bat now configure the service as autostart
  • Windows service: install_service.bat correctly setups firewall rules