tag:github.com,2008:https://github.com/Devolutions/devolutions-gateway/releasesRelease notes from devolutions-gateway2026-02-23T15:41:58Ztag:github.com,2008:Repository/162330996/v2026.1.02026-02-23T16:38:22Zv2026.1.0<h3>Features</h3>
<ul>
<li>
<p><em>agent-installer</em>: deploy desktop agent in main feature (<a href="https://github.com/Devolutions/devolutions-gateway/commit/5422ae5eed086e9ad8a451df7a7b23e81c692ac4">5422ae5eed</a>)</p>
</li>
<li>
<p><em>agent</em>: UX improvement for desktop agent app (<a href="https://github.com/Devolutions/devolutions-gateway/commit/ec76aa4f48e6a6978bae63313bebead36b08fd38">ec76aa4f48</a>)</p>
</li>
<li>
<p><em>agent-installer</em>: auto launch desktop app on install (<a href="https://github.com/Devolutions/devolutions-gateway/commit/aad097b8e446dee5a247d6a366ee40d5a20635a3">aad097b8e4</a>)</p>
</li>
<li>
<p><em>dgw</em>: add CredSSP certificate configuration keys (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1676" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1676/hovercard">#1676</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/443e5f0b02661c50b0e61cd69e929c5080da967b">443e5f0b02</a>)</p>
<p>Add optional <code>CredSspCertificateFile</code>, <code>CredSspPrivateKeyFile</code> and <code>CredSspPrivateKeyPassword</code><br>
configuration keys allowing usage of a different certificate for CredSSP<br>
credential injection instead of the main TLS certificate. When unset,<br>
the existing TLS certificate is used (no behavior change).</p>
</li>
<li>
<p><em>dgw</em>: generate self-signed certificate when no TLS cert is configured for CredSSP (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1682" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1682/hovercard">#1682</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/e4a1b121f8c0da47ed1d9f84a4aaf273c8a882b0">e4a1b121f8</a>)</p>
<p>When neither a CredSSP-specific certificate nor a main TLS certificate<br>
is configured, automatically generate a self-signed certificate for<br>
CredSSP credential injection.</p>
</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>
<p><em>agent-installer</em>: specify ARM64 platform for ARM64 agent installer (<a href="https://github.com/Devolutions/devolutions-gateway/commit/43266e8dba3794e5bbd26d1b981a0cc418699885">43266e8dba</a>)</p>
</li>
<li>
<p><em>agent-installer</em>: cleanup of agent installer (<a href="https://github.com/Devolutions/devolutions-gateway/commit/a5ebf58c7aea4551940e48db561ca027f4b57fee">a5ebf58c7a</a>)</p>
</li>
</ul>
<h3>Performance</h3>
<ul>
<li><em>dgw</em>: improve real-time performance of session shadowing (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1662" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1662/hovercard">#1662</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/ea2e6a8334404c03f823cfd9e380cbe58ee8bdc7">ea2e6a8334</a>) (<a href="https://devolutions.atlassian.net/browse/DGW-341" rel="nofollow">DGW-341</a>)</li>
</ul>github-actions[bot]tag:github.com,2008:Repository/162330996/v2025.3.42026-02-04T14:35:22Zv2025.3.4<h3>Security</h3>
<ul>
<li>
<p><em>dgw</em>: redact passwords in preflight API debug logs (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1613" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1613/hovercard">#1613</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/cc09f344c175ec2dca37c1045d51ca454ca911f4">cc09f344c1</a>) (<a href="https://devolutions.atlassian.net/browse/DGW-324" rel="nofollow">DGW-324</a>)</p>
<p>Passwords in provision-credentials preflight requests are now redacted<br>
when logged at DEBUG level, preventing credential leakage in logs. The<br>
redaction applies to all password fields recursively, replacing them<br>
with "<em><strong>REDACTED</strong></em>" while preserving other request details for<br>
debugging.</p>
</li>
</ul>
<h3>Features</h3>
<ul>
<li>
<p><em>agent</em>: add debug updater overrides (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1610" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1610/hovercard">#1610</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/8703bc430ec3f2108d482ffb3b7271a9e3ef604a">8703bc430e</a>)</p>
<p>Adds debug configuration switches for the updater so developers can test<br>
local productinfo and packages:</p>
<ul>
<li>Supports overriding productinfo URL (including file://) and validates<br>
CDN URLs by default.</li>
<li>Allows opt-in unsafe URLs for local testing and optional skipping of<br>
hash/MSI signature validation.</li>
<li>Productinfo loader and package downloader now handle file:// sources</li>
</ul>
</li>
<li>
<p><em>installer</em>: allow untrusted certificates for key downloads (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1635" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1635/hovercard">#1635</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/0a04f823c608f7c099489ed8896c15fb04d38074">0a04f823c6</a>)</p>
<p>Using the installer, the user has the option to download the provisioner<br>
public key direct from a DVLS instance. However, if the DVLS certificate<br>
was not trusted this would fail with a nondescript error message<br>
("failed to send request").</p>
<p>Now, the user will be prompted to accept an untrusted certificate.<br>
Certificate exceptions are serialized in a semi-colon delimited text<br>
string in the form:</p>
</li>
<li>
<p><em>webapp</em>: update SSH package with deprecated algorithm and keyboard interactive auth support (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1642" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1642/hovercard">#1642</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/9f0666cd7ccf57582a197c84c5545071976d2b18">9f0666cd7c</a>) (<a href="https://devolutions.atlassian.net/browse/DGW-327" rel="nofollow">DGW-327</a>)</p>
<p>Update @devolutions/web-ssh-gui from 0.4.0 to 0.6.2 with the following<br>
improvements:</p>
<ul>
<li>Add Keyboard_Interactive authentication mode for SSH connections</li>
<li>Support for deprecated SSH algorithms (for legacy server<br>
compatibility)</li>
<li>Fix deadlock between terminal visibility and host key verification</li>
<li>Library now emits connected status when WebSocket connects, allowing<br>
users to see and respond to host key verification prompts</li>
</ul>
</li>
<li>
<p><em>dgw</em>: add support for credential injection for RDCleanPath (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1614" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1614/hovercard">#1614</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/a88196132846c0cd0c0a2ee403576c9d3327f2f9">a881961328</a>)</p>
<p>This allows web clients to benefit from the proxy-based credential injection features.</p>
</li>
<li>
<p><em>agent</em>: RDM messages and pipe passthrough logic (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1538" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1538/hovercard">#1538</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/198fce96ba58be49680a055617a573c45932df2b">198fce96ba</a>) (<a href="https://devolutions.atlassian.net/browse/PI-651" rel="nofollow">PI-651</a>)</p>
<p>Adds RDM (Remote Desktop Manager) message handling capabilities to<br>
devolutions-session, enabling bidirectional communication between the<br>
agent and RDM through the NOW protocol over the named pipe.</p>
</li>
<li>
<p><em>webapp</em>: upgrade to Angular 20 and PrimeNG 20 (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1652" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1652/hovercard">#1652</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/607ef3812720edc29724479e9db6ef4773887d5c">607ef38127</a>)</p>
<p>Upgrades the standalone webapp to Angular 20 and PrimeNG 20. This keeps the<br>
frontend on current, supported framework versions and enables continued UI<br>
improvements with the latest PrimeNG components.</p>
</li>
<li>
<p><em>dgw,agent</em>: add HTTP/SOCKS proxy configuration support (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1639" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1639/hovercard">#1639</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/57ade80d146e96eebd73eeec1b72fb7cbc4928b3">57ade80d14</a>) (<a href="https://devolutions.atlassian.net/browse/DGW-328" rel="nofollow">DGW-328</a>)</p>
<p>Adds configurable HTTP/HTTPS/SOCKS4/SOCKS5 proxy support for outbound<br>
requests in both Gateway and Agent. Proxy settings can be configured<br>
manually or auto-detected from environment variables (HTTP_PROXY,<br>
HTTPS_PROXY, NO_PROXY) or system settings (per-user and machine-wide<br>
settings with WinHTTP fallback on Windows, <code>/etc/sysconfig/proxy</code> on<br>
RHEL/SUSE systems, SCDynamicStoreCopyProxies() on macOS).</p>
<p>This replaces reqwest's system-proxy feature with the proxy_cfg crate<br>
for better system integration and per-URL proxy selection, improving<br>
support for PAC files and complex enterprise proxy environments.</p>
</li>
<li>
<p><em>agent</em>: add window recording support via now proto dvc (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1583" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1583/hovercard">#1583</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/4e183f01210f3ba4b2b9f871e4e6351b355aaafb">4e183f0121</a>) (<a href="https://devolutions.atlassian.net/browse/ARC-353" rel="nofollow">ARC-353</a>)</p>
<p>Adds window recording support to the Devolutions Agent. The<br>
implementation uses Windows event hooks to receive foreground window<br>
change notifications and optional polling to detect title changes within<br>
the same window.</p>
</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>
<p><em>agent</em>: improve error reporting when checking for updates (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1602" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1602/hovercard">#1602</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/f11b4567bfd3b88c3460fbbd5aeffc889608652b">f11b4567bf</a>)</p>
</li>
<li>
<p><em>dgw</em>: improve system store certificate resolver error logging (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1619" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1619/hovercard">#1619</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/819de83454673b09c98af7ac826999397dd9a077">819de83454</a>) (<a href="https://devolutions.atlassian.net/browse/DGW-320" rel="nofollow">DGW-320</a>)</p>
<p>The system store certificate resolver now accumulates and displays<br>
detailed key acquisition errors at the default log level when no<br>
suitable certificate is found. Previously, these errors (such as "keyset<br>
does not exist" / error code 0x80090016) were only visible at DEBUG<br>
level, making it difficult to diagnose issues like missing private key<br>
permissions for the NETWORK SERVICE user.</p>
<p>The error message now includes specific failure details for each<br>
certificate attempt, including both key acquisition and signing key<br>
creation failures.</p>
</li>
<li>
<p><em>installer</em>: allow certificate passwords to contain single quotes (<a href="https://github.com/Devolutions/devolutions-gateway/commit/9a9f31ad71d1f0c9d6e879dc159b969e33aa1978">9a9f31ad71</a>)</p>
</li>
<li>
<p><em>dgw</em>: downgrade benign client disconnects from ERROR to DEBUG (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1620" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1620/hovercard">#1620</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/592da4dbbcbfd413e4b7ca4f82a04dc6001aeee5">592da4dbbc</a>) (<a href="https://devolutions.atlassian.net/browse/DGW-319" rel="nofollow">DGW-319</a>)</p>
<p>Reduces log noise by treating common socket disconnections (BrokenPipe,<br>
ConnectionReset, UnexpectedEof) as benign events during HTTP/HTTPS<br>
serving and TLS handshake. These disconnects typically occur from health<br>
checks, port scanners, aborted browser requests, or early connection<br>
termination, and do not indicate server faults.</p>
<p>ERROR logs now only appear for genuine server issues, making it easier<br>
to identify actionable problems in production deployments.</p>
</li>
<li>
<p><em>dgw</em>: self-signed TLS certificate generation of the Docker image build (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1650" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1650/hovercard">#1650</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/53b1c1801a5f33fd81b16a6e2f4a44c4c55b9d44">53b1c1801a</a>)</p>
<p>Fixes this error:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="Get-Content: Cannot find path '/tmp/gateway-{hostname}.pem' because it does not exist.
Exception: Empty certificate chain!"><pre class="notranslate"><code>Get-Content: Cannot find path '/tmp/gateway-{hostname}.pem' because it does not exist.
Exception: Empty certificate chain!
</code></pre></div>
<p>Hit when generating the self-signed TLS certificate generation in the Docker entrypoint.</p>
</li>
<li>
<p><em>dgw</em>: honor TCP_PORT in Linux container entrypoint (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1667" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1667/hovercard">#1667</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/4fa5ae984a1e6402912bdecf4ac7556719bc77e3">4fa5ae984a</a>)</p>
<p>Fixes an issue where the TCP_PORT environment variable was ignored by<br>
the Linux Docker entrypoint.<br>
Even when TCP_PORT was set, the gateway continued to use the default TCP<br>
port.<br>
This change ensures the gateway now correctly applies the configured<br>
TCP_PORT value at startup.</p>
</li>
<li>
<p><em>agent</em>: add RDM multi-instance support for Jump messages (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1669" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1669/hovercard">#1669</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/3c97b11ac6b60f746a49bba20f274b993409961f">3c97b11ac6</a>) (<a href="https://devolutions.atlassian.net/browse/RDMW-21183" rel="nofollow">RDMW-21183</a>)</p>
<p>Add RDM multi-instance support for Jump messages (separate named pipe<br>
for each RDM instance in session)</p>
</li>
</ul>
<h3>Build</h3>
<ul>
<li>
<p><em>dgw</em>: add ARM64 Docker image support (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1607" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1607/hovercard">#1607</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/b2f5172d0b110ac980a681a7bb99d342f929059a">b2f5172d0b</a>) (<a href="https://devolutions.atlassian.net/browse/DGW-325" rel="nofollow">DGW-325</a>)</p>
<p>Adds native ARM64 Docker images for Devolutions Gateway, enabling<br>
deployment on ARM-based devices like Raspberry Pi and AWS Graviton<br>
instances with full native performance. Multi-arch manifests<br>
automatically select the correct image for the user's platform.</p>
</li>
</ul>github-actions[bot]tag:github.com,2008:Repository/162330996/v2025.3.32025-12-02T15:03:30Zv2025.3.3<h3>Features</h3>
<ul>
<li>
<p><em>webapp</em>: update VNC and RDP clients (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1533" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1533/hovercard">#1533</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/a09dcf41eab5377dfc3f32723df6dfc5cb76ec70">a09dcf41ea</a>)</p>
<ul>
<li>VNC: Prevent a custom pixel format from being set if <em>Tight JPEG</em> or <em>Tight<br>
PNG</em> is enabled.</li>
<li>VNC: Fixed an issue where <em>Zlib</em> encoding was always advertised to the<br>
server, regardless of the chosen <em>ARD</em> quality.</li>
<li>RDP: Fixed an issue where the clipboard data was not sent to the server<br>
right after the connection.</li>
<li>RDP: Fixed the <code>lastSentClipboardData</code> being null in the<br>
<code>onForceClipboardCallback</code>.</li>
<li>RDP: Added human-readable descriptions for <code>RDCleanPath</code> errors.</li>
<li>VNC: Update cryptographic libraries for <em>VNC</em>.</li>
</ul>
</li>
<li>
<p><em>installer</em>: download public key from DVLS (<a href="https://github.com/Devolutions/devolutions-gateway/commit/44aab79ad17d5622747c19368a6aa356d0e4d1f4">44aab79ad1</a>)</p>
</li>
<li>
<p><em>installer</em>: allow CLI generation on release builds (<a href="https://github.com/Devolutions/devolutions-gateway/commit/f9665c27591412150a63f11aa6244fde30b88b2a">f9665c2759</a>)</p>
</li>
<li>
<p><em>jetsocat</em>: add concurrent reads support for MCP proxy (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1560" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1560/hovercard">#1560</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/acf770f5bcfcdbc740c9e4bb724c4351eae3f84b">acf770f5bc</a>) (<a href="https://devolutions.atlassian.net/browse/DGW-314" rel="nofollow">DGW-314</a>)</p>
<p>Refactor MCP proxy to support server-initiated messages (notifications,<br>
progress updates, and server -> client requests) by enabling concurrent<br>
reads from both client and server.</p>
</li>
<li>
<p><em>dgw</em>: TLS thumbprint anchoring (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1570" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1570/hovercard">#1570</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/b3369646bf1b0ca93e11994fe4fab42785dc626f">b3369646bf</a>) (<a href="https://devolutions.atlassian.net/browse/DGW-318" rel="nofollow">DGW-318</a>)</p>
<p>Allow "unsecure" TLS if the client provides a thumbprint and the peer<br>
certificate matches it.</p>
</li>
<li>
<p><em>agent</em>: implement DVC remote exec detached mode (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1567" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1567/hovercard">#1567</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/1417db9df617a32c13cb8e37a77b4ae7c6692246">1417db9df6</a>) ([<a href="https://devolutions.atlassian.net/browse/ARC-411" rel="nofollow">ARC-411</a>](<a href="https://devolutions.atlassian.net/browse/%5BARC-411%5D(https://devolutions.atlassian.net/browse/ARC-411)" rel="nofollow">https://devolutions.atlassian.net/browse/[ARC-411](https://devolutions.atlassian.net/browse/ARC-411)</a>))</p>
<p>Adds fire-and-forget remote execution via the now proto DVC.</p>
<p>Previously, all execution types (except Run) waited for the process exit<br>
code and tracked the execution session, but this behavior is not always<br>
what the user expects. This PR changes that and adds an option to<br>
specify if fire and forget mode is needed (return result right after<br>
process is spawned.</p>
</li>
<li>
<p><em>agent,dgw</em>: add Hub Service auto-updater support (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1557" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1557/hovercard">#1557</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/330cefef73649efa04aa2d25e479488df9e3b8e9">330cefef73</a>)</p>
</li>
<li>
<p><em>dgw</em>: add multi-provider AI Gateway (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1588" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1588/hovercard">#1588</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/b11f050d36ef2b7d096cb18b96cb0a09e11f9aa0">b11f050d36</a>)</p>
<p>Adds an experimental AI Gateway feature that provides a unified proxy<br>
for multiple AI provider APIs through Devolutions Gateway. This enables<br>
centralized API key management, consistent authentication, and<br>
simplified access to various AI services from a single endpoint.</p>
<p>Supports seven providers with OpenAI-compatible and<br>
provider-specific endpoints, featuring transparent proxying, SSE<br>
streaming support, and flexible configuration through both JSON config<br>
and environment variables.</p>
<p>Supported providers:</p>
<ul>
<li>Mistral AI (cloud API)</li>
<li>OpenAI (cloud API)</li>
<li>Anthropic Claude (cloud API with custom message format)</li>
<li>OpenRouter (unified multi-provider API)</li>
<li>Azure OpenAI (deployment-based Azure service)</li>
<li>Ollama (local, OpenAI-compatible, optional auth)</li>
<li>LM Studio (local, OpenAI-compatible, optional auth)</li>
</ul>
<p>Requires enable_unstable: true in debug configuration.</p>
</li>
<li>
<p><em>agent</em>: migrate from productinfo.htm to productinfo.json format (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1591" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1591/hovercard">#1591</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/aaf515686ffc7ff0e8071366ae3458996d29e095">aaf515686f</a>)</p>
<p>Replaces the legacy flat key-value productinfo.htm format with a<br>
structured JSON format that provides better organization and<br>
extensibility. The new format supports multiple release channels<br>
(Current, Beta, Update, Stable) and includes explicit architecture and<br>
file type metadata.</p>
</li>
</ul>
<h3>Improvements</h3>
<ul>
<li>
<p><em>jetsocat</em>: detect broken pipe and stop MCP proxy gracefully (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1544" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1544/hovercard">#1544</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/d3222061e1b6ec503fb4571ab85b99ca3db600a0">d3222061e1</a>)</p>
<p>When the MCP server connection breaks (process died, pipe closed), the<br>
proxy now detects this and stops forwarding requests instead of<br>
continuing to fail on each subsequent request.</p>
</li>
<li>
<p><em>dgw</em>: display the full trace for forward errors (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1550" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1550/hovercard">#1550</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/e74e57f809ec472a3e0d402825f5f9c950ddd078">e74e57f809</a>)</p>
</li>
<li>
<p><em>installer</em>: improve debouncer robustness, legibility of port check result (<a href="https://github.com/Devolutions/devolutions-gateway/commit/a3f642407c46b9da2b6380521e52690b24c6cd33">a3f642407c</a>)</p>
</li>
<li>
<p><em>installer</em>: update localization (<a href="https://github.com/Devolutions/devolutions-gateway/commit/eff50da336629903a3b9d38373ddf81d6b1a06c3">eff50da336</a>)</p>
</li>
<li>
<p><em>dgw</em>: [<strong>breaking</strong>] switch traffic audit IDs from INTEGER to ULID (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1597" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1597/hovercard">#1597</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/b443f93f4494896d18b7f79d09fa0120520b6845">b443f93f44</a>) (<a href="https://devolutions.atlassian.net/browse/DGW-321" rel="nofollow">DGW-321</a>)</p>
<p>Replace INTEGER PRIMARY KEY with 16-byte BLOB (ULID) for traffic audit<br>
event IDs to avoid overflow issues with persisted, ever-increasing IDs.</p>
<ul>
<li>Auto-detect old INTEGER schema via PRAGMA table_info and reset<br>
database</li>
<li>Store ULIDs as 16-byte BLOBs (lexicographically sortable)</li>
</ul>
</li>
<li>
<p><em>agent</em>: improve productinfo.json parsing with lenient error handling (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1595" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1595/hovercard">#1595</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/75a5879b95bf244ecea882c728c30fa5ed760a74">75a5879b95</a>)</p>
</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>
<p><em>webapp</em>: fix TS errors on invalid config (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1532" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1532/hovercard">#1532</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/fde1c0de12fcbe723d84fbcf74de7676ec2bd501">fde1c0de12</a>)</p>
</li>
<li>
<p><em>installer</em>: fix UI at high scaling factors (<a href="https://github.com/Devolutions/devolutions-gateway/commit/abbdd6ad65d00725ffe9b98b1b4248acf36b8b1e">abbdd6ad65</a>)</p>
</li>
<li>
<p><em>installer</em>: fix broken hyperlinks (<a href="https://github.com/Devolutions/devolutions-gateway/commit/dfa4608d916567cde4dcd3b8f6896f3ba27d43be">dfa4608d91</a>)</p>
</li>
<li>
<p><em>installer</em>: fix a (handled) NRE that was nonetheless annoying in debug (<a href="https://github.com/Devolutions/devolutions-gateway/commit/25ed8b2c00b9d28c29a837f572c18d982fee01b1">25ed8b2c00</a>)</p>
</li>
<li>
<p><em>installer</em>: avoid crashes on server core (<a href="https://github.com/Devolutions/devolutions-gateway/commit/e432ad092eb56aaac28616ddaaa76ecc3b9e6be1">e432ad092e</a>)</p>
</li>
<li>
<p><em>installer</em>: add missing file to csproj (<a href="https://github.com/Devolutions/devolutions-gateway/commit/51fd11088dd2afa689be30dac85154d6f8bba664">51fd11088d</a>)</p>
</li>
<li>
<p><em>installer</em>: UI glitch caused by tab stops (<a href="https://github.com/Devolutions/devolutions-gateway/commit/52979494ffb095d9063d2d09804a4c66cf6cf490">52979494ff</a>)</p>
</li>
<li>
<p><em>installer</em>: public key action pick up downloaded file (<a href="https://github.com/Devolutions/devolutions-gateway/commit/378ffbe91509fd10c2015df801d99c5bac4ff4b4">378ffbe915</a>)</p>
</li>
<li>
<p><em>dgw</em>: fix a bug preventing mstsc to work with the RDP proxy (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1576" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1576/hovercard">#1576</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/7a0c1f5437b03746383b0e5a7d97a7a85f94ed11">7a0c1f5437</a>)</p>
</li>
<li>
<p><em>dgw,agent</em>: improve systemd integration (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1549" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1549/hovercard">#1549</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/0d5239ba1f5f3da3dfa085b89beaea2b12e453bf">0d5239ba1f</a>) (<a href="https://devolutions.atlassian.net/browse/DGW-317" rel="nofollow">DGW-317</a>)</p>
<p>Update ceviche to 0.7.0 which improves systemd integration.</p>
<p>Here is the new strategy:</p>
<ul>
<li>
<p><strong>pkg-config detection</strong>: We query <code>pkg-config --variable=systemdsystemunitdir systemd</code><br>
to get the distribution's preferred location. This works on most modern<br>
systems that have systemd development packages installed.</p>
</li>
<li>
<p><strong>Fallback probing</strong>: If pkg-config is unavailable or doesn't return a<br>
result, we probe common directories in order:</p>
<ul>
<li><code>/usr/lib/systemd/system</code></li>
<li><code>/lib/systemd/system</code></li>
</ul>
</li>
</ul>
<p>This fixes installation issues on RHEL-based distributions where systemd<br>
units are located in /usr/lib/systemd/system instead of /lib/systemd/system.</p>
</li>
</ul>github-actions[bot]tag:github.com,2008:Repository/162330996/v2025.3.22025-10-03T17:08:50Zv2025.3.2<h3>Features</h3>
<ul>
<li><em>dgw</em>: support jet_reuse claim in JREC tokens (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1524" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1524/hovercard">#1524</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/8fbb6ef456d75a50c8614b3bda8612a275c59fb5">8fbb6ef456</a>) (<a href="https://devolutions.atlassian.net/browse/DGW-309" rel="nofollow">DGW-309</a>)</li>
</ul>
<h3>Improvements</h3>
<ul>
<li>
<p><em>jetsocat</em>: add coloring control for log output (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1515" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1515/hovercard">#1515</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/58b1d56945f1b2b0c41abb20dadacea29ebc65ae">58b1d56945</a>)</p>
<p>Add --color flag with support for 'always', 'never', and 'auto' modes.<br>
Respects standard environment variables (NO_COLOR, FORCE_COLOR, TERM).</p>
</li>
<li>
<p><em>jetsocat</em>: improve optional flag handling and error reporting (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1512" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1512/hovercard">#1512</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/bf9069d18a5691a52825470f4a639f2ee4ad43da">bf9069d18a</a>)</p>
<p>Improves the handling of optional command-line flags in jetsocat by<br>
replacing direct flag access with proper error handling: missing<br>
optional flags are handled gracefully while invalid flag values still<br>
produce clear error messages.</p>
</li>
<li>
<p><em>dgw</em>: cleaner log message for listener init (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1521" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1521/hovercard">#1521</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/7e2730cb32145807551847883359da5630c73e4d">7e2730cb32</a>)</p>
</li>
<li>
<p><em>dgw</em>: split TlsVerifyStrict warning for absent and false (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1520" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1520/hovercard">#1520</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/a7f3f20f0a13528ed755c912194431ba20427823">a7f3f20f0a</a>)</p>
</li>
<li>
<p><em>dgw</em>: retrial logic when binding the listeners (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1525" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1525/hovercard">#1525</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/aba955264fa17e8a8aecde07cc80efd5f95f75ed">aba955264f</a>) (<a href="https://devolutions.atlassian.net/browse/DGW-310" rel="nofollow">DGW-310</a>)</p>
<p>The listener binding will be reattempted a set amount of time when a<br>
transient error is hit, such as "address already in use".</p>
</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>
<p><em>jetsocat</em>: resolve channel open to start tight race condition (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1511" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1511/hovercard">#1511</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/7eb873b273a08f4fe279287b4a5ccd2dc6fdfc41">7eb873b273</a>) (<a href="https://devolutions.atlassian.net/browse/ARC-323" rel="nofollow">ARC-323</a>)</p>
</li>
<li>
<p><em>webapp</em>: VNC connect for "None" authentication (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1518" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1518/hovercard">#1518</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/d720cc4e6b31d0cdc56a4e54b714953a8a30f82d">d720cc4e6b</a>)</p>
</li>
<li>
<p><em>jetsocat</em>: make the MCP proxy non-intrusive (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1514" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1514/hovercard">#1514</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/3701bd58523efdf3ac37188b3059eea0e27dc0e2">3701bd5852</a>) (<a href="https://devolutions.atlassian.net/browse/DGW-308" rel="nofollow">DGW-308</a>)</p>
<p>The MCP proxy was previously handling the initialize request itself and<br>
returning a response instead of forwarding it to the target MCP server.<br>
It also intercepted <code>notifications/initialized</code> and <code>logging/setLevel</code><br>
without passing them through.</p>
<p>Additionally, any unknown methods were being answered with an error<br>
response, even though the actual server might support them.</p>
<p>This change forwards all requests and notifications directly to the<br>
server to ensure correct behavior and compatibility.</p>
</li>
</ul>github-actions[bot]tag:github.com,2008:Repository/162330996/v2025.3.12025-09-29T12:54:41Zv2025.3.1<h3>Bug Fixes</h3>
<ul>
<li><em>jetsocat</em>: missing newline after MCP proxy JSON-RPC responses (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1507" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1507/hovercard">#1507</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/702cf76acc40a6561f708fce54d313dd7c712620">702cf76acc</a>)</li>
</ul>github-actions[bot]tag:github.com,2008:Repository/162330996/v2025.3.02025-09-12T15:32:56Zv2025.3.0<h3>Security</h3>
<ul>
<li>
<p><em>dgw</em>: emit syslogs and Windows events for important events (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1491" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1491/hovercard">#1491</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/15321b89bbf315cecb8b82f78a4e483285b73128">15321b89bb</a>) (<a href="https://devolutions.atlassian.net/browse/DGW-63" rel="nofollow">DGW-63</a>)</p>
<p>Easier auditability of Devolutions Gateway service by emitting system-wide logs.</p>
</li>
</ul>
<h3>Features</h3>
<ul>
<li>
<p><em>webapp</em>: implement MVP for self-contained session URLs (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1433" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1433/hovercard">#1433</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/9f5d4d190fceb75bb99bf181d5f7eeed6c28f1c6">9f5d4d190f</a>)</p>
<p>Introduced support for launching sessions directly from specially crafted URLs.<br>
These URLs include all necessary information to immediately initialize and<br>
(optionally) auto-connect a session upon opening.</p>
<p>New query parameters:</p>
<ul>
<li><code>config</code>: Encoded session configuration data</li>
<li><code>autoconnect</code>: If set to <code>true</code>, the session starts automatically</li>
<li><code>protocol</code>: Specifies the protocol to use (currently only <code>rdp</code> is supported)</li>
</ul>
</li>
<li>
<p><em>webapp</em>: support clipboard for SSH and Telnet clients (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1437" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1437/hovercard">#1437</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/5a5c065d1ee990324bccc04449562418d14035ac">5a5c065d1e</a>) (<a href="https://devolutions.atlassian.net/browse/ARC-266" rel="nofollow">ARC-266</a>)</p>
</li>
<li>
<p><em>dgw</em>: (Unstable) basic network monitoring (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1446" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1446/hovercard">#1446</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/d135342682e3c02f9c26c050259cd013cf9a0b36">d135342682</a>) (<a href="https://devolutions.atlassian.net/browse/DGW-302" rel="nofollow">DGW-302</a>)</p>
<p>Introduces an endpoint monitor that checks the uptime of a list of hosts<br>
provided through a remotely-submitted configuration file. The monitor<br>
results are saved to a temporary in-memory buffer and can be fetched by<br>
means of a REST endpoint.</p>
<p>The monitor system is structured as an agent, meant to be driven by a<br>
third party (for example our DVLS), so the configuration is ephemeral, and<br>
monitor results are deleted from the buffer after being fetched.<br>
Gateway is not itself the source of truth for the monitor configuration,<br>
and it does not persist the log entries.</p>
<p>Two authenticated endpoints are introduced:</p>
<ul>
<li><code>POST /jet/net/monitor/config</code></li>
<li><code>POST /jet/net/monitor/log/drain</code></li>
</ul>
</li>
<li>
<p><em>webapp</em>: add fallback screen for unsupported browsers (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1461" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1461/hovercard">#1461</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/61ac8a20036b1ed87a03399fa0087908afc09e02">61ac8a2003</a>)</p>
</li>
<li>
<p><em>dgw</em>: keep records of traffic transferred via JMUX tunnels (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1466" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1466/hovercard">#1466</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/d23c29c9fa799ce877a6ced6851f740a7af0f0fc">d23c29c9fa</a>) (<a href="https://devolutions.atlassian.net/browse/DGW-270" rel="nofollow">DGW-270</a>)</p>
</li>
<li>
<p><em>dgw</em>: implement traffic audit claim/ack HTTP endpoints (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1468" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1468/hovercard">#1468</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/2328ba5feae050bad31409009c6a033551265cea">2328ba5fea</a>) (<a href="https://devolutions.atlassian.net/browse/DGW-271" rel="nofollow">DGW-271</a>)</p>
<p>Add two new endpoints for external traffic audit integration:</p>
<ul>
<li><code>POST /jet/traffic/claim</code> - Claim events with lease-based locking</li>
<li><code>POST /jet/traffic/ack</code> - Acknowledge processed events</li>
</ul>
</li>
<li>
<p><em>agent-installer</em>: rename the session feature and make it available by default (<a href="https://github.com/Devolutions/devolutions-gateway/commit/127dd773c61757bc26dae8ee7005aca57423eb4f">127dd773c6</a>)</p>
</li>
<li>
<p><em>agent</em>: minimalist "About" window for tray icon (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1471" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1471/hovercard">#1471</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/a43bd6609e25196e065b1c898680314e10a0e539">a43bd6609e</a>)</p>
</li>
<li>
<p><em>jetsocat</em>: MCP proxy (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1478" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1478/hovercard">#1478</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/3eadd1ddfb2f9540d9e17bd598f27ef6b5668f9f">3eadd1ddfb</a>)</p>
<p>Example usage:</p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | jetsocat mcp-proxy - https://learn.microsoft.com/api/mcp"><pre><span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}<span class="pl-pds">'</span></span> <span class="pl-k">|</span> jetsocat mcp-proxy - https://learn.microsoft.com/api/mcp</pre></div>
</li>
<li>
<p><em>jetsocat</em>: add "jmux" alias for jmux-proxy command (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1486" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1486/hovercard">#1486</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/76c9cde1c96286415924efac0ea3326a9c25ca31">76c9cde1c9</a>)</p>
</li>
<li>
<p><em>jetsocat</em>: expand simple pipe names (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1485" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1485/hovercard">#1485</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/abe99721860fadc8c06599e7fd88f0f948aaeef8">abe9972186</a>)</p>
<p>Add automatic path expansion for <code>np://</code> and <code>np-listen://</code> schemes:</p>
<ul>
<li>Windows: simple names expand to <code>./pipe/<NAME></code></li>
<li>Unix: simple names expand to <code>/tmp/<NAME></code></li>
</ul>
</li>
<li>
<p><em>webapp</em>: granular JPEG Quality option instead of explicit <code>TightLow</code> and <code>TightHigh</code> pseudo-encodings (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1488" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1488/hovercard">#1488</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/7cb9fd2a8d737d4c7733cae37e8cd6f98a509c0a">7cb9fd2a8d</a>)</p>
</li>
<li>
<p><em>webapp</em>: add color format selector for VNC session (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1475" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1475/hovercard">#1475</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/9ddf10c24fcb49a1c8aba899b912dd07e61dc54d">9ddf10c24f</a>)</p>
<p>Allow the user to tune the session quality more deeply<br>
(e.g, lower image quality if the network is slow).</p>
</li>
<li>
<p><em>agent</em>: in RDP extension, add PowerShell server mode support (<a href="https://github.com/Devolutions/devolutions-gateway/commit/b626323386044bf98a2d84b56c591da539216795">b626323386</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/pull/1498" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1498/hovercard">#1498</a>) (<a href="https://devolutions.atlassian.net/browse/ARC-383" rel="nofollow">ARC-383</a>)</p>
</li>
</ul>
<h3>Improvements</h3>
<ul>
<li>
<p>Improve container image for Azure Web App usage (<a href="https://github.com/Devolutions/devolutions-gateway/commit/ba8c4c218df0d1d0ca4c42215df685b16c33e155">ba8c4c218d</a>)</p>
</li>
<li>
<p><em>webapp</em>: improved error handling in remote desktop clients (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1456" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1456/hovercard">#1456</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/c6dcb1666d221978c76a6deb1fbce5cdc0a69ff6">c6dcb1666d</a>)</p>
</li>
<li>
<p><em>webapp</em>: [<strong>breaking</strong>] add manual clipboard mode for RDP, VNC and ARD (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1459" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1459/hovercard">#1459</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/b4e231f853863488ec5d2da2d2d1f6b8fea70623">b4e231f853</a>)</p>
<p>The original auto clipboard mode, can now be enabled/disabled in the connection form.<br>
It's available only for browsers based on <em>Blink</em> engine (e.g.: Chrome).</p>
<p>For others, auto clipboard mode is always disabled.</p>
<p>When disabled, two new buttons are showed in the toolbar: <em>Save Clipboard</em> and <em>Send Clipboard</em>.<br>
These buttons allow the user to manually send the content of the client host clipboard, or receive from<br>
the server clipboard.</p>
<p>Note that Firefox used to have a partially working autoclipboard mode, but it was<br>
completely removed because the cases where it failed were confusing more than helpful.<br>
The auto clipboard mode is the most convenient, but the manual clipboard mode<br>
has a predictable behavior on all platforms.</p>
</li>
<li>
<p><em>webapp</em>: improve clipboard interaction for outdated versions of the Firefox browser (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1464" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1464/hovercard">#1464</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/0c547d4596f5f518fe1a2c73bd68a02c03a1687b">0c547d4596</a>)</p>
</li>
<li>
<p><em>webapp</em>: disable clipboard in non-secure context (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1467" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1467/hovercard">#1467</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/9111ff85a17b3375a56a1e22a31450aaab08a77f">9111ff85a1</a>)</p>
</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>
<p><em>webapp</em>: incorrect user domain parsing for UPN format (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1431" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1431/hovercard">#1431</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/0638e665c9e4a0d47950baced8296a13177765e9">0638e665c9</a>) (<a href="https://devolutions.atlassian.net/browse/DGW-297" rel="nofollow">DGW-297</a>)</p>
<p>Fix username parsing logic to correctly handle UPN and down-level<br>
formats.<br>
Only splits <code>DOMAIN\user</code> format; preserves <code>[email protected]</code> as-is.</p>
</li>
<li>
<p><em>agent</em>: change PowerShell exec session run params (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1474" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1474/hovercard">#1474</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/ef0465d1fabed53becce3d91a861ffbc3e4b6faa">ef0465d1fa</a>)</p>
</li>
<li>
<p><em>agent</em>: remove command echo for batch(cmd) execution (<a href="https://github.com/Devolutions/devolutions-gateway/commit/f461a6ddf13167844bc5bcfa015555cb8b05d414">f461a6ddf1</a>)</p>
</li>
<li>
<p><em>agent</em>: hide console window for exec sessions with IO redirection (<a href="https://github.com/Devolutions/devolutions-gateway/commit/bb50b6ab05ce4ff2d31715dad09640586b82cfc3">bb50b6ab05</a>)</p>
</li>
<li>
<p><em>agent</em>: suppress ANSI escape codes in pwsh output (<a href="https://github.com/Devolutions/devolutions-gateway/commit/fa67ff1e276678d583351f08fbbe8843d8c0de12">fa67ff1e27</a>)</p>
</li>
<li>
<p><em>player</em>: add autoplay attribute to WebM video player (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1487" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1487/hovercard">#1487</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/0fac6ddc8187572c34f5fee6b32eca6babb29ffd">0fac6ddc81</a>)</p>
<p>Fixes issue where recordings were not auto-starting when embedded in<br>
iframes</p>
<p>DGW-296</p>
</li>
</ul>
<h3>Build</h3>
<ul>
<li>
<p><em>agent-installer</em>: add tun2socks.exe and wintun.dll to Devolutions Agent package (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1457" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1457/hovercard">#1457</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/e6f335c97052b122cea6dedbb703bb1a5a0dbd6e">e6f335c970</a>)</p>
</li>
<li>
<p><em>jetsocat,dgw</em>: optimize binary size (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1489" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1489/hovercard">#1489</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/8ad7ea0e96b11fe8a61266841cfe4fbdc4ac8c08">8ad7ea0e96</a>)</p>
</li>
</ul>github-actions[bot]tag:github.com,2008:Repository/162330996/v2025.2.32025-07-14T08:21:20Zv2025.2.3<h3>Features</h3>
<ul>
<li>
<p><em>dgw</em>: write startup failures into boot.stacktrace file (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1416" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1416/hovercard">#1416</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/78028a6e602c94f5b563f97f78b0d9cd13be677b">78028a6e60</a>) (<a href="https://devolutions.atlassian.net/browse/DGW-292" rel="nofollow">DGW-292</a>)</p>
<p>This will make troubleshooting configuration errors much more easier.</p>
</li>
<li>
<p><em>dgw</em>: new TlsVerifyStrict option (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1415" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1415/hovercard">#1415</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/257d941dd16fd291b4ccdf8a2e5468042ac4b9f7">257d941dd1</a>) (<a href="https://devolutions.atlassian.net/browse/DGW-293" rel="nofollow">DGW-293</a>)</p>
<p>This adds a <code>TlsVerifyStrict</code> option for controlling the new stricter<br>
checks on TLS certificates.</p>
<p>When enabled (<code>true</code>), the client performs additional checks on the<br>
server certificate, including:</p>
<ul>
<li>Ensuring the presence of the <strong>Subject Alternative Name (SAN)</strong><br>
extension.</li>
<li>Verifying that the <strong>Extended Key Usage (EKU)</strong> extension includes<br>
<code>serverAuth</code>.</li>
</ul>
<p>Certificates that do not meet these requirements are increasingly<br>
rejected by modern clients (e.g., Chrome, macOS). Therefore, we strongly<br>
recommend using certificates that comply with these standards.</p>
<p>The default configuration for fresh installs will include the<br>
<code>TlsVerifyStrict</code> key set to <code>true</code>.</p>
</li>
<li>
<p><em>dgw,agent</em>: display config file path during initialization (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1421" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1421/hovercard">#1421</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/a185df7844c527e54610ec1e549cf051dad770a9">a185df7844</a>)</p>
<p>Output the full path to the configuration file when initializing the<br>
configuration for both Devolutions Gateway and Devolutions Agent. This<br>
simplifies debugging and setup verification.</p>
</li>
<li>
<p><em>dgw</em>: auto-detect proxy setup when performing HTTP requests (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1422" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1422/hovercard">#1422</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/b380feffe6a1b25d37fa7d1db9da54a7439023a6">b380feffe6</a>)</p>
<p>Look in environment variables to set HTTP, HTTPS or SOCKS proxies.</p>
</li>
<li>
<p><em>agent</em>: auto-detect proxy setup when fetching productinfo.htm (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1420" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1420/hovercard">#1420</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/9f89c4c15c09f7e8701ecc579bfcc9b0e1624fdb">9f89c4c15c</a>) (<a href="https://devolutions.atlassian.net/browse/DGW-291" rel="nofollow">DGW-291</a>)</p>
<p>Look in environment variables to set HTTP, HTTPS or SOCKS proxies.</p>
</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>
<p><em>pedm</em>: don't error on profile selection if no assignments (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1398" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1398/hovercard">#1398</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/abe9f7c6934baea008cfbc7b6579efcedd57e179">abe9f7c693</a>)</p>
<p>If a user has never had a profile assigned, there will be no record of<br>
them in the <code>user</code> table.</p>
<p>However, if they try to select a profile, an error is returned. It's<br>
better to catch this scenario upfront and just return an empty profile<br>
selection and list.</p>
</li>
<li>
<p><em>webapp</em>: fullscreen handling for ARD web client (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1406" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1406/hovercard">#1406</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/30b6941406773c4a381641511e1f0fcaea663866">30b6941406</a>)</p>
</li>
<li>
<p><em>webapp</em>: fix enter fullscreen button during a running session (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1408" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1408/hovercard">#1408</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/4295a419190fcb6f002ed27af6509ee0c61cdc47">4295a41919</a>)</p>
</li>
<li>
<p><em>pedm</em>: add additional context to virtual account code paths (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1409" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1409/hovercard">#1409</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/63a0d8c8c9cb26478ef4fa010022034e69accc58">63a0d8c8c9</a>)</p>
<p>Some users are experiencing an error with the virtual account elevator.<br>
This adds additional context to the virtual account elevator code paths.</p>
</li>
<li>
<p><em>dgw</em>: set default value of TlsVerifyStrict to false (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1419" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1419/hovercard">#1419</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/528cada242f611657633a73a7cbc1e1a7a219b1e">528cada242</a>)</p>
<p>Previously, strict TLS verification was performed even when the<br>
TlsVerifyStrict key was absent from the configuration file.</p>
<p>From now on, if this key is missing, it will default to<br>
"TlsVerifyStrict": false.</p>
<p>This change ensures that existing users who are currently using improper<br>
certificates will not be affected. At the same time, newly generated<br>
configuration files will continue to include "TlsVerifyStrict": true by<br>
default, encouraging using proper certificates from the start.</p>
<p>New users can still opt out of strict verification by explicitly setting<br>
the value to false or removing the key entirely if they are willing to<br>
accept potential compatibility issues with some clients, such as Chrome<br>
or macOS.</p>
<p>A warning will be logged if the option is disabled as it may hide latent<br>
issues.<br>
Hopefully, this lead the user to enable the option, and fix the<br>
underlying certificate issue if necessary.</p>
</li>
<li>
<p><em>webapp</em>: fix an issue in the VNC client where display scaling was not correctly<br>
updated after a server-initiated resize.</p>
</li>
<li>
<p><em>webapp</em>: fix excessive scroll speed in VNC client.</p>
</li>
<li>
<p><em>webapp</em>: fix clipboard monitoring treats clipboard updates from the server as<br>
local clipboard updates.</p>
</li>
<li>
<p><em>webapp</em>: fix the error when <code>navigator.clipboard.write</code> was called when the<br>
browser window was not focused.</p>
</li>
</ul>github-actions[bot]tag:github.com,2008:Repository/162330996/v2025.2.22025-06-26T18:14:36Zv2025.2.2<h3>Features</h3>
<ul>
<li>
<p><em>webapp</em>: support dynamic resizing for RDP and VNC sessions (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1389" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1389/hovercard">#1389</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/aa03b656459cc31d642f2cf9b42a8a20df227070">aa03b65645</a>)</p>
</li>
<li>
<p><em>webapp</em>: update RDP and VNC web clients (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1393" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1393/hovercard">#1393</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/79870495da8a399b8c673c027ad26d5b9af26ddf">79870495da</a>)</p>
<ul>
<li>Prevent undesirable scrolling when the canvas is focused.</li>
<li>Fix a typo.</li>
<li>Fix keyboard input for Firefox.</li>
<li>Hide slider in fullscreen mode.</li>
<li>Fix a bug in VNC client where ZLIB encoding was not disabled even when<br>
unchecked from the list.</li>
</ul>
</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>
<p><em>webapp</em>: incorrect desktop size when a predefined resolution is selected (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1383" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1383/hovercard">#1383</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/4225fda03307e178cd0a77911975b7bb50f6835c">4225fda033</a>)</p>
</li>
<li>
<p><em>dgw</em>: [<strong>breaking</strong>] clean up /jet/net/config route (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1387" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1387/hovercard">#1387</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/d596e90558358fc6b4ec7278e01f1de8c820aa4e">d596e90558</a>) (<a href="https://devolutions.atlassian.net/browse/DGW-287" rel="nofollow">DGW-287</a>)</p>
<p>The JSON output of the <code>/jet/net/config</code> route is changed to be more<br>
convenient in the consumer code.</p>
<p>Previous output example:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="[
{
"name": "vboxnet0",
"addresses": [
{
"V4": {
"ip": "192.168.56.1",
"broadcast": "192.168.56.255",
"netmask": "255.255.255.0"
}
},
{
"V6": {
"ip": "fe80::800:27ff:fe00:0",
"netmask": "ffff:ffff:ffff:ffff::"
}
}
],
"mac_addr": "0a:00:27:00:00:00",
"index": 4
}
]"><pre class="notranslate"><code>[
{
"name": "vboxnet0",
"addresses": [
{
"V4": {
"ip": "192.168.56.1",
"broadcast": "192.168.56.255",
"netmask": "255.255.255.0"
}
},
{
"V6": {
"ip": "fe80::800:27ff:fe00:0",
"netmask": "ffff:ffff:ffff:ffff::"
}
}
],
"mac_addr": "0a:00:27:00:00:00",
"index": 4
}
]
</code></pre></div>
<p>New output example:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="{
"vboxnet0": [
{
"family": "IPv4",
"address": "192.168.56.1",
"broadcast": "192.168.56.255",
"netmask": "255.255.255.0",
"mac": "0a:00:27:00:00:00"
},
{
"family": "IPv6",
"address": "fe80::800:27ff:fe00:0",
"netmask": "ffff:ffff:ffff:ffff::",
"mac": "0a:00:27:00:00:00"
}
]
}"><pre class="notranslate"><code>{
"vboxnet0": [
{
"family": "IPv4",
"address": "192.168.56.1",
"broadcast": "192.168.56.255",
"netmask": "255.255.255.0",
"mac": "0a:00:27:00:00:00"
},
{
"family": "IPv6",
"address": "fe80::800:27ff:fe00:0",
"netmask": "ffff:ffff:ffff:ffff::",
"mac": "0a:00:27:00:00:00"
}
]
}
</code></pre></div>
</li>
<li>
<p><em>webapp</em>: change toolbar activation height (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1390" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1390/hovercard">#1390</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/882e7571c03c4036c79cbaec89f37db1562868cd">882e7571c0</a>)</p>
<p>When in fullscreen mode, the session toolbar was not appearing<br>
when the cursor was moved to the top of the screen.</p>
</li>
<li>
<p><em>dgw</em>: [<strong>breaking</strong>] fail-fast on improper certificate for TLS (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1391" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1391/hovercard">#1391</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/aca08f0aba1e637ac6c2b791941a95d2cbfb0402">aca08f0aba</a>) (<a href="https://devolutions.atlassian.net/browse/DGW-286" rel="nofollow">DGW-286</a>)</p>
<p>Certificates missing the auth extended key usage, or missing a subject<br>
alternative name are now rejected:</p>
<ul>
<li>immediately fail on startup for certificates from filesystem, and</li>
<li>fail on certificate resolution for system certificate store.</li>
</ul>
</li>
<li>
<p><em>dgw</em>: crash when using default port HTTP internal URL (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1392" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1392/hovercard">#1392</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/71080c054706ce07daab5ee363db93dadac64541">71080c0547</a>) (<a href="https://devolutions.atlassian.net/browse/DGW-288" rel="nofollow">DGW-288</a>)</p>
<p>The listener task was crashing when the default port for HTTP (80) or HTTPS (443)<br>
was used in the internal URL of the HTTP listener.</p>
</li>
</ul>github-actions[bot]tag:github.com,2008:Repository/162330996/v2025.2.12025-06-11T13:20:56Zv2025.2.1<h3>Features</h3>
<ul>
<li>
<p><em>webapp</em>: allow dynamically adjust wheel_speed_factor for VNC and ARD sessions (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1369" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1369/hovercard">#1369</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/58536dba69d4b181dd270112754c77fa64d347cd">58536dba69</a>)</p>
<p>The wheel speed factor setting is moved to the toolbar.</p>
</li>
<li>
<p><em>dgw</em>: allow session tokens to be reused in a limited way (<a href="https://github.com/Devolutions/devolutions-gateway/commit/b3415c2bcc425cb3ce98ce17b93e4ebe9c72069f">b3415c2bcc</a>) (<a href="https://devolutions.atlassian.net/browse/DGW-238" rel="nofollow">DGW-238</a>)</p>
<p>Add support a configurable reconnection window, allowing token reuse for<br>
reconnections after disconnection within a defined period. This feature<br>
will enable more robust handling of temporary disconnections, minimizing<br>
session disruptions.</p>
<p>The token can be reused under three conditions:</p>
<ul>
<li>The associated session was not killed.</li>
<li>The reconnection window since last disconnection is not exceeded.</li>
<li>The number of connections during the reconnection window does not<br>
exceed 10 (hardcoded value).</li>
</ul>
<p>For the last point, this is the maximum number of reconnections allowed<br>
during the reconnection window. If the reconnection window (e.g.:<br>
30 seconds) is over while the connection is still alive, the counter<br>
is reset, and it’s possible to reconnect up to 10 times again. This<br>
prevents brute force attacks in the situation where the token is stolen,<br>
although that is tricky to exploit in the first place.</p>
</li>
<li>
<p><em>dgw</em>: support port wildcards for JMUX sessions (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1377" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1377/hovercard">#1377</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/922792ea07893617b849a5de0b080e7db9eb818b">922792ea07</a>) (<a href="https://devolutions.atlassian.net/browse/DGW-243" rel="nofollow">DGW-243</a>)</p>
<p>When the port is set to 0, we do not add a <code>FilteringRule::Port</code>, and<br>
when the the host is also set to * (i.e.: <code>*:0</code>), insert<br>
<code>FilteringRule::Allow</code> to allow anything.</p>
</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li><em>dgw</em>: fix terminal recording player CSS issue (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1374" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1374/hovercard">#1374</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/917bb48d444e80d77b03396f205913910fe2de15">917bb48d44</a>) (<a href="https://devolutions.atlassian.net/browse/DGW-280" rel="nofollow">DGW-280</a>)</li>
</ul>github-actions[bot]tag:github.com,2008:Repository/162330996/v2025.2.02025-06-04T15:10:32Zv2025.2.0<h3>Features</h3>
<ul>
<li>
<p><em>webapp</em>: add <code>wheel_speed_factor</code> setting to a VNC and ARD connection forms (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1362" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1362/hovercard">#1362</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/e6be3d02eb0c470e766e6600d2822ece63b77ec1">e6be3d02eb</a>)</p>
</li>
<li>
<p><em>dgw</em>: emit a warning alert when TLS is not configured and credentials are pushed (<a href="https://github.com/Devolutions/devolutions-gateway/commit/5a6ecd944baa2c0c2921f9978dfc22c3e7598812">5a6ecd944b</a>)</p>
<p>For instance, proxy-based credentials injection for RDP requires a TLS<br>
certificate and private key to be configured.</p>
</li>
<li>
<p><em>dgw</em>: proxy-based credential injection for RDP (<a href="https://github.com/Devolutions/devolutions-gateway/commit/033206eb9097bbe98033f622b40a127296b20699">033206eb90</a>) (<a href="https://devolutions.atlassian.net/browse/ARC-277" rel="nofollow">ARC-277</a>)</p>
</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>
<p><em>pedm</em>: fix flawed expand_environment function (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1366" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1366/hovercard">#1366</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/476b885199772c845433f1a717fdf483db948183">476b885199</a>)</p>
</li>
<li>
<p><em>webapp</em>: typo in resolution quality control (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1364" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1364/hovercard">#1364</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/5b7bbbeff39c7e5a2c1ae3bf379a3901568700a1">5b7bbbeff3</a>) (<a href="https://devolutions.atlassian.net/browse/DGW-272" rel="nofollow">DGW-272</a>)</p>
</li>
<li>
<p><em>dgw</em>: [<strong>breaking</strong>] drop the prx_usr, prx_pwd, dst_usr and dst_pwd claims (<a href="https://github.com/Devolutions/devolutions-gateway/issues/1370" data-hovercard-type="pull_request" data-hovercard-url="/Devolutions/devolutions-gateway/pull/1370/hovercard">#1370</a>) (<a href="https://github.com/Devolutions/devolutions-gateway/commit/ba1feedc9f5deecd30d4c112e0ce814fba133d65">ba1feedc9f</a>)</p>
<p>The favored approach when pushing credentials is now to use the<br>
preflight route.</p>
</li>
</ul>github-actions[bot]