<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Kyber Blog</title>
        <link>https://kyber.example.com/blog</link>
        <description>Kyber Blog</description>
        <lastBuildDate>Tue, 12 May 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[Kyber 0.26.0]]></title>
            <link>https://kyber.example.com/blog/kyber-0-26-0</link>
            <guid>https://kyber.example.com/blog/kyber-0-26-0</guid>
            <pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Clipboard handling takes a significant step forward in this release. Linux X11 hosts now support clipboard sharing, and Windows adds full HTML clipboard support alongside the plain-text clipboard introduced earlier. This means rich content — styled text, links, and formatted data — can now be copied and pasted across machines on Windows just as it would locally.]]></description>
            <content:encoded><![CDATA[<p>Clipboard handling takes a significant step forward in this release. Linux X11 hosts now support clipboard sharing, and Windows adds full HTML clipboard support alongside the plain-text clipboard introduced earlier. This means rich content — styled text, links, and formatted data — can now be copied and pasted across machines on Windows just as it would locally.</p>
<p>On the authentication front, Kyber now supports OpenID Connect (OIDC), giving teams and self-hosters the ability to integrate with existing identity providers such as Keycloak, Auth0, or any standards-compliant SSO system. Both the server and the desktop client support the full OIDC flow. The RTP streaming backend, which had silently stopped working after IPv6 support was added in 0.25.0, is now fixed.</p>
<p>The media pipeline receives a major upgrade with FFmpeg 8.1, bringing improved codec support and performance. AMD (AMF) and Linux VAAPI encoder settings are now correctly applied, resolving encoding quality and configuration issues. On Windows, Intel's HEVC 4:2:2 and 4:4:4 encoder has been replaced with the Microsoft equivalent, which is more broadly supported. Two new Linux screen capture backends — XCB and wlroots — are now available, expanding compatibility with different desktop environments.</p>
<p>The server's Windows system tray is now more resilient: tray icon initialization failures no longer crash the server, and the tray recovers automatically if the Windows taskbar is restarted. The service also stops its restart loop when it detects an invalid configuration rather than cycling indefinitely. The connected-client count shown in the tray is now correctly updated when sessions time out. The server watchdog process, previously always active, is now optional and can be disabled if not needed. On the web client side, the UI ships updated branding.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="changelog">Changelog<a href="https://kyber.example.com/blog/kyber-0-26-0#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no">​</a></h3>
<ul>
<li class="">kynput/x11: Add clipboard support</li>
<li class="">libkynput/win32: Add HTML clipboard support</li>
<li class="">controller/ws: Use kycom to interact with kyavserver and kynput</li>
<li class="">kycontroller/win32: Make tray init non-fatal with TaskbarCreated recovery</li>
<li class="">kyservice/win32: Stop restart loop on invalid config</li>
<li class="">kycontroller: Update tray client count on session timeout</li>
<li class="">kycontroller: make watchdog optional</li>
<li class="">kymedia: Bump to ffmpeg 8.1</li>
<li class="">kymedia: Correctly configure amf and vaapi encode settings</li>
<li class="">kymedia/vlc: Replace Intel HEVC 422/444 support by the Microsoft one</li>
<li class="">kymedia: Add "xcb" and "wlroots" grab_backend</li>
<li class="">kycontroller: Add OIDC support</li>
<li class="">desktop: Add OIDC support</li>
<li class="">kycontroller: Fix RTP backend. Was broken since IPv6 support</li>
<li class="">kynput: Export scancode conversion helpers for all platforms</li>
<li class="">(web) ui: integrate new branding</li>
<li class="">(web) kyctl: Extract AV players into separate crates</li>
</ul>]]></content:encoded>
            <category>releases</category>
        </item>
        <item>
            <title><![CDATA[Kyber 0.25.0]]></title>
            <link>https://kyber.example.com/blog/kyber-0-25-0</link>
            <guid>https://kyber.example.com/blog/kyber-0-25-0</guid>
            <pubDate>Tue, 31 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Kyber 0.25.0 adds IPv6 support across both the desktop and web clients, making it possible to connect over IPv6 networks and dual-stack environments without any extra configuration. The server now handles connections over IPv6 with the same reliability as before.]]></description>
            <content:encoded><![CDATA[<p>Kyber 0.25.0 adds IPv6 support across both the desktop and web clients, making it possible to connect over IPv6 networks and dual-stack environments without any extra configuration. The server now handles connections over IPv6 with the same reliability as before.</p>
<p>Linux gains a DRM/KMS screen capture backend in this release, complementing the existing X11 and NvFBC options and enabling capture directly at the display driver level — useful for setups without a traditional desktop environment. The Windows server now displays a system tray icon, giving quick visual feedback on the server's state. On Windows, display unplug events during an active streaming session are now handled correctly by the capture and encoding server, preventing crashes or hangs when a monitor is disconnected at runtime.</p>
<p>The command-line tool now surfaces control-plane connection errors clearly instead of silently failing, making troubleshooting easier. A bug where the server's configured public port was incorrectly cached and served stale values to clients has been fixed, as has a deadlock that could cause the login endpoint to block indefinitely under load. The web client adds HTTP timeouts to all outgoing requests, preventing hangs in degraded network conditions. JWT key generation is now available directly from the command-line tool, streamlining certificate and token management. The server's incoming connection handling is also more robust against edge cases in the QUIC transport accept loop. On Windows, keyboard setting changes are now monitored at runtime so input behaviour stays correct if the user adjusts keyboard settings while a session is active.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="changelog">Changelog<a href="https://kyber.example.com/blog/kyber-0-25-0#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no">​</a></h3>
<ul>
<li class="">kycontroller: Redirect /webclient to /webclient/</li>
<li class="">kynput/win32: Monitor keyboard setting changes</li>
<li class="">kyclient: Use rustls-platform-verifier</li>
<li class="">kycontroller/win32: Add tray icon</li>
<li class="">linux: Implement DRM/KMS grab</li>
<li class="">kyavservice/dxgi: Correctly handle display unplug at runtime</li>
<li class="">kyctl: Expose control plan connection error</li>
<li class="">kyclient: Add HTTP timeout to all requests</li>
<li class="">kycontroller: Fix public_port incorrectly cached in shared Kymux infrastructure</li>
<li class="">kyctl/jwt-gen: Add key generation support</li>
<li class="">kycontroller: Improve robustness of kymux incoming connection accept</li>
<li class="">kycontroller: Fix /login blocking forever on mutex contention</li>
<li class="">Add IPv6 support</li>
<li class="">(web) Add IPv6 support</li>
<li class="">(web) kyclient: Add HTTP timeout to all requests</li>
</ul>]]></content:encoded>
            <category>releases</category>
        </item>
        <item>
            <title><![CDATA[Kyber 0.24.0]]></title>
            <link>https://kyber.example.com/blog/kyber-0-24-0</link>
            <guid>https://kyber.example.com/blog/kyber-0-24-0</guid>
            <pubDate>Fri, 06 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[This release introduces basic password authentication, allowing server administrators to require a password before clients can connect. For deployments that do not need token-based authentication at all, the JWT backend can now be disabled entirely, simplifying the security model for simpler setups.]]></description>
            <content:encoded><![CDATA[<p>This release introduces basic password authentication, allowing server administrators to require a password before clients can connect. For deployments that do not need token-based authentication at all, the JWT backend can now be disabled entirely, simplifying the security model for simpler setups.</p>
<p>Cross-origin protections in the server have been tightened, reducing the attack surface for browser-based deployments. The Intel Quick Sync (QSV) encoder initialization bug that prevented QSV encoding from starting in some configurations is fixed. Log verbosity can now be controlled with the <code>KYBER_VERBOSE</code> environment variable without editing configuration files, which helps with debugging in production environments. The QUIC transport layer has been updated to wtransport 0.7.0, replacing the previously pinned pre-release build. The clipboard is now size-limited on the input handling side, preventing unexpectedly large clipboard payloads from being forwarded across the connection.</p>
<p>On the web client, the sidebar is now scrollable, fixing layouts where many options were cut off. A button to send Ctrl+Alt+Del directly to the host has been added to the sidebar — useful for Windows remote desktop scenarios. The web client also gains the same basic password authentication support as the desktop client.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="changelog">Changelog<a href="https://kyber.example.com/blog/kyber-0-24-0#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no">​</a></h3>
<ul>
<li class="">Rename kysdk components</li>
<li class="">Correctly place shebang in build scripts</li>
<li class="">kyclient: Update VLC. Kymux branch is now based on 4962271021</li>
<li class="">kycontroller: Correctly log toml parsing errors</li>
<li class="">kymux: Update wtransport to official 0.7.0</li>
<li class="">kynput: Limit clipboard size</li>
<li class="">kycontroller: Improve cross origin protections</li>
<li class="">Add basic authentication password support</li>
<li class="">Allow to disable jwt backend</li>
<li class="">kyavserver: Fix QSV acquisition</li>
<li class="">kyavserver: set log level based on KYBER_VERBOSE environment variable</li>
<li class="">(web) sidebar is now scrollable</li>
<li class="">(web) sidebar: Add a button to send Ctrl+Alt+Del to the host</li>
<li class="">(web) Add basic authentication password support</li>
</ul>]]></content:encoded>
            <category>releases</category>
        </item>
        <item>
            <title><![CDATA[Kyber 0.23.0]]></title>
            <link>https://kyber.example.com/blog/kyber-0-23-0</link>
            <guid>https://kyber.example.com/blog/kyber-0-23-0</guid>
            <pubDate>Fri, 30 Jan 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[This release removes the --non-free flag from the FFmpeg build configuration, improving compatibility with open-source build pipelines and distributions that require fully open licensing. The desktop client gains additional TLS certificate verification options, giving users more control over how server certificates are validated — useful for self-signed certificates, private CA setups, or stricter security policies. The web client received internal repository restructuring with no user-facing changes.]]></description>
            <content:encoded><![CDATA[<p>This release removes the <code>--non-free</code> flag from the FFmpeg build configuration, improving compatibility with open-source build pipelines and distributions that require fully open licensing. The desktop client gains additional TLS certificate verification options, giving users more control over how server certificates are validated — useful for self-signed certificates, private CA setups, or stricter security policies. The web client received internal repository restructuring with no user-facing changes.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="changelog">Changelog<a href="https://kyber.example.com/blog/kyber-0-23-0#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no">​</a></h3>
<ul>
<li class="">avserver/ffmpeg: Remove ffmpeg --non-free flag</li>
<li class="">desktop: Add more TLS certificate verification options</li>
<li class="">(web) Integrate new repository tree</li>
</ul>]]></content:encoded>
            <category>releases</category>
        </item>
        <item>
            <title><![CDATA[Kyber 0.22.0]]></title>
            <link>https://kyber.example.com/blog/kyber-0-22-0</link>
            <guid>https://kyber.example.com/blog/kyber-0-22-0</guid>
            <pubDate>Mon, 26 Jan 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Version 0.22.0 is one of the most feature-packed releases to date, adding automatic reconnection, multi-client support, watermarking, new capture backends, and a range of reliability improvements across the board.]]></description>
            <content:encoded><![CDATA[<p>Version 0.22.0 is one of the most feature-packed releases to date, adding automatic reconnection, multi-client support, watermarking, new capture backends, and a range of reliability improvements across the board.</p>
<p>Automatic reconnection is now built into both the desktop and web clients. When a connection drops unexpectedly, the client will attempt to reconnect transparently without requiring manual intervention. The web client exposes this through new <code>reconnecting</code>, <code>reconnected</code>, and <code>reconnection_failed</code> events, allowing web-based integrations to react accordingly. Multi-client support arrives on the server side: multiple clients can now connect to the same streaming session simultaneously, laying the groundwork for collaborative and monitoring use cases.</p>
<p>Two new capture backends have been added for Linux. NvFBC support enables high-performance, low-latency capture directly from NVIDIA GPUs, bypassing the compositor entirely. A watermark feature is available on Windows and Linux X11 with NVENC, allowing a visible overlay to be stamped on the captured stream — useful for content attribution or identifying source machines in multi-host setups.</p>
<p>On Windows, the capture and encoding server now prevents the display from sleeping when a frame acquisition timeout occurs, keeping the host awake during active sessions. Display hotplug events are now detected and handled at runtime, so connecting or disconnecting a monitor no longer requires a server restart. The x264 software encoder is now available on Windows as a fallback when hardware encoding is not available or desired. QUIC and WebTransport connections can now be handled simultaneously on the same server, improving compatibility with different client types. TLS certificate hashes are now verified by the client for QUIC connections, and TLS certificate paths have also been made configurable in the server configuration file. On Windows, multiple server instances can now run on the same machine without conflicting, and child processes are automatically cleaned up if the parent exits unexpectedly. The keyboard is grabbed in fullscreen mode on both Windows and Linux, ensuring key events are not intercepted by the local OS. The web client fixes scroll behaviour in Safari, resolves a configuration UI loading issue in Safari, and adds a gamepad blocklist option for filtering unwanted input devices.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="changelog">Changelog<a href="https://kyber.example.com/blog/kyber-0-22-0#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no">​</a></h3>
<ul>
<li class="">windows/linux: Grab keyboard when fullscreen is enabled</li>
<li class="">desktop: Add automatic reconnection support</li>
<li class="">libkypc/windows: Implement automatic child process cleanup</li>
<li class="">windows: Allow to run multiple controller instances on the same machine</li>
<li class="">vlc: Fix build issues for Windows cross build and iOS/visionOS build</li>
<li class="">controller: make TLS certificate paths configurable</li>
<li class="">avserver/win32: Prevent display sleep on frame acquisition timeout</li>
<li class="">controller: QUIC and Webtransport connections can now be handled simultaneously</li>
<li class="">libclient: Verify TLS certificate hash for QUIC connections</li>
<li class="">Implement watermark feature. For Windows and Linux X11 + nvenc only</li>
<li class="">linux: Implement NvFBC grab</li>
<li class="">controller: Add basic multi-client support</li>
<li class="">avserver/win32: Allow to use x264</li>
<li class="">avserver/win32: Detect display hotplug</li>
<li class="">(web) libkynput: Fix scroll behaviour in Safari</li>
<li class="">(web) jsapi: Add gamepad blocklist support</li>
<li class="">(web) ui: Vertically center canvas</li>
<li class="">(web) Add automatic reconnection support with new events: <code>reconnecting</code>, <code>reconnected</code>, <code>reconnection_failed</code></li>
<li class="">(web) html: fix config ui loading in safari</li>
</ul>]]></content:encoded>
            <category>releases</category>
        </item>
        <item>
            <title><![CDATA[Kyber 0.21.2]]></title>
            <link>https://kyber.example.com/blog/kyber-0-21-2</link>
            <guid>https://kyber.example.com/blog/kyber-0-21-2</guid>
            <pubDate>Wed, 26 Nov 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[⚠️ This patch regenerates the bundled TLS test certificates, which had expired. Both the desktop and web clients are affected. Update both the server and client to restore TLS connectivity if you use Kyber's built-in test certificates.]]></description>
            <content:encoded><![CDATA[<blockquote>
<p>⚠️ This patch regenerates the bundled TLS test certificates, which had expired. Both the desktop and web clients are affected. Update both the server and client to restore TLS connectivity if you use Kyber's built-in test certificates.</p>
</blockquote>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="changelog">Changelog<a href="https://kyber.example.com/blog/kyber-0-21-2#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no">​</a></h3>
<ul>
<li class="">tls: Regenerate test certificate</li>
<li class="">(web) tls: Regenerate test certificate</li>
</ul>]]></content:encoded>
            <category>releases</category>
        </item>
        <item>
            <title><![CDATA[Kyber 0.21.1]]></title>
            <link>https://kyber.example.com/blog/kyber-0-21-1</link>
            <guid>https://kyber.example.com/blog/kyber-0-21-1</guid>
            <pubDate>Mon, 24 Nov 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[This patch fixes a bug in cookie key generation for the authentication system introduced in 0.21.0, where session cookies could be generated with an incorrect key, causing authentication failures on reconnect.]]></description>
            <content:encoded><![CDATA[<p>This patch fixes a bug in cookie key generation for the authentication system introduced in 0.21.0, where session cookies could be generated with an incorrect key, causing authentication failures on reconnect.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="changelog">Changelog<a href="https://kyber.example.com/blog/kyber-0-21-1#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no">​</a></h3>
<ul>
<li class="">controller/auth: Correctly generate cookie key generation</li>
</ul>]]></content:encoded>
            <category>releases</category>
        </item>
        <item>
            <title><![CDATA[Kyber 0.21.0]]></title>
            <link>https://kyber.example.com/blog/kyber-0-21-0</link>
            <guid>https://kyber.example.com/blog/kyber-0-21-0</guid>
            <pubDate>Mon, 17 Nov 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[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.]]></description>
            <content:encoded><![CDATA[<p>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.</p>
<p>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.</p>
<p>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.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="changelog">Changelog<a href="https://kyber.example.com/blog/kyber-0-21-0#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no">​</a></h3>
<ul>
<li class="">Add authentication support</li>
<li class="">libclient: always update clock offset</li>
<li class="">libkynput/win32: Implement keypress repetition on Host side</li>
<li class="">libkynput/win32: Add Unicode codepoint injection support</li>
<li class="">windows_service/kidd: Allow to plug more than one screen</li>
<li class="">avserver: Update to ffmpeg 7.1.2</li>
<li class="">avserver/win32: Log available adapters and used adapter</li>
<li class="">controller: Correctly log when a process fails to start</li>
<li class="">(web) Add authentication support</li>
<li class="">(web) libclient: always update clock offset</li>
</ul>]]></content:encoded>
            <category>releases</category>
        </item>
        <item>
            <title><![CDATA[Kyber 0.20.0]]></title>
            <link>https://kyber.example.com/blog/kyber-0-20-0</link>
            <guid>https://kyber.example.com/blog/kyber-0-20-0</guid>
            <pubDate>Tue, 02 Sep 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[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.]]></description>
            <content:encoded><![CDATA[<p>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.</p>
<p>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.</p>
<p>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.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="changelog">Changelog<a href="https://kyber.example.com/blog/kyber-0-20-0#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no">​</a></h3>
<ul>
<li class="">Rust toolchain updated to 1.89.0</li>
<li class="">windows: Add clipboard support for client and host side</li>
<li class="">libkynput: Correctly inject PS4 controller triggers. PS4 triggers must also be injected as buttons</li>
<li class="">Integrate metrics support</li>
<li class="">Update actix, rustls, quinn, wtransport</li>
<li class="">avserver/wasapi: Correctly fill channel count</li>
<li class="">libkynput: Update SDL to 2.32.8</li>
<li class="">(web) Rust toolchain updated to 1.89.0</li>
<li class="">(web) libkynput: Add Clipboard support</li>
<li class="">(web) jsapi: Expose bitrate in ClientState</li>
<li class="">(web) libclient: Notify bitrate at startup</li>
<li class="">(web) Integrate metrics support</li>
<li class="">(web) Upgrade web-sys/js-sys to 0.3.77</li>
<li class="">(web) Upgrade wasm-bindgen-cli to 0.2.100</li>
</ul>]]></content:encoded>
            <category>releases</category>
        </item>
        <item>
            <title><![CDATA[Kyber 0.19.1]]></title>
            <link>https://kyber.example.com/blog/kyber-0-19-1</link>
            <guid>https://kyber.example.com/blog/kyber-0-19-1</guid>
            <pubDate>Tue, 29 Apr 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[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.]]></description>
            <content:encoded><![CDATA[<p>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.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="changelog">Changelog<a href="https://kyber.example.com/blog/kyber-0-19-1#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no">​</a></h3>
<ul>
<li class="">libkynput: Don't fail on first malformed packet</li>
</ul>]]></content:encoded>
            <category>releases</category>
        </item>
        <item>
            <title><![CDATA[Kyber 0.19.0]]></title>
            <link>https://kyber.example.com/blog/kyber-0-19-0</link>
            <guid>https://kyber.example.com/blog/kyber-0-19-0</guid>
            <pubDate>Fri, 14 Feb 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[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.]]></description>
            <content:encoded><![CDATA[<p>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 (<code>--audio-buffer</code> and <code>--video-buffer</code>) on the desktop, and exposed through the JavaScript API on the web, giving users direct control over the latency-versus-smoothness trade-off.</p>
<p>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.</p>
<p>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 <code>kyber_config.toml</code>. 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 <code>Client.disconnect_and_stop()</code> for cleaner teardown from JavaScript. Gamepad plug and unplug notifications are now exposed through the JavaScript API, and audio initialization is skipped gracefully when <code>SharedArrayBuffer</code> is unavailable in the browser context.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="changelog">Changelog<a href="https://kyber.example.com/blog/kyber-0-19-0#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no">​</a></h3>
<ul>
<li class="">avserver/win32: Implement monotonic clock</li>
<li class="">windows_service: Correctly log CreateProcessAsUserW() error</li>
<li class="">kymux: Try to find an available port when starting IPC</li>
<li class="">kyaudioreg: Fix compensation</li>
<li class="">desktop: Add --audio-buffer parameter</li>
<li class="">controller: Remove timeout on avserver kill</li>
<li class="">libclient/rtp: Allow to override the SDP folder with envvar KYBER_CACHEDIR</li>
<li class="">libkynput: Add SDL2 feature to be able to trigger SDL2 support</li>
<li class="">libkynput/capi: Add rumble unpack</li>
<li class="">libkynput/capi: Add vendor/product id in libkynput_gamepad_plug_to_packet()</li>
<li class="">txproto: Rebase to upstream/master</li>
<li class="">desktop: Bitrate can now changed dynamically during runtime</li>
<li class="">avservice: Allow to configure txproto clock source from kyber_config.toml</li>
<li class="">kyaudioreg: Rework underflow log</li>
<li class="">desktop: Add video-buffer option</li>
<li class="">avservice: By default, the video bitrate can't be set under 5 mbps</li>
<li class="">avservice: Allow to configure the minimum allowed video bitrate</li>
<li class="">avservice/nvenc: Set GOP when intrarefresh is disabled</li>
<li class="">controller: Generate, log and send a SessionId on streaming start</li>
<li class="">libclient: Log SessionId sent by controller on streaming start</li>
<li class="">kymux: Filter out duplicates in GopStream</li>
<li class="">(web) jsapi: Add audio_buffer parameter</li>
<li class="">(web) kyproto/kyaudioreg/libclient: Use kywasmtime</li>
<li class="">(web) jsapi: Add live bitrate control</li>
<li class="">(web) libclient: Skip audio initialization if SharedArrayBuffer isn't defined</li>
<li class="">(web) kyaudioreg: Rework underflow log</li>
<li class="">(web) jsapi: Add video_buffer option</li>
<li class="">(web) kymux: Filter out duplicates in GopStream</li>
<li class="">(web) libclient: Log SessionId sent by controller on streaming start</li>
<li class="">(web) jsapi: Expose gamepad plug/unplug notifications</li>
<li class="">(web) inputs: Fix cases where MousePosition where sent instead of MouseMove</li>
<li class="">(web) jsapi: Add Client.disconnect_and_stop() to both disconnect and stop the Client</li>
</ul>]]></content:encoded>
            <category>releases</category>
        </item>
        <item>
            <title><![CDATA[Kyber 0.18.2]]></title>
            <link>https://kyber.example.com/blog/kyber-0-18-2</link>
            <guid>https://kyber.example.com/blog/kyber-0-18-2</guid>
            <pubDate>Tue, 22 Oct 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[Initialisation errors in the server are now written to controller.log, making it easier to diagnose startup failures that would previously have gone unrecorded.]]></description>
            <content:encoded><![CDATA[<p>Initialisation errors in the server are now written to <code>controller.log</code>, making it easier to diagnose startup failures that would previously have gone unrecorded.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="changelog">Changelog<a href="https://kyber.example.com/blog/kyber-0-18-2#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no">​</a></h3>
<ul>
<li class="">controller: Log initialization errors in controller.log</li>
</ul>]]></content:encoded>
            <category>releases</category>
        </item>
        <item>
            <title><![CDATA[Kyber 0.18.1]]></title>
            <link>https://kyber.example.com/blog/kyber-0-18-1</link>
            <guid>https://kyber.example.com/blog/kyber-0-18-1</guid>
            <pubDate>Mon, 21 Oct 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[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.]]></description>
            <content:encoded><![CDATA[<p>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.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="changelog">Changelog<a href="https://kyber.example.com/blog/kyber-0-18-1#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no">​</a></h3>
<ul>
<li class="">avserver: Log when display enumeration has been started</li>
<li class="">avserver: Add pid in logs</li>
<li class="">txproto/dxgi: Add more error logs</li>
<li class="">txproto/wasapi: Reduce some log severity</li>
<li class="">controller: Log actix server errors</li>
<li class="">controller: Log displays at startup</li>
<li class="">libclient: Stop backend on DataPlaneClosed</li>
<li class="">(web) libkynput: Notify JsElementNotFound once in mousemove if canvas has been dropped</li>
<li class="">(web) libkynput: Unregister window events if canvas has been removed</li>
<li class="">(web) libclient: Stop backend on DataPlaneClosed</li>
</ul>]]></content:encoded>
            <category>releases</category>
        </item>
        <item>
            <title><![CDATA[Kyber 0.18.0]]></title>
            <link>https://kyber.example.com/blog/kyber-0-18-0</link>
            <guid>https://kyber.example.com/blog/kyber-0-18-0</guid>
            <pubDate>Wed, 09 Oct 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[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.]]></description>
            <content:encoded><![CDATA[<p>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 <code>--audio-protocol</code> 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.</p>
<p>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.</p>
<p>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.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="changelog">Changelog<a href="https://kyber.example.com/blog/kyber-0-18-0#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no">​</a></h3>
<ul>
<li class="">desktop: Refactor protocol selection and add audio protocol parameter</li>
<li class="">desktop: Correctly hide cursor at startup if required</li>
<li class="">avserver/win32: Workaround negative PTS generation while NTP goes backward in time</li>
<li class="">controller/ws: Handle close control frame</li>
<li class="">libclient: Update VLC. Kymux branch is now based on 6880921445</li>
<li class="">libclient: Allow to rely on builtin OS TLS certificates</li>
<li class="">desktop/kymux-audio: Add unreliable parameter</li>
<li class="">controller: Correctly load the complete certificate chain</li>
<li class="">controller/ws: Make server certificate generation optional</li>
<li class="">desktop: Add audio volume keyboard shortcuts</li>
<li class="">Update Quic stack (quinn 0.11.5, wtransport 0.4.0, rustls 0.23.13)</li>
<li class="">(web) jsapi: Refactor protocol selection and add audio protocol parameter</li>
<li class="">(web) inputs: Fix display selection. The screen resolution wasn't correctly selected</li>
<li class="">(web) Also log video coded size when receiving libclient::Event::CanvasResized</li>
<li class="">(web) libclient: Avoid to display "Failed to receive audio/video from Kymux" when disconnection has been requested</li>
<li class="">(web) libclient: Handle cases where controller gives no Webtransport hash certificate</li>
<li class="">(web) jsapi: Add audio volume/mute API</li>
</ul>]]></content:encoded>
            <category>releases</category>
        </item>
        <item>
            <title><![CDATA[Kyber 0.17.1]]></title>
            <link>https://kyber.example.com/blog/kyber-0-17-1</link>
            <guid>https://kyber.example.com/blog/kyber-0-17-1</guid>
            <pubDate>Thu, 11 Jul 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[This patch adds a --gamepadforcexbox360 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 gamepadforcexbox360 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.]]></description>
            <content:encoded><![CDATA[<p>This patch adds a <code>--gamepad_force_xbox360</code> 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 <code>gamepad_force_xbox360</code> 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.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="changelog">Changelog<a href="https://kyber.example.com/blog/kyber-0-17-1#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no">​</a></h3>
<ul>
<li class="">desktop: Add --gamepad_force_xbox360</li>
<li class="">libclient: Log intra_refresh setting received in StreamingSessionConfig</li>
<li class="">(web 0.5.2) jsapi/start_streaming: Correctly return an error when displaylist is unknown</li>
<li class="">(web 0.5.1) Correctly handle display resolution change (0.5.0 regression)</li>
<li class="">(web 0.5.1) libclient: Log intra_refresh setting received in StreamingSessionConfig</li>
<li class="">(web 0.5.1) jsapi: Add gamepad_force_xbox360 parameter</li>
</ul>]]></content:encoded>
            <category>releases</category>
        </item>
        <item>
            <title><![CDATA[Kyber 0.17.0]]></title>
            <link>https://kyber.example.com/blog/kyber-0-17-0</link>
            <guid>https://kyber.example.com/blog/kyber-0-17-0</guid>
            <pubDate>Fri, 28 Jun 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[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 --displaycount, making Kyber much more practical for multi-monitor setups. Encoder intra-refresh can be configured directly from the command line with --intrarefresh, 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.]]></description>
            <content:encoded><![CDATA[<p>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 <code>--display_count</code>, making Kyber much more practical for multi-monitor setups. Encoder intra-refresh can be configured directly from the command line with <code>--intra_refresh</code>, and the capture and encoding server can now accept encoder configuration overrides from <code>kyber_config.toml</code> for fine-grained tuning without rebuilding. The data plane port is also overridable, giving more flexibility in network environments that require specific port assignments.</p>
<p>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.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="changelog">Changelog<a href="https://kyber.example.com/blog/kyber-0-17-0#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no">​</a></h3>
<ul>
<li class="">libclient: Integrate kyaudioreg</li>
<li class="">avserver: Allow to overload encoder configuration from kyber_config.toml</li>
<li class="">kymux: Fix duplicate datagram handling with unreliable</li>
<li class="">kymux: Fix sequencer for unreliable protocols</li>
<li class="">desktop/win32: Hide console</li>
<li class="">desktop: Add multiscreen support. Can be enabled with option --display_count</li>
<li class="">desktop: Allow to configure Intra refresh with option --intra_refresh</li>
<li class="">inputserver/win32: Plug PlayStation controllers as PS4 controllers</li>
<li class="">controller: Allow to override dataplane port</li>
<li class="">(web) libclient: Integrate kyaudioreg</li>
<li class="">(web) Add <code>intra_refresh</code> parameter. This allows to override encoder configuration</li>
<li class="">(web) libkynput: Send gamepad's Product Id and Vendor Id</li>
<li class="">(web) libkynput: Avoid to spam when rumble isn't supported</li>
</ul>]]></content:encoded>
            <category>releases</category>
        </item>
        <item>
            <title><![CDATA[Kyber 0.16.1]]></title>
            <link>https://kyber.example.com/blog/kyber-0-16-1</link>
            <guid>https://kyber.example.com/blog/kyber-0-16-1</guid>
            <pubDate>Tue, 21 May 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[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.]]></description>
            <content:encoded><![CDATA[<p>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.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="changelog">Changelog<a href="https://kyber.example.com/blog/kyber-0-16-1#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no">​</a></h3>
<ul>
<li class="">kymux: Fix unreliable header size</li>
<li class="">desktop: Expose kymux_unreliable protocol</li>
<li class="">macos: Fix window size sometimes being invalid when resizing on macOS 14 Sonoma</li>
<li class="">avserver/win32: Make process DPI aware</li>
<li class="">inputserver/win32: Make process DPI aware</li>
<li class="">desktop: Move the host cursor position to match the local one at startup</li>
<li class="">libclient: Improve start and stop logs</li>
<li class="">(web 0.4.2) libclient: Make AudioRegulator lock free</li>
<li class="">(web 0.4.1) kymux: Fix unreliable header size</li>
<li class="">(web 0.4.1) Expose kymux_unreliable protocol</li>
<li class="">(web 0.4.1) libclient: Improve start and stop logs</li>
</ul>]]></content:encoded>
            <category>releases</category>
        </item>
        <item>
            <title><![CDATA[Kyber 0.16.0]]></title>
            <link>https://kyber.example.com/blog/kyber-0-16-0</link>
            <guid>https://kyber.example.com/blog/kyber-0-16-0</guid>
            <pubDate>Thu, 18 Apr 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[Kyber 0.16.0 delivers encoder and audio improvements alongside a number of dependency updates. The capture and encoding server now supports YUV 44 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.]]></description>
            <content:encoded><![CDATA[<p>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.</p>
<p>The most user-visible change in this release is that <strong>audio is now enabled by default</strong> — 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.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="changelog">Changelog<a href="https://kyber.example.com/blog/kyber-0-16-0#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no">​</a></h3>
<ul>
<li class="">avserver: Support yuv444p for hevc when using qsv</li>
<li class="">avserver/win32: Update nv-codec-headers to n12.1.14.0</li>
<li class="">avserver/win32: Update vpl to v2.10.1</li>
<li class="">avserver/win32: Update amf to 1.4.33</li>
<li class="">avserver: Update ffmpeg to 6.1.1</li>
<li class="">libclient: Update VLC. Kymux branch is now based on dfd6d83e50</li>
<li class="">vlc: Use AudioRegulator on Windows/Linux/macOS</li>
<li class="">desktop: Audio is now enabled by default</li>
<li class="">Update Rust dependencies</li>
<li class="">kymux: Revert timeout detection</li>
<li class="">libclient: Stop websocket on ControlPlaneClosed</li>
<li class="">libclient: Log PlayerConfig on start_streaming()</li>
<li class="">avserver: Improve initialization logs in dxgi and packet_sink</li>
<li class="">avserver/amf: Add missing D3D11 flags to support AMD Ryzen 7 PRO 5875U</li>
<li class="">(web) libclient: Use AudioRegulator</li>
<li class="">(web) Update Rust dependencies</li>
<li class="">(web) kymux: Revert timeout detection</li>
<li class="">(web) libkynput/wasm: Log gamepad id</li>
<li class="">(web) libclient: Send a notification to the main worker when VideoDecoder is configured</li>
<li class="">(web) libclient: Support yuv444p for hevc. Requires Chrome 126</li>
</ul>]]></content:encoded>
            <category>releases</category>
        </item>
        <item>
            <title><![CDATA[Kyber 0.15.0]]></title>
            <link>https://kyber.example.com/blog/kyber-0-15-0</link>
            <guid>https://kyber.example.com/blog/kyber-0-15-0</guid>
            <pubDate>Tue, 19 Mar 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[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 44 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.]]></description>
            <content:encoded><![CDATA[<p>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.</p>
<p>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 <code>/stop_streaming</code> endpoint lets you stop a streaming session without tearing down the entire server process.</p>
<p>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 <code>gamepadconnected</code> 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.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="changelog">Changelog<a href="https://kyber.example.com/blog/kyber-0-15-0#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no">​</a></h3>
<ul>
<li class="">Rust toolchain updated to 1.76.0</li>
<li class="">controller: Update wtransport to 0.11.0</li>
<li class="">controller/cors: Allow Access-Control-Allow-Credentials</li>
<li class="">controller: Add /stop_streaming endpoint</li>
<li class="">controller: Fix racy kymux stop. Should fix the remaining 403 errors when starting kymux</li>
<li class="">avserver: Integrate libtxproto</li>
<li class="">avserver: Encoder selection now applies also to RTP backend</li>
<li class="">avserver: Detect Initialization/Acquisition/Encoding errors and forward them to the application</li>
<li class="">controller: Forward avserver crash to the application</li>
<li class="">kymux/kycom: Fix TcpStream read error</li>
<li class="">controller/libclient: Implement connection timeout detection (1 minute) on Data Plane. The event is only logged for now</li>
<li class="">libclient: Stop if Data Plane connection fails, or if streaming start fails</li>
<li class="">libclient/macos: Use ffmpeg 5.1.1 (like Windows) instead of master</li>
<li class="">avserver: Support yuv444p for hevc when using nvenc</li>
<li class="">libkynput: Handle Side/Extra MouseButtonType</li>
<li class="">txproto: Avoid to drop encoded frames when network is slow. Drop acquired frames instead</li>
<li class="">kymux: Correctly handle write during congestion, when using wtransport backend</li>
<li class="">(web) Client can now be stopped and restarted</li>
<li class="">(web) Streaming can now be stopped and restarted</li>
<li class="">(web) libclient/http: Set credentials=include when calling fetch()</li>
<li class="">(web) avserver: Detect Initialization/Acquisition/Encoding errors and forward them to the application</li>
<li class="">(web) controller: Detect avserver crashes and forward them to the application</li>
<li class="">(web) Implement connection timeout detection (1 minute) on Data Plane. The event is only logged for now</li>
<li class="">(web) libclient: Stop if Data Plane connection fails, or if streaming start fails</li>
<li class="">(web) libkynput: Plug gamepad when detected without gamepadconnected</li>
<li class="">(web) libclient: Increase Demuxer -&gt; Decoder video queue size to fix decoder crash on Macs</li>
<li class="">(web) libkynput: Handle Side/Extra MouseButtonType</li>
<li class="">(web) libkynput: Avoid to spam when DataPlane is disconnected</li>
</ul>]]></content:encoded>
            <category>releases</category>
        </item>
        <item>
            <title><![CDATA[Kyber 0.14.0]]></title>
            <link>https://kyber.example.com/blog/kyber-0-14-0</link>
            <guid>https://kyber.example.com/blog/kyber-0-14-0</guid>
            <pubDate>Wed, 07 Feb 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[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.]]></description>
            <content:encoded><![CDATA[<p>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.</p>
<p>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.</p>
<p>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.</p>
<blockquote>
<p>⚠️ The web client JavaScript API and the server protocol both contain breaking changes in this release. Existing web integrations will need to be updated.</p>
</blockquote>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="changelog">Changelog<a href="https://kyber.example.com/blog/kyber-0-14-0#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no">​</a></h3>
<ul>
<li class="">controller/libclient: Implement connection timeout detection (1 minute) on Control Plane</li>
<li class="">Add client lifecycle notifications (connection failed, disconnected + reason)</li>
<li class="">Connection steps are now splitted (1. Connect to the Control plane, 2. Start streaming session)</li>
<li class="">avserver/win32: Correctly patch NVENC H264 SPS to fix H264 latency issue on Windows Chromium when using hardware decoding</li>
<li class="">(web) ⚠️ This version introduces breaking changes ⚠️</li>
<li class="">(web) The JS has breaking changes</li>
<li class="">(web) The protocol with the controller has breaking changes</li>
<li class="">(web) Implement connection timeout detection (1 minute) on Control Plane</li>
<li class="">(web) cursor: Apply Host cursor shape only when the cursor is inside the canvas</li>
<li class="">(web) Add supported_video_codecs()</li>
<li class="">(web) Add a generic notification API. "canvas_resized" is now passed through this API</li>
<li class="">(web) Add client lifecycle notifications (connection failed, disconnected + reason)</li>
<li class="">(web) Improve callstack decoding in browser console</li>
<li class="">(web) Client is now automatically stopped if a video decoding error is detected</li>
<li class="">(web) Handle audio decoding errors correctly</li>
<li class="">(web) gamepad: Avoid to panic when receiving unknown button/axis</li>
<li class="">(web) Connection steps are now splitted (1. Connect to the Control plane, 2. Start streaming session)</li>
<li class="">(web) Fix a case where cursor was hidden and not send after connection</li>
<li class="">(web) Log client revision at startup</li>
<li class="">(web) Fix a crash when VideoFrame queue is full at startup</li>
</ul>]]></content:encoded>
            <category>releases</category>
        </item>
    </channel>
</rss>