Skip to content

chore(release): prepare for publishing#1212

Open
devolutionsbot wants to merge 1 commit intomasterfrom
release-plz/2026-04-09T06-06-06Z
Open

chore(release): prepare for publishing#1212
devolutionsbot wants to merge 1 commit intomasterfrom
release-plz/2026-04-09T06-06-06Z

Conversation

@devolutionsbot
Copy link
Copy Markdown
Contributor

@devolutionsbot devolutionsbot commented Apr 9, 2026

🤖 New release

  • iron-remote-desktop: 0.7.0 -> 0.7.1 (✓ API compatible changes)
  • ironrdp-error: 0.1.3 -> 0.1.4 (✓ API compatible changes)
  • ironrdp-core: 0.1.5 -> 0.1.6 (✓ API compatible changes)
  • ironrdp-pdu: 0.7.0 -> 0.8.0 (✓ API compatible changes)
  • ironrdp-svc: 0.6.0 -> 0.6.1 (✓ API compatible changes)
  • ironrdp-connector: 0.8.0 -> 0.8.1 (✓ API compatible changes)
  • ironrdp-async: 0.8.0 -> 0.8.1 (✓ API compatible changes)
  • ironrdp-acceptor: 0.8.0 -> 0.8.1 (✓ API compatible changes)
  • ironrdp-cliprdr: 0.5.0 -> 0.5.1 (✓ API compatible changes)
  • ironrdp-dvc: 0.5.0 -> 0.5.1 (✓ API compatible changes)
  • ironrdp-displaycontrol: 0.5.0 -> 0.5.1 (✓ API compatible changes)
  • ironrdp-echo: 0.1.0 -> 0.1.1 (✓ API compatible changes)
  • ironrdp-graphics: 0.7.0 -> 0.7.1 (✓ API compatible changes)
  • ironrdp-input: 0.5.0 -> 0.5.1 (✓ API compatible changes)
  • ironrdp-rdpdr: 0.5.0 -> 0.5.1 (✓ API compatible changes)
  • ironrdp-rdpsnd: 0.7.0 -> 0.7.1 (✓ API compatible changes)
  • ironrdp-ainput: 0.5.0 -> 0.5.1 (✓ API compatible changes)
  • ironrdp-tokio: 0.8.0 -> 0.8.1 (✓ API compatible changes)
  • ironrdp-server: 0.10.0 -> 0.10.1 (✓ API compatible changes)
  • ironrdp-bulk: 0.1.0 -> 0.1.1 (✓ API compatible changes)
  • ironrdp-session: 0.8.0 -> 0.8.1 (✓ API compatible changes)
  • ironrdp: 0.14.0 -> 0.14.1 (✓ API compatible changes)
  • ironrdp-blocking: 0.8.0 -> 0.8.1 (✓ API compatible changes)
  • ironrdp-cliprdr-native: 0.5.0 -> 0.5.1 (✓ API compatible changes)
  • ironrdp-dvc-pipe-proxy: 0.3.0 -> 0.3.1 (✓ API compatible changes)
  • ironrdp-tls: 0.2.0 -> 0.2.1 (✓ API compatible changes)
  • ironrdp-rdcleanpath: 0.2.1 -> 0.2.2 (✓ API compatible changes)
  • ironrdp-rdpsnd-native: 0.5.0 -> 0.5.1 (✓ API compatible changes)
  • ironrdp-dvc-com-plugin: 0.1.0
  • ironrdp-cliprdr-format: 0.1.4 -> 0.2.0 (✓ API compatible changes)
  • ironrdp-futures: 0.6.0 -> 0.6.1 (✓ API compatible changes)
  • ironrdp-rdpdr-native: 0.5.0 -> 0.5.1 (✓ API compatible changes)
  • ironrdp-str: 0.1.0
Changelog

iron-remote-desktop

[0.7.1] - 2026-04-30

Features

  • Expose granular RDCleanPath error details (#1117) (2911124e8f)

    Add RDCleanPathDetails struct to provide detailed error information for
    RDCleanPath errors, including HTTP status codes, WSA error codes, and
    TLS alert codes.

    Allows the web client to distinguish between different types of network
    errors (say, WSAEACCES/10013) instead of showing a generic RDCleanpath
    error message.

  • Implement clipboard file transfer support (#1166) (c98a8fb774)

    Add end-to-end clipboard file transfer (upload and download) across the
    CLIPRDR channel per MS-RDPECLIP.

Documentation

  • Establish the MSRV policy (current is 1.89) (#1157) (c10e6ff16c)

    The MSRV is the oldest stable Rust release that is at least 6 months
    old, bounded by the Rust version available in Debian stable-backports
    and Fedora stable.

  • Document iron-remote-desktop API design philosophy (#1192) (9bb909eca2)

    The core rule is: a method belongs in the base API (UserInteraction /
    Session / SessionBuilder) if the web component itself needs to call it
    for transparent behaviour, or if the feature is universal across all
    remote protocol backends. Protocol-specific concepts must go through the
    extension mechanism instead.

ironrdp-error

[0.1.4] - 2026-04-30

Bug Fixes

Documentation

  • Establish the MSRV policy (current is 1.89) (#1157) (c10e6ff16c)

    The MSRV is the oldest stable Rust release that is at least 6 months
    old, bounded by the Rust version available in Debian stable-backports
    and Fedora stable.

ironrdp-core

[0.1.6] - 2026-04-30

Documentation

  • Establish the MSRV policy (current is 1.89) (#1157) (c10e6ff16c)

    The MSRV is the oldest stable Rust release that is at least 6 months
    old, bounded by the Rust version available in Debian stable-backports
    and Fedora stable.

ironrdp-pdu

[0.8.0] - 2026-04-30

Features

  • Add Initiate Multitransport Request/Response PDU types (#1091) (5a50f4099b)

    Add MultitransportRequestPdu and MultitransportResponsePdu types for the
    sideband UDP transport bootstrapping PDUs defined in MS-RDPBCGR
    2.2.15.1 and 2.2.15.2. Needed to decode/encode the IO channel messages that
    initiate UDP transport setup.

  • Add Auto-Detect Request and Response PDU types (#1168) (6e5f08a1b9)

  • [breaking] Route auto-detect PDUs through ShareDataPdu dispatch (#1176) (e5f2f36e96)

    Added Share Data PDU dispatch support for auto-detect PDUs, improving compatibility with Windows servers.

  • Complete pixel format support for bitmap updates (#1134) (a6b41093ce)

    Wires missing bitmap pixel formats (8/15/24bpp) into the session rendering
    pipeline so bitmap updates at those depths are rendered instead of being
    dropped, and adds fast-path palette update parsing to support 8bpp indexed
    color sessions.

  • Add RemoteFX Progressive codec primitives (#1196) (49099f0c31)

    Add wire-format types for RemoteFX Progressive Codec (MS-RDPRFX
    Progressive Extension) and the computational primitives required for progressive refinement.

  • Handle slow-path graphics and pointer updates (#1132) (9383380292)

    Adds support for slow-path graphics and pointer updates to IronRDP, fixing connectivity issues with servers like XRDP that use slow-path output instead of fast-path. The implementation parses slow-path framing headers and routes the inner payload structures through the existing fast-path processing pipeline by extracting shared bitmap and pointer processing methods.

Bug Fixes

  • Accept short Server Deactivate All PDU (485d6c2f8d)

    Some servers (XRDP, older Windows) send a Deactivate All PDU without
    the sourceDescriptor field. The decode previously required at least 3
    bytes, which caused a hard failure during deactivation-reactivation
    sequences with these servers.

    Treat the sourceDescriptor as optional: if the remaining data is
    shorter than the fixed part size, return successfully without
    reading the field. FreeRDP handles this the same way.

  • Correct ShareDataHeader uncompressedLength calculation (#1148) (c2688f464d)

  • Replace all from_bits_truncate with from_bits_retain (#1144) (353e30ddfd)

    from_bits_truncate silently discards unknown bits, which breaks the
    encode/decode round-trip property. This matters for fuzzing because a
    PDU that decodes and re-encodes should produce identical bytes.
    from_bits_retain preserves all bits, including those not yet defined in
    our bitflags types, so the round-trip property holds.

Documentation

  • Establish the MSRV policy (current is 1.89) (#1157) (c10e6ff16c)

    The MSRV is the oldest stable Rust release that is at least 6 months
    old, bounded by the Rust version available in Debian stable-backports
    and Fedora stable.

Build

  • Bump the patch group across 1 directory with 2 updates (#1222) (3fe6d157e0)

ironrdp-svc

[0.6.1] - 2026-04-30

Features

  • Add SvcMessage::encode_unframed_pdu for headerless encoding (#1093) (a21378e16a)

Documentation

  • Establish the MSRV policy (current is 1.89) (#1157) (c10e6ff16c)

    The MSRV is the oldest stable Rust release that is at least 6 months
    old, bounded by the Rust version available in Debian stable-backports
    and Fedora stable.

Build

  • Bump the patch group across 1 directory with 2 updates (#1222) (3fe6d157e0)

ironrdp-connector

[0.8.1] - 2026-04-30

Security

  • Add alternate_shell and work_dir configuration support (#1095) (a33d27fe67)

    Add support for configuring alternate_shell and work_dir fields in
    ClientInfoPdu, which are used by:

    • CyberArk PSM (Privileged Session Manager) for session tokens
    • Remote application scenarios (RemoteApp)
    • Custom shell configurations
  • Dispatch multitransport PDUs on IO channel (#1096) (7853e3cc6f)

    decode_io_channel() assumes all IO channel PDUs begin with
    aShareControlHeader. Multitransport Request PDUs use a
    BasicSecurityHeader with SEC_TRANSPORT_REQ instead ([MS-RDPBCGR]
    2.2.15.1).

    This adds a peek-based dispatch: check the first u16
    forTRANSPORT_REQ, decode as MultitransportRequestPdu if set,
    otherwise fall through to the existing decode_share_control() path
    unchanged.

    The new variant is propagated through ProcessorOutput and
    'ActiveStageOutput` so applications can handle multitransport requests.
    Client and web consumers log the request (no UDP transport yet).

Features

  • Add bulk compression and wire negotiation (ebf5da5f33)

    • add ironrdp-bulk crate with MPPC/NCRUSH/XCRUSH, bitstream, benches, and metrics
    • advertise compression in Client Info and plumb compression_type through connector
    • decode compressed FastPath/ShareData updates using BulkCompressor
    • update CLI to numeric compression flags (enabled by default, level 0-3)
    • extend screenshot example with compression options and negotiated logging
    • refresh tests, FFI/web configs, typos, and Cargo.lock
  • Advertise multitransport channel in GCC blocks (#1092) (4f5fdd3628)

    Add multitransport_flags config option to populate the
    MultiTransportChannelData GCC block during connection negotiation.
    When None (the default), behavior is unchanged.

Bug Fixes

  • Make fields of Error private (#1074) (e51ed236ce)

  • Propagate negotiated share_id to all outgoing ShareDataPdu (#1147) (2b24e9664d)

  • Advertise all colour depths per FreeRDP pattern (#1231) (2fa7c648cb)

    Replace the per-depth supportedColorDepths bitmask with an unconditional
    BPP32 | BPP24 | BPP16 | BPP15, following FreeRDP's approach of treating
    the field as a capability set rather than a preferred-depth indicator
    (libfreerdp/core/settings.c).

    The preferred depth is expressed via the two dedicated fields:

    • highColorDepth: now derived from the configured depth (15 →
      Rgb555Bpp16 / 0x0F, 16 → Rgb565Bpp16 / 0x10, else Bpp24 / 0x18),
      matching FreeRDP's ColorDepthToHighColor()
    • WANT_32_BPP_SESSION earlyCapabilityFlag: unchanged, set only for 32bpp

    Previously, a client configured for 24bpp advertised BPP24 only. Modern
    Windows hosts (Server 2012+) dropped 24bpp RDP support and reset the
    connection instead of negotiating down, leaving no usable depth. With
    all four bits always advertised the server can freely negotiate to the
    highest depth it supports.

  • Surface actual PDU type when an unexpected Share Control PDU arrives (#1236) (78effb3f91)

Performance

Documentation

  • Establish the MSRV policy (current is 1.89) (#1157) (c10e6ff16c)

    The MSRV is the oldest stable Rust release that is at least 6 months
    old, bounded by the Rust version available in Debian stable-backports
    and Fedora stable.

Build

  • Upgrade sspi to 0.19, picky to rc.22, fix NTLM fallback (#1188) (c70d38a9f1)

ironrdp-async

[0.8.1] - 2026-04-30

Documentation

  • Establish the MSRV policy (current is 1.89) (#1157) (c10e6ff16c)

    The MSRV is the oldest stable Rust release that is at least 6 months
    old, bounded by the Rust version available in Debian stable-backports
    and Fedora stable.

ironrdp-acceptor

[0.8.1] - 2026-04-30

Security

  • Send RDP_NEG_FAILURE on security protocol mismatch (#1152) (02b9f4efbb)

    When the client and server have no common security protocol, the
    acceptor now sends a proper RDP_NEG_FAILURE PDU before returning an
    error, instead of dropping the TCP connection.

Features

  • Expose received client credentials in AcceptorResult (#1155) (eda32d8acf)

Bug Fixes

  • Skip credential check when server credentials are None (#1150) (84015c9467)

Documentation

  • Establish the MSRV policy (current is 1.89) (#1157) (c10e6ff16c)

    The MSRV is the oldest stable Rust release that is at least 6 months
    old, bounded by the Rust version available in Debian stable-backports
    and Fedora stable.

Build

  • Upgrade sspi to 0.19, picky to rc.22, fix NTLM fallback (#1188) (c70d38a9f1)

ironrdp-cliprdr

[0.5.1] - 2026-04-30

Features

  • Add clipboard data locking methods (#1064) (58c3df84bb)

    Per [MS-RDPECLIP sections 2.2.4.6 and 2.2.4.7][lock-spec], the Local
    Clipboard
    Owner may lock the Shared Clipboard Owner's clipboard data before
    requesting
    file contents to ensure data stability during multi-request transfers.

    This enables server implementations to safely request file data from
    clients
    when handling clipboard paste operations.

ironrdp-dvc

[0.5.1] - 2026-04-30

Features

Bug Fixes

  • Negotiate DVC version from server capabilities (d094cbeb75)

    The client was hardcoded to respond with CapsVersion::V1 regardless
    of what the server requested. Servers that require V2 or V3 (such
    as XRDP) would reject the channel with "Dynamic Virtual Channel
    version 1 is not supported."

    Echo the server's requested version in the capabilities response
    instead. This correctly handles V1, V2, and V3 depending on what
    the server advertises. When a Create arrives before Capabilities
    (fallback path), default to V2 as the most broadly compatible
    version.

    Also bump the server-side capabilities request from V1 to V2 to
    advertise priority charge support.

    Add CapabilitiesRequestPdu::version() accessor to expose the
    server's requested version from the parsed PDU.

Documentation

  • Establish the MSRV policy (current is 1.89) (#1157) (c10e6ff16c)

    The MSRV is the oldest stable Rust release that is at least 6 months
    old, bounded by the Rust version available in Debian stable-backports
    and Fedora stable.

ironrdp-displaycontrol

[0.5.1] - 2026-04-30

Documentation

  • Establish the MSRV policy (current is 1.89) (#1157) (c10e6ff16c)

    The MSRV is the oldest stable Rust release that is at least 6 months
    old, bounded by the Rust version available in Debian stable-backports
    and Fedora stable.

ironrdp-echo

[0.1.1] - 2026-04-30

Documentation

  • Establish the MSRV policy (current is 1.89) (#1157) (c10e6ff16c)

    The MSRV is the oldest stable Rust release that is at least 6 months
    old, bounded by the Rust version available in Debian stable-backports
    and Fedora stable.

ironrdp-graphics

[0.7.1] - 2026-04-30

Features

  • Add segment wrapping utilities (#1076) (5fa4964807)

    Adds ZGFX segment wrapping utilities for encoding data in RDP8 format.

  • Add LZ77 compression support (#1097) (48715483a3)

    Adds ZGFX (RDP8) LZ77 compression to complement the existing
    decompressor, plus a high-level API for EGFX PDU preparation with
    auto/always/never mode selection.

    The compressor uses a hash table mapping 3-byte prefixes to history
    positions for O(1) match candidate lookup against the 2.5 MB sliding
    window.

  • Complete pixel format support for bitmap updates (#1134) (a6b41093ce)

    Wires missing bitmap pixel formats (8/15/24bpp) into the session rendering
    pipeline so bitmap updates at those depths are rendered instead of being
    dropped, and adds fast-path palette update parsing to support 8bpp indexed
    color sessions.

  • Add RemoteFX Progressive codec primitives (#1196) (49099f0c31)

    Add wire-format types for RemoteFX Progressive Codec (MS-RDPRFX
    Progressive Extension) and the computational primitives required for progressive refinement.

Bug Fixes

  • Fix pixel format handling in bitmap decoders (#1101) (75863245ab)

  • Replace all from_bits_truncate with from_bits_retain (#1144) (353e30ddfd)

    from_bits_truncate silently discards unknown bits, which breaks the
    encode/decode round-trip property. This matters for fuzzing because a
    PDU that decodes and re-encodes should produce identical bytes.
    from_bits_retain preserves all bits, including those not yet defined in
    our bitflags types, so the round-trip property holds.

Documentation

  • Establish the MSRV policy (current is 1.89) (#1157) (c10e6ff16c)

    The MSRV is the oldest stable Rust release that is at least 6 months
    old, bounded by the Rust version available in Debian stable-backports
    and Fedora stable.

Build

  • Bump the patch group across 1 directory with 2 updates (#1222) (3fe6d157e0)

ironrdp-input

[0.5.1] - 2026-04-30

Documentation

  • Establish the MSRV policy (current is 1.89) (#1157) (c10e6ff16c)

    The MSRV is the oldest stable Rust release that is at least 6 months
    old, bounded by the Rust version available in Debian stable-backports
    and Fedora stable.

ironrdp-rdpdr

[0.5.1] - 2026-04-30

Features

Bug Fixes

  • Model CreateDisposition as enum instead of bitflags (#1145) (c4f87aa417)

    CreateDisposition values (FILE_SUPERSEDE through FILE_OVERWRITE_IF) are
    mutually exclusive integers 0 through 5, not combinable bit flags.
    Modeling them with the bitflags macro causes subtle correctness issues.

  • Replace all from_bits_truncate with from_bits_retain (#1144) (353e30ddfd)

    from_bits_truncate silently discards unknown bits, which breaks the
    encode/decode round-trip property. This matters for fuzzing because a
    PDU that decodes and re-encodes should produce identical bytes.
    from_bits_retain preserves all bits, including those not yet defined in
    our bitflags types, so the round-trip property holds.

Documentation

  • Establish the MSRV policy (current is 1.89) (#1157) (c10e6ff16c)

    The MSRV is the oldest stable Rust release that is at least 6 months
    old, bounded by the Rust version available in Debian stable-backports
    and Fedora stable.

Build

  • Bump the patch group across 1 directory with 2 updates (#1222) (3fe6d157e0)

ironrdp-rdpsnd

[0.7.1] - 2026-04-30

Bug Fixes

  • Replace all from_bits_truncate with from_bits_retain (#1144) (353e30ddfd)

    from_bits_truncate silently discards unknown bits, which breaks the
    encode/decode round-trip property. This matters for fuzzing because a
    PDU that decodes and re-encodes should produce identical bytes.
    from_bits_retain preserves all bits, including those not yet defined in
    our bitflags types, so the round-trip property holds.

  • Handle AudioFormat renegotiation in Ready state (#1164) (2fe6fd0424)

    Sometimes Windows Server re-sends SNDC_FORMATS during Ready state
    (e.g., after mute/unmute in remote browser). Previously this hit the
    wildcard branch, entering Stop and permanently killing audio.

    Add an AudioFormat arm in Ready state to close the current stream and
    restart negotiation.

Documentation

  • Establish the MSRV policy (current is 1.89) (#1157) (c10e6ff16c)

    The MSRV is the oldest stable Rust release that is at least 6 months
    old, bounded by the Rust version available in Debian stable-backports
    and Fedora stable.

Build

  • Bump the patch group across 1 directory with 2 updates (#1222) (3fe6d157e0)

ironrdp-ainput

[0.5.1] - 2026-04-30

Bug Fixes

  • Replace all from_bits_truncate with from_bits_retain (#1144) (353e30ddfd)

    from_bits_truncate silently discards unknown bits, which breaks the
    encode/decode round-trip property. This matters for fuzzing because a
    PDU that decodes and re-encodes should produce identical bytes.
    from_bits_retain preserves all bits, including those not yet defined in
    our bitflags types, so the round-trip property holds.

Documentation

  • Establish the MSRV policy (current is 1.89) (#1157) (c10e6ff16c)

    The MSRV is the oldest stable Rust release that is at least 6 months
    old, bounded by the Rust version available in Debian stable-backports
    and Fedora stable.

Build

  • Bump the patch group across 1 directory with 2 updates (#1222) (3fe6d157e0)

ironrdp-tokio

[0.8.1] - 2026-04-30

Security

  • Add DVC COM plugin loader for native Windows DVC client plugins (9c987bcb40)

    Implements support for loading and using native Windows Dynamic Virtual
    Channel (DVC) client plugin DLLs through the COM-based IWTSPlugin API.
    This enables IronRDP to leverage existing Windows DVC plugins such as
    webauthn.dll for hardware security key support via RDP.

    New crate: ironrdp-dvc-com-plugin

    • Implements IWTSVirtualChannelManager and IWTSVirtualChannel COM interfaces
    • Manages plugin lifecycle on dedicated COM worker thread
    • Handles channel open/close/reopen cycles with per-instance write callbacks
    • Properly bridges between COM synchronous calls and IronRDP's async runtime

    Client integration:

    • Add --dvc-plugin CLI argument to ironrdp-client
    • Load plugins in both TCP and WebSocket connection paths
    • Windows-only conditional compilation for cross-platform builds

    Additional fixes:

    • Fix pre-existing crash in ironrdp-tokio KDC handler on 64-bit Windows
      (usize to u32 conversion in reqwest.rs)
    • Add proper error handling using try_from instead of unsafe as casts
    • All changes pass cargo fmt and cargo clippy with strict pedantic lints

    Tested with: C:\Windows\System32\webauthn.dll

Documentation

  • Establish the MSRV policy (current is 1.89) (#1157) (c10e6ff16c)

    The MSRV is the oldest stable Rust release that is at least 6 months
    old, bounded by the Rust version available in Debian stable-backports
    and Fedora stable.

Build

  • Upgrade sspi to 0.19, picky to rc.22, fix NTLM fallback (#1188) (c70d38a9f1)

ironrdp-server

[0.10.1] - 2026-04-30

Features

  • Add clipboard data locking methods (#1064) (58c3df84bb)

    Per [MS-RDPECLIP sections 2.2.4.6 and 2.2.4.7][lock-spec], the Local
    Clipboard
    Owner may lock the Shared Clipboard Owner's clipboard data before
    requesting
    file contents to ensure data stability during multi-request transfers.

    This enables server implementations to safely request file data from
    clients
    when handling clipboard paste operations.

ironrdp-bulk

[0.1.1] - 2026-04-30

Documentation

  • Establish the MSRV policy (current is 1.89) (#1157) (c10e6ff16c)

    The MSRV is the oldest stable Rust release that is at least 6 months
    old, bounded by the Rust version available in Debian stable-backports
    and Fedora stable.

Build

ironrdp-session

[0.8.1] - 2026-04-30

Security

  • Dispatch multitransport PDUs on IO channel (#1096) (7853e3cc6f)

    decode_io_channel() assumes all IO channel PDUs begin with
    aShareControlHeader. Multitransport Request PDUs use a
    BasicSecurityHeader with SEC_TRANSPORT_REQ instead ([MS-RDPBCGR]
    2.2.15.1).

    This adds a peek-based dispatch: check the first u16
    forTRANSPORT_REQ, decode as MultitransportRequestPdu if set,
    otherwise fall through to the existing decode_share_control() path
    unchanged.

    The new variant is propagated through ProcessorOutput and
    'ActiveStageOutput` so applications can handle multitransport requests.
    Client and web consumers log the request (no UDP transport yet).

Features

  • Add bulk compression and wire negotiation (ebf5da5f33)

    • add ironrdp-bulk crate with MPPC/NCRUSH/XCRUSH, bitstream, benches, and metrics
    • advertise compression in Client Info and plumb compression_type through connector
    • decode compressed FastPath/ShareData updates using BulkCompressor
    • update CLI to numeric compression flags (enabled by default, level 0-3)
    • extend screenshot example with compression options and negotiated logging
    • refresh tests, FFI/web configs, typos, and Cargo.lock
  • Complete pixel format support for bitmap updates (#1134) (a6b41093ce)

    Wires missing bitmap pixel formats (8/15/24bpp) into the session rendering
    pipeline so bitmap updates at those depths are rendered instead of being
    dropped, and adds fast-path palette update parsing to support 8bpp indexed
    color sessions.

  • Handle Auto-Detect Request PDUs from server (#1178) (4dcad09980)

    Fixes a crash when the server sends Auto-Detect Request PDUs during an
    active session. After feat(pdu)!: route auto-detect PDUs through ShareDataPdu dispatch #1176 added ShareDataPdu::AutoDetectReq routing,
    these PDUs decode correctly but hit the catch-all error path in the x224
    processor: "unhandled PDU: Auto-Detect Request PDU".

  • Handle slow-path graphics and pointer updates (#1132) (9383380292)

    Adds support for slow-path graphics and pointer updates to IronRDP, fixing connectivity issues with servers like XRDP that use slow-path output instead of fast-path. The implementation parses slow-path framing headers and routes the inner payload structures through the existing fast-path processing pipeline by extracting shared bitmap and pointer processing methods.

Bug Fixes

  • Make fields of Error private (#1074) (e51ed236ce)

  • Fix pixel format handling in bitmap decoders (#1101) (75863245ab)

  • Handle row padding in uncompressed bitmap updates (4262ae75ff)

    Uncompressed bitmap data has rows padded to 4-byte boundaries per
    [MS-RDPBCGR] 2.2.9.1.1.3.1.2.2, but the bitmap apply functions
    expect tightly packed pixel data. Strip the per-row padding before
    passing raw bitmap data to the apply functions.

    This fixes garbled bitmap rendering when connecting to servers that
    send uncompressed bitmaps with non-aligned row widths, such as XRDP
    at 16 bpp.

  • Skip bitmap updates that exceed bounds (#1146) (2b97a95e6d)

    After a desktop resize, an RDP server can send a burst of bitmap updates
    for the old resolution before its rendering pipeline has fully
    transitioned to the new one. These updates reference coordinates beyond
    the current image buffer in DecodedImage, causing index-out-of-bounds
    panics in the apply_* methods. On the server side, the same stale
    bitmaps can reach the encoder with dimensions exceeding the negotiated
    desktop size, panicking in NoneHandler::handle().

    This commit adds bounds checks at two levels:

    • DecodedImage::rect_fits() guard at the entry of each apply_*
      method, returning an empty rectangle when the update doesn't fit
    • Encoder-level guard in EncoderIter::next() that drops
      BitmapUpdates exceeding the current desktop size
  • Propagate negotiated share_id to all outgoing ShareDataPdu (#1147) (2b24e9664d)

Documentation

  • Establish the MSRV policy (current is 1.89) (#1157) (c10e6ff16c)

    The MSRV is the oldest stable Rust release that is at least 6 months
    old, bounded by the Rust version available in Debian stable-backports
    and Fedora stable.

ironrdp

[0.14.1] - 2026-04-30

Security

  • Add alternate_shell and work_dir configuration support (#1095) (a33d27fe67)

    Add support for configuring alternate_shell and work_dir fields in
    ClientInfoPdu, which are used by:

    • CyberArk PSM (Privileged Session Manager) for session tokens
    • Remote application scenarios (RemoteApp)
    • Custom shell configurations

Features

  • Add bulk compression and wire negotiation (ebf5da5f33)

    • add ironrdp-bulk crate with MPPC/NCRUSH/XCRUSH, bitstream, benches, and metrics
    • advertise compression in Client Info and plumb compression_type through connector
    • decode compressed FastPath/ShareData updates using BulkCompressor
    • update CLI to numeric compression flags (enabled by default, level 0-3)
    • extend screenshot example with compression options and negotiated logging
    • refresh tests, FFI/web configs, typos, and Cargo.lock
  • Advertise multitransport channel in GCC blocks (#1092) (4f5fdd3628)

    Add multitransport_flags config option to populate the
    MultiTransportChannelData GCC block during connection negotiation.
    When None (the default), behavior is unchanged.

  • Implement ECHO virtual channel (#1109) (6f6496ad29)

Documentation

  • Establish the MSRV policy (current is 1.89) (#1157) (c10e6ff16c)

    The MSRV is the oldest stable Rust release that is at least 6 months
    old, bounded by the Rust version available in Debian stable-backports
    and Fedora stable.

Build

ironrdp-blocking

[0.8.1] - 2026-04-30

Documentation

  • Establish the MSRV policy (current is 1.89) (#1157) (c10e6ff16c)

    The MSRV is the oldest stable Rust release that is at least 6 months
    old, bounded by the Rust version available in Debian stable-backports
    and Fedora stable.

ironrdp-cliprdr-native

[0.5.1] - 2026-04-30

Features

  • Implement clipboard file transfer support (#1166) (c98a8fb774)

    Add end-to-end clipboard file transfer (upload and download) across the
    CLIPRDR channel per MS-RDPECLIP.

Documentation

  • Establish the MSRV policy (current is 1.89) (#1157) (c10e6ff16c)

    The MSRV is the oldest stable Rust release that is at least 6 months
    old, bounded by the Rust version available in Debian stable-backports
    and Fedora stable.

ironrdp-dvc-pipe-proxy

[0.3.1] - 2026-04-30

Documentation

  • Establish the MSRV policy (current is 1.89) (#1157) (c10e6ff16c)

    The MSRV is the oldest stable Rust release that is at least 6 months
    old, bounded by the Rust version available in Debian stable-backports
    and Fedora stable.

ironrdp-tls

[0.2.1] - 2026-04-30

Documentation

  • Establish the MSRV policy (current is 1.89) (#1157) (c10e6ff16c)

    The MSRV is the oldest stable Rust release that is at least 6 months
    old, bounded by the Rust version available in Debian stable-backports
    and Fedora stable.

Build

ironrdp-rdcleanpath

[0.2.2] - 2026-04-30

Documentation

  • Establish the MSRV policy (current is 1.89) (#1157) (c10e6ff16c)

    The MSRV is the oldest stable Rust release that is at least 6 months
    old, bounded by the Rust version available in Debian stable-backports
    and Fedora stable.

ironrdp-rdpsnd-native

[0.5.1] - 2026-04-30

Documentation

  • Establish the MSRV policy (current is 1.89) (#1157) (c10e6ff16c)

    The MSRV is the oldest stable Rust release that is at least 6 months
    old, bounded by the Rust version available in Debian stable-backports
    and Fedora stable.

Build

ironrdp-dvc-com-plugin

[0.1.0] - 2026-04-30

Security

  • Add DVC COM plugin loader for native Windows DVC client plugins (9c987bcb40)

    Implements support for loading and using native Windows Dynamic Virtual
    Channel (DVC) client plugin DLLs through the COM-based IWTSPlugin API.
    This enables IronRDP to leverage existing Windows DVC plugins such as
    webauthn.dll for hardware security key support via RDP.

    New crate: ironrdp-dvc-com-plugin

    • Implements IWTSVirtualChannelManager and IWTSVirtualChannel COM interfaces
    • Manages plugin lifecycle on dedicated COM worker thread
    • Handles channel open/close/reopen cycles with per-instance write callbacks
    • Properly bridges between COM synchronous calls and IronRDP's async runtime

    Client integration:

    • Add --dvc-plugin CLI argument to ironrdp-client
    • Load plugins in both TCP and WebSocket connection paths
    • Windows-only conditional compilation for cross-platform builds

    Additional fixes:

    • Fix pre-existing crash in ironrdp-tokio KDC handler on 64-bit Windows
      (usize to u32 conversion in reqwest.rs)
    • Add proper error handling using try_from instead of unsafe as casts
    • All changes pass cargo fmt and cargo clippy with strict pedantic lints

    Tested with: C:\Windows\System32\webauthn.dll

Documentation

  • Establish the MSRV policy (current is 1.89) (#1157) (c10e6ff16c)

    The MSRV is the oldest stable Rust release that is at least 6 months
    old, bounded by the Rust version available in Debian stable-backports
    and Fedora stable.

  • Add missing README.md to unblock crates.io publish (#1213) (6baf726c1a)

ironrdp-cliprdr-format

[0.2.0] - 2026-04-30

Documentation

  • Establish the MSRV policy (current is 1.89) (#1157) (c10e6ff16c)

    The MSRV is the oldest stable Rust release that is at least 6 months
    old, bounded by the Rust version available in Debian stable-backports
    and Fedora stable.

Refactor

  • [breaking] Enable unwrap_used clippy correctness lint (#965) (630525deae)

ironrdp-futures

[0.6.1] - 2026-04-30

Documentation

  • Establish the MSRV policy (current is 1.89) (#1157) (c10e6ff16c)

    The MSRV is the oldest stable Rust release that is at least 6 months
    old, bounded by the Rust version available in Debian stable-backports
    and Fedora stable.

ironrdp-rdpdr-native

[0.5.1] - 2026-04-30

Bug Fixes

  • Model CreateDisposition as enum instead of bitflags (#1145) (c4f87aa417)

    CreateDisposition values (FILE_SUPERSEDE through FILE_OVERWRITE_IF) are
    mutually exclusive integers 0 through 5, not combinable bit flags.
    Modeling them with the bitflags macro causes subtle correctness issues.

Documentation

  • Establish the MSRV policy (current is 1.89) (#1157) (c10e6ff16c)

    The MSRV is the oldest stable Rust release that is at least 6 months
    old, bounded by the Rust version available in Debian stable-backports
    and Fedora stable.

Build

ironrdp-str

[0.1.0] - 2026-04-30

Features

  • Add ironrdp-str crate with typed wire-aware RDP string primitives (#1159) (a67b1aace7)

    Introduces ironrdp-str, a new crate providing lazily-validated string
    types covering all RDP UTF-16LE field shapes:

    • FixedString<N>: fixed-size fields (e.g. clientName, fileName),
      zero-padded on encode, trailing-null stripped on decode.
    • PrefixedString<P, N>: length-prefixed fields with configurable
      LengthPrefix (CchU16, CchU32, CbU16) and NullTerminatorPolicy
      (NullCounted, NullUncounted, NoNull) type parameters.
    • UnframedString: externally-lengthed fields whose length comes from a
      sibling field in the containing message.
    • MultiSzString: MULTI_SZ string lists (e.g. HardwareIds in
      MS-RDPEUSB §2.2.4.2), with a u32 cch prefix counting all null
      terminators including the final sentinel.

    Key design invariant: wire bytes are stored as Vec<u16> and never
    eagerly converted to Rust strings, enabling single-allocation decode and
    zero-cost decode→encode passthrough for proxy use cases. Conversion is
    deferred to explicit to_native() / to_native_lossy() calls.

    Uses bytemuck for zero-copy LE→u16 reinterpretation on little-endian
    targets; falls back to per-element byte-swap on big-endian.


This PR was generated with release-plz.

@github-actions github-actions Bot force-pushed the release-plz/2026-04-09T06-06-06Z branch from 5be8311 to c119760 Compare April 9, 2026 06:06
@devolutionsbot devolutionsbot force-pushed the release-plz/2026-04-09T06-06-06Z branch from c119760 to e2c1012 Compare April 9, 2026 06:25
@github-actions github-actions Bot force-pushed the release-plz/2026-04-09T06-06-06Z branch from e2c1012 to ce6d5c0 Compare April 9, 2026 06:25
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Apr 9, 2026

Coverage Report 🤖 ⚙️

Past:
Total lines: 41048
Covered lines: 28131 (68.53%)

New:
Total lines: 41048
Covered lines: 28142 (68.56%)

Diff: +0.03%

[this comment will be updated automatically]

@devolutionsbot devolutionsbot force-pushed the release-plz/2026-04-09T06-06-06Z branch from ce6d5c0 to ad7b82e Compare April 9, 2026 13:18
@github-actions github-actions Bot force-pushed the release-plz/2026-04-09T06-06-06Z branch from ad7b82e to 2512218 Compare April 9, 2026 13:18
@devolutionsbot devolutionsbot force-pushed the release-plz/2026-04-09T06-06-06Z branch from 2512218 to 577b7ca Compare April 9, 2026 13:59
@github-actions github-actions Bot force-pushed the release-plz/2026-04-09T06-06-06Z branch from 577b7ca to 038ccf3 Compare April 9, 2026 13:59
@devolutionsbot devolutionsbot force-pushed the release-plz/2026-04-09T06-06-06Z branch from 038ccf3 to 8c6ce75 Compare April 10, 2026 10:43
@github-actions github-actions Bot force-pushed the release-plz/2026-04-09T06-06-06Z branch from 8c6ce75 to f413352 Compare April 10, 2026 10:43
@devolutionsbot devolutionsbot force-pushed the release-plz/2026-04-09T06-06-06Z branch from f413352 to 0b0ba7f Compare April 14, 2026 08:21
@github-actions github-actions Bot force-pushed the release-plz/2026-04-09T06-06-06Z branch from 0b0ba7f to 3a396ed Compare April 14, 2026 08:21
@devolutionsbot devolutionsbot force-pushed the release-plz/2026-04-09T06-06-06Z branch from 3a396ed to 1c3bd30 Compare April 14, 2026 08:42
@github-actions github-actions Bot force-pushed the release-plz/2026-04-09T06-06-06Z branch from 1c3bd30 to 400b1e8 Compare April 14, 2026 08:42
@devolutionsbot devolutionsbot force-pushed the release-plz/2026-04-09T06-06-06Z branch from 400b1e8 to 51d51aa Compare April 14, 2026 09:01
@github-actions github-actions Bot force-pushed the release-plz/2026-04-09T06-06-06Z branch from 51d51aa to 1475885 Compare April 14, 2026 09:01
@devolutionsbot devolutionsbot force-pushed the release-plz/2026-04-09T06-06-06Z branch from 1475885 to 4ba2691 Compare April 15, 2026 11:49
@github-actions github-actions Bot force-pushed the release-plz/2026-04-09T06-06-06Z branch from 4ba2691 to 238dc6e Compare April 15, 2026 11:49
@devolutionsbot devolutionsbot force-pushed the release-plz/2026-04-09T06-06-06Z branch from 238dc6e to 6123330 Compare April 21, 2026 02:25
@github-actions github-actions Bot force-pushed the release-plz/2026-04-09T06-06-06Z branch from 6123330 to d813c8c Compare April 21, 2026 02:25
@devolutionsbot devolutionsbot force-pushed the release-plz/2026-04-09T06-06-06Z branch from d813c8c to 08e9277 Compare April 21, 2026 03:12
@github-actions github-actions Bot force-pushed the release-plz/2026-04-09T06-06-06Z branch from 08e9277 to fe14aa1 Compare April 21, 2026 03:12
@devolutionsbot devolutionsbot force-pushed the release-plz/2026-04-09T06-06-06Z branch from fe14aa1 to 8e131a3 Compare April 21, 2026 15:26
@github-actions github-actions Bot force-pushed the release-plz/2026-04-09T06-06-06Z branch from 8e131a3 to fb262b8 Compare April 21, 2026 15:26
@devolutionsbot devolutionsbot force-pushed the release-plz/2026-04-09T06-06-06Z branch from fb262b8 to bc0cc54 Compare April 27, 2026 15:12
@github-actions github-actions Bot force-pushed the release-plz/2026-04-09T06-06-06Z branch from bc0cc54 to 861e6e4 Compare April 27, 2026 15:12
@devolutionsbot devolutionsbot force-pushed the release-plz/2026-04-09T06-06-06Z branch from 861e6e4 to 4fb1b5a Compare April 28, 2026 07:01
@github-actions github-actions Bot force-pushed the release-plz/2026-04-09T06-06-06Z branch from 4fb1b5a to be7e23c Compare April 28, 2026 07:01
@devolutionsbot devolutionsbot force-pushed the release-plz/2026-04-09T06-06-06Z branch from be7e23c to 2f4bfca Compare April 28, 2026 07:25
@github-actions github-actions Bot force-pushed the release-plz/2026-04-09T06-06-06Z branch from 2f4bfca to 6aa259d Compare April 28, 2026 07:26
@devolutionsbot devolutionsbot force-pushed the release-plz/2026-04-09T06-06-06Z branch from 6aa259d to c01a693 Compare April 28, 2026 07:28
@github-actions github-actions Bot force-pushed the release-plz/2026-04-09T06-06-06Z branch from c01a693 to 625edda Compare April 28, 2026 07:28
@devolutionsbot devolutionsbot force-pushed the release-plz/2026-04-09T06-06-06Z branch from 625edda to 6f855c8 Compare April 29, 2026 11:28
@github-actions github-actions Bot force-pushed the release-plz/2026-04-09T06-06-06Z branch from 6f855c8 to 9daa64e Compare April 29, 2026 11:28
@devolutionsbot devolutionsbot force-pushed the release-plz/2026-04-09T06-06-06Z branch from 9daa64e to 4790244 Compare April 29, 2026 11:36
@github-actions github-actions Bot force-pushed the release-plz/2026-04-09T06-06-06Z branch from 4790244 to 2b292a8 Compare April 29, 2026 11:37
@devolutionsbot devolutionsbot force-pushed the release-plz/2026-04-09T06-06-06Z branch from 2b292a8 to 3959cc2 Compare April 30, 2026 09:16
@github-actions github-actions Bot force-pushed the release-plz/2026-04-09T06-06-06Z branch from 3959cc2 to 992b012 Compare April 30, 2026 09:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant