Features
-
webapp: update VNC and RDP clients (#1533) (a09dcf41ea)
- VNC: Prevent a custom pixel format from being set if Tight JPEG or Tight
PNG is enabled. - VNC: Fixed an issue where Zlib encoding was always advertised to the
server, regardless of the chosen ARD quality. - RDP: Fixed an issue where the clipboard data was not sent to the server
right after the connection. - RDP: Fixed the
lastSentClipboardDatabeing null in the
onForceClipboardCallback. - RDP: Added human-readable descriptions for
RDCleanPatherrors. - VNC: Update cryptographic libraries for VNC.
- VNC: Prevent a custom pixel format from being set if Tight JPEG or Tight
-
installer: download public key from DVLS (44aab79ad1)
-
installer: allow CLI generation on release builds (f9665c2759)
-
jetsocat: add concurrent reads support for MCP proxy (#1560) (acf770f5bc) (DGW-314)
Refactor MCP proxy to support server-initiated messages (notifications,
progress updates, and server -> client requests) by enabling concurrent
reads from both client and server. -
dgw: TLS thumbprint anchoring (#1570) (b3369646bf) (DGW-318)
Allow "unsecure" TLS if the client provides a thumbprint and the peer
certificate matches it. -
agent: implement DVC remote exec detached mode (#1567) (1417db9df6) ([ARC-411](https://devolutions.atlassian.net/browse/[ARC-411](https://devolutions.atlassian.net/browse/ARC-411)))
Adds fire-and-forget remote execution via the now proto DVC.
Previously, all execution types (except Run) waited for the process exit
code and tracked the execution session, but this behavior is not always
what the user expects. This PR changes that and adds an option to
specify if fire and forget mode is needed (return result right after
process is spawned. -
agent,dgw: add Hub Service auto-updater support (#1557) (330cefef73)
-
dgw: add multi-provider AI Gateway (#1588) (b11f050d36)
Adds an experimental AI Gateway feature that provides a unified proxy
for multiple AI provider APIs through Devolutions Gateway. This enables
centralized API key management, consistent authentication, and
simplified access to various AI services from a single endpoint.Supports seven providers with OpenAI-compatible and
provider-specific endpoints, featuring transparent proxying, SSE
streaming support, and flexible configuration through both JSON config
and environment variables.Supported providers:
- Mistral AI (cloud API)
- OpenAI (cloud API)
- Anthropic Claude (cloud API with custom message format)
- OpenRouter (unified multi-provider API)
- Azure OpenAI (deployment-based Azure service)
- Ollama (local, OpenAI-compatible, optional auth)
- LM Studio (local, OpenAI-compatible, optional auth)
Requires enable_unstable: true in debug configuration.
-
agent: migrate from productinfo.htm to productinfo.json format (#1591) (aaf515686f)
Replaces the legacy flat key-value productinfo.htm format with a
structured JSON format that provides better organization and
extensibility. The new format supports multiple release channels
(Current, Beta, Update, Stable) and includes explicit architecture and
file type metadata.
Improvements
-
jetsocat: detect broken pipe and stop MCP proxy gracefully (#1544) (d3222061e1)
When the MCP server connection breaks (process died, pipe closed), the
proxy now detects this and stops forwarding requests instead of
continuing to fail on each subsequent request. -
dgw: display the full trace for forward errors (#1550) (e74e57f809)
-
installer: improve debouncer robustness, legibility of port check result (a3f642407c)
-
installer: update localization (eff50da336)
-
dgw: [breaking] switch traffic audit IDs from INTEGER to ULID (#1597) (b443f93f44) (DGW-321)
Replace INTEGER PRIMARY KEY with 16-byte BLOB (ULID) for traffic audit
event IDs to avoid overflow issues with persisted, ever-increasing IDs.- Auto-detect old INTEGER schema via PRAGMA table_info and reset
database - Store ULIDs as 16-byte BLOBs (lexicographically sortable)
- Auto-detect old INTEGER schema via PRAGMA table_info and reset
-
agent: improve productinfo.json parsing with lenient error handling (#1595) (75a5879b95)
Bug Fixes
-
webapp: fix TS errors on invalid config (#1532) (fde1c0de12)
-
installer: fix UI at high scaling factors (abbdd6ad65)
-
installer: fix broken hyperlinks (dfa4608d91)
-
installer: fix a (handled) NRE that was nonetheless annoying in debug (25ed8b2c00)
-
installer: avoid crashes on server core (e432ad092e)
-
installer: add missing file to csproj (51fd11088d)
-
installer: UI glitch caused by tab stops (52979494ff)
-
installer: public key action pick up downloaded file (378ffbe915)
-
dgw: fix a bug preventing mstsc to work with the RDP proxy (#1576) (7a0c1f5437)
-
dgw,agent: improve systemd integration (#1549) (0d5239ba1f) (DGW-317)
Update ceviche to 0.7.0 which improves systemd integration.
Here is the new strategy:
-
pkg-config detection: We query
pkg-config --variable=systemdsystemunitdir systemd
to get the distribution's preferred location. This works on most modern
systems that have systemd development packages installed. -
Fallback probing: If pkg-config is unavailable or doesn't return a
result, we probe common directories in order:/usr/lib/systemd/system/lib/systemd/system
This fixes installation issues on RHEL-based distributions where systemd
units are located in /usr/lib/systemd/system instead of /lib/systemd/system. -