Skip to content

chore(release): prepare for publishing - #2259

Merged
Benoît Cortier (CBenoit) merged 3 commits into
masterfrom
release-plz/2026-10-27T15-28-47Z
Oct 27, 2026
Merged

Benoît Cortier (CBenoit) merged 3 commits into
masterfrom
release-plz/2026-10-27T15-28-47Z

Conversation

@devolutionsbot

@devolutionsbot devolutionsbot commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

🤖 New release

  • iron-remote-desktop: 0.8.0 -> 0.8.1 (✓ API compatible changes)
  • ironrdp-core: 0.3.0 -> 0.3.1 (✓ API compatible changes)
  • ironrdp-pdu: 0.10.0 -> 0.11.0 (⚠ API breaking changes)
  • ironrdp-connector: 0.11.0 -> 0.12.0 (⚠ API breaking changes)
  • ironrdp-acceptor: 0.11.0 -> 0.11.1 (✓ API compatible changes)
  • ironrdp-cfg: 0.2.0 -> 0.3.0 (⚠ API breaking changes)
  • ironrdp-dvc: 0.9.0 -> 0.9.1 (✓ API compatible changes)
  • ironrdp-dvc-pipe-proxy: 0.6.0 -> 0.6.1 (✓ API compatible changes)
  • ironrdp-graphics: 0.10.0 -> 0.10.1 (✓ API compatible changes)
  • ironrdp-egfx: 0.4.0 -> 0.5.0 (✓ API compatible changes)
  • ironrdp-mstsgu: 0.0.2 -> 0.0.3 (✓ API compatible changes)
  • ironrdp-rdcleanpath: 0.3.0 -> 0.3.1 (✓ API compatible changes)
  • ironrdp-rdpdr: 0.8.0 -> 0.8.1 (✓ API compatible changes)
  • ironrdp-rdpeudp-tokio: 0.1.0 -> 0.2.0 (⚠ API breaking changes)
  • ironrdp-str: 0.2.0 -> 0.2.1 (✓ API compatible changes)
  • ironrdp-rdpeusb: 0.1.0 -> 0.2.0 (⚠ API breaking changes)
  • ironrdp-rdpsnd-native: 0.7.0 -> 0.8.0 (✓ API compatible changes)
  • ironrdp-session: 0.12.0 -> 0.13.0 (⚠ API breaking changes)
  • ironrdp-dvc-com-plugin: 0.2.0 -> 0.2.1 (✓ API compatible changes)
  • ironrdp-server: 0.13.0 -> 0.14.0 (⚠ API breaking changes)
  • ironrdp-rdpdr-native: 0.8.0 -> 0.8.1 (✓ API compatible changes)
  • ironrdp-svc: 0.9.0 -> 0.9.1
  • ironrdp-async: 0.11.0 -> 0.11.1
  • ironrdp-cliprdr: 0.8.0 -> 0.8.1
  • ironrdp-displaycontrol: 0.9.0 -> 0.9.1
  • ironrdp-echo: 0.5.0 -> 0.5.1
  • ironrdp-rdpsnd: 0.10.0 -> 0.10.1
  • ironrdp-rdpeai: 0.1.0 -> 0.1.1
  • ironrdp-rdpegt: 0.1.0 -> 0.1.1
  • ironrdp-rdpei: 0.2.0 -> 0.2.1
  • ironrdp-rdpel: 0.0.1 -> 0.0.2
  • ironrdp-rdpevor: 0.1.0 -> 0.1.1
  • ironrdp-tokio: 0.11.0 -> 0.11.1
  • ironrdp-vmconnect: 0.1.0 -> 0.1.1
  • ironrdp-egfx-native: 0.1.0 -> 0.1.1
  • ironrdp-rdpecam: 0.1.0 -> 0.1.1
  • ironrdp-rdpewa: 0.1.0 -> 0.1.1
  • ironrdp-input: 0.8.0 -> 0.8.1
  • ironrdp-blocking: 0.11.0 -> 0.11.1
  • ironrdp-rpc: 0.1.0 -> 0.1.1

⚠ ironrdp-pdu breaking changes

--- failure enum_repr_int_removed: enum repr(u*)/repr(i*) removed ---

Description:
repr(u*) or repr(i*) was removed from an enum. This can cause its memory representation to change, breaking FFI use cases.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#repr-int-enum-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.47.0/src/lints/enum_repr_int_removed.ron

Failed in:
  enum LogonErrorNotificationType in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-pdu/src/rdp/session_info/logon_extended.rs:251

--- failure enum_variant_added: enum variant added on exhaustive enum ---

Description:
A publicly-visible enum without #[non_exhaustive] has a new variant.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#enum-variant-new
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.47.0/src/lints/enum_variant_added.ron

Failed in:
  variant LogonErrorNotificationType:NtStatus in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-pdu/src/rdp/session_info/logon_extended.rs:269

⚠ ironrdp-connector breaking changes

--- failure constructible_struct_adds_field: externally-constructible struct adds field ---

Description:
A pub struct constructible with a struct literal has a new pub field. Existing struct literals must be updated to include the new field.
        ref: https://doc.rust-lang.org/reference/expressions/struct-expr.html
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.47.0/src/lints/constructible_struct_adds_field.ron

Failed in:
  field Config.desktop_physical_size in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-connector/src/lib.rs:166
  field Config.desktop_orientation in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-connector/src/lib.rs:171
  field Config.device_scale_factor in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-connector/src/lib.rs:177
  field Config.monitor_extended_layout in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-connector/src/lib.rs:182
  field Config.relative_mouse_input in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-connector/src/lib.rs:190

--- failure enum_no_repr_variant_discriminant_changed: enum variant had its discriminant change value ---

Description:
The enum's variant had its discriminant value change. This breaks downstream code that used its value via a numeric cast like `as isize`.
        ref: https://doc.rust-lang.org/reference/items/enumerations.html#assigning-discriminant-values
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.47.0/src/lints/enum_no_repr_variant_discriminant_changed.ron

Failed in:
  variant ClientConnectorState::BasicSettingsExchangeSendInitial 5 -> 8 in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-connector/src/connection.rs:255
  variant ClientConnectorState::BasicSettingsExchangeWaitResponse 6 -> 9 in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-connector/src/connection.rs:258
  variant ClientConnectorState::ChannelConnection 7 -> 10 in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-connector/src/connection.rs:261
  variant ClientConnectorState::SecureSettingsExchange 8 -> 11 in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-connector/src/connection.rs:265
  variant ClientConnectorState::ConnectTimeAutoDetection 9 -> 12 in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-connector/src/connection.rs:269
  variant ClientConnectorState::LicensingExchange 10 -> 13 in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-connector/src/connection.rs:273
  variant ClientConnectorState::MultitransportBootstrapping 11 -> 14 in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-connector/src/connection.rs:287
  variant ClientConnectorState::MultitransportPending 12 -> 15 in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-connector/src/connection.rs:315
  variant ClientConnectorState::CapabilitiesExchange 13 -> 16 in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-connector/src/connection.rs:333
  variant ClientConnectorState::ConnectionFinalization 14 -> 17 in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-connector/src/connection.rs:336
  variant ClientConnectorState::Connected 15 -> 18 in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-connector/src/connection.rs:339
  variant ClientConnectorState::Redirected 16 -> 19 in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-connector/src/connection.rs:345

⚠ ironrdp-cfg breaking changes

--- failure trait_method_added: pub trait method added ---

Description:
A non-sealed public trait added a new method without a default implementation, which breaks downstream implementations of the trait
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#trait-new-item-no-default
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.47.0/src/lints/trait_method_added.ron

Failed in:
  trait method ironrdp_cfg::PropertySetExt::usb_devices_to_redirect in file /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-cfg/src/lib.rs:706
  trait method ironrdp_cfg::PropertySetExt::set_usb_devices_to_redirect in file /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-cfg/src/lib.rs:708
  trait method ironrdp_cfg::PropertySetExt::clear_usb_devices_to_redirect in file /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-cfg/src/lib.rs:710

⚠ ironrdp-rdpeudp-tokio breaking changes

--- failure auto_trait_impl_removed: auto trait no longer implemented ---

Description:
A public type has stopped implementing one or more auto traits. This can break downstream code that depends on the traits being implemented.
        ref: https://doc.rust-lang.org/reference/special-types-and-traits.html#auto-traits
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.47.0/src/lints/auto_trait_impl_removed.ron

Failed in:
  type MultitransportBootstrap is no longer UnwindSafe, in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-rdpeudp-tokio/src/multitransport.rs:61
  type MultitransportBootstrap is no longer RefUnwindSafe, in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-rdpeudp-tokio/src/multitransport.rs:61
  type MultitransportBootstrap is no longer UnwindSafe, in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-rdpeudp-tokio/src/multitransport.rs:61
  type MultitransportBootstrap is no longer RefUnwindSafe, in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-rdpeudp-tokio/src/multitransport.rs:61
  type UdpTransport is no longer UnwindSafe, in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-rdpeudp-tokio/src/transport.rs:306
  type UdpTransport is no longer RefUnwindSafe, in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-rdpeudp-tokio/src/transport.rs:306
  type UdpTransport is no longer UnwindSafe, in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-rdpeudp-tokio/src/transport.rs:306
  type UdpTransport is no longer RefUnwindSafe, in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-rdpeudp-tokio/src/transport.rs:306

⚠ ironrdp-rdpeusb breaking changes

--- failure constructible_struct_adds_field: externally-constructible struct adds field ---

Description:
A pub struct constructible with a struct literal has a new pub field. Existing struct literals must be updated to include the new field.
        ref: https://doc.rust-lang.org/reference/expressions/struct-expr.html
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.47.0/src/lints/constructible_struct_adds_field.ron

Failed in:
  field DeviceInfo.isochronous in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-rdpeusb/src/io/device.rs:76
  field DeviceInfo.isochronous in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-rdpeusb/src/io/device.rs:76

⚠ ironrdp-session breaking changes

--- failure enum_variant_added: enum variant added on exhaustive enum ---

Description:
A publicly-visible enum without #[non_exhaustive] has a new variant.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#enum-variant-new
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.47.0/src/lints/enum_variant_added.ron

Failed in:
  variant ActiveStageOutput:WindowSurfaceUpdates in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-session/src/active_stage.rs:932
  variant ActiveStageOutput:SessionId in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-session/src/active_stage.rs:947
  variant ActiveStageOutput:LogonErrors in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-session/src/active_stage.rs:982
  variant ProcessorOutput:SessionId in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-session/src/x224/mod.rs:53
  variant ProcessorOutput:LogonErrors in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-session/src/x224/mod.rs:85

⚠ ironrdp-server breaking changes

--- failure enum_marked_non_exhaustive: enum marked #[non_exhaustive] ---

Description:
A public enum has been marked #[non_exhaustive]. Pattern-matching on it outside of its crate must now include a wildcard pattern like `_`, or it will fail to compile.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#attr-adding-non-exhaustive
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.47.0/src/lints/enum_marked_non_exhaustive.ron

Failed in:
  enum MouseEvent in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-server/src/handler.rs:28

--- failure enum_no_repr_variant_discriminant_changed: enum variant had its discriminant change value ---

Description:
The enum's variant had its discriminant value change. This breaks downstream code that used its value via a numeric cast like `as isize`.
        ref: https://doc.rust-lang.org/reference/items/enumerations.html#assigning-discriminant-values
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.47.0/src/lints/enum_no_repr_variant_discriminant_changed.ron

Failed in:
  variant MouseEvent::VerticalScroll 11 -> 3 in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-server/src/handler.rs:52
  variant MouseEvent::Scroll 12 -> 5 in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-server/src/handler.rs:58
  variant MouseEvent::RelMove 13 -> 6 in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-server/src/handler.rs:62

--- failure enum_variant_added: enum variant added on exhaustive enum ---

Description:
A publicly-visible enum without #[non_exhaustive] has a new variant.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#enum-variant-new
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.47.0/src/lints/enum_variant_added.ron

Failed in:
  variant DisplayUpdate:LargePointer in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-server/src/display.rs:37
  variant ServerEvent:EvictedByOtherConnection in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-server/src/server.rs:1438
  variant ServerEvent:Disconnect in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-server/src/server.rs:1441
  variant ServerEvent:Redirect in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-server/src/server.rs:1444
  variant ServerEvent:Rdpdr in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-server/src/server.rs:1447
  variant ServerEvent:Rdpeai in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-server/src/server.rs:1448
  variant ServerEvent:SetAutoReconnectCookie in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-server/src/server.rs:1452
  variant ServerEvent:Usb in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-server/src/server.rs:1459

--- failure enum_variant_missing: pub enum variant removed or renamed ---

Description:
A publicly-visible enum has at least one variant that is no longer available under its prior name. It may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.47.0/src/lints/enum_variant_missing.ron

Failed in:
  variant MouseEvent::RightPressed, previously in file /tmp/.tmpcb5feB/ironrdp-server/src/handler.rs:29
  variant MouseEvent::RightReleased, previously in file /tmp/.tmpcb5feB/ironrdp-server/src/handler.rs:30
  variant MouseEvent::LeftPressed, previously in file /tmp/.tmpcb5feB/ironrdp-server/src/handler.rs:31
  variant MouseEvent::LeftReleased, previously in file /tmp/.tmpcb5feB/ironrdp-server/src/handler.rs:32
  variant MouseEvent::MiddlePressed, previously in file /tmp/.tmpcb5feB/ironrdp-server/src/handler.rs:33
  variant MouseEvent::MiddleReleased, previously in file /tmp/.tmpcb5feB/ironrdp-server/src/handler.rs:34
  variant MouseEvent::Button4Pressed, previously in file /tmp/.tmpcb5feB/ironrdp-server/src/handler.rs:35
  variant MouseEvent::Button4Released, previously in file /tmp/.tmpcb5feB/ironrdp-server/src/handler.rs:36
  variant MouseEvent::Button5Pressed, previously in file /tmp/.tmpcb5feB/ironrdp-server/src/handler.rs:37
  variant MouseEvent::Button5Released, previously in file /tmp/.tmpcb5feB/ironrdp-server/src/handler.rs:38

--- failure inherent_method_missing: pub method removed or renamed ---

Description:
A publicly-visible method or associated fn is no longer available under its prior name. It may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.47.0/src/lints/inherent_method_missing.ron

Failed in:
  RdpServer::display_suppressed_handle, previously in file /tmp/.tmpcb5feB/ironrdp-server/src/server.rs:618
  RdpServer::autodetect_rtt_handle, previously in file /tmp/.tmpcb5feB/ironrdp-server/src/server.rs:628
  RdpServer::rtt_snapshot, previously in file /tmp/.tmpcb5feB/ironrdp-server/src/server.rs:653
  RdpServer::gfx_handle, previously in file /tmp/.tmpcb5feB/ironrdp-server/src/server.rs:664
  RdpServer::get_svc_processor, previously in file /tmp/.tmpcb5feB/ironrdp-server/src/server.rs:999
  RdpServer::get_channel_id_by_type, previously in file /tmp/.tmpcb5feB/ironrdp-server/src/server.rs:1005

--- failure method_parameter_count_changed: pub method parameter count changed ---

Description:
A publicly-visible method now takes a different number of parameters, not counting the receiver (self) parameter.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#fn-change-arity
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.47.0/src/lints/method_parameter_count_changed.ron

Failed in:
  ironrdp_server::autodetect::AutoDetectManager::send_rtt_request takes 0 parameters in /tmp/.tmpcb5feB/ironrdp-server/src/autodetect.rs:46, but now takes 1 parameters in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-server/src/autodetect.rs:168
  ironrdp_server::autodetect::AutoDetectManager::handle_response takes 1 parameters in /tmp/.tmpcb5feB/ironrdp-server/src/autodetect.rs:62, but now takes 2 parameters in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-server/src/autodetect.rs:345
  ironrdp_server::autodetect::AutoDetectManager::expire_stale_probes takes 1 parameters in /tmp/.tmpcb5feB/ironrdp-server/src/autodetect.rs:110, but now takes 2 parameters in /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-server/src/autodetect.rs:454

--- failure trait_method_parameter_count_changed: pub trait method parameter count changed ---

Description:
A trait method now takes a different number of parameters.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#trait-item-signature
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.47.0/src/lints/trait_method_parameter_count_changed.ron

Failed in:
  RdpServerDisplay::updates now takes 1 instead of 0 parameters, in file /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-server/src/display.rs:397
  GfxServerFactory::build_gfx_handler now takes 1 instead of 0 parameters, in file /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-server/src/gfx.rs:45
  GfxServerFactory::build_server_with_handle now takes 1 instead of 0 parameters, in file /tmp/.tmpjXxtMO/IronRDP/crates/ironrdp-server/src/gfx.rs:54
Changelog

iron-remote-desktop

[0.8.1] - 2026-10-27

Features

  • Add reason error codes (#2127) (0c7e3abfb3)

    An RDCleanPath error PDU carries a general error code next to an HTTP
    status, WSA error or TLS alert, so a client cannot tell why a proxy
    rejected a connection: an expired credential and a misconfigured one
    both arrive as HTTP 401.

    Split the open error_code space into ranges, specified in the crate
    README:

    • 100 to 16383: standard reasons, for conditions any client can explain
      without knowing which proxy it talks to. This adds EXPIRED_ERROR_CODE,
      NOT_YET_VALID_ERROR_CODE, REVOKED_ERROR_CODE,
      TARGET_UNREACHABLE_ERROR_CODE, DNS_RESOLUTION_FAILED_ERROR_CODE and
      TLS_HANDSHAKE_FAILED_ERROR_CODE (100 to 105), which Display
      describes.
    • 16384 to 32767 (IMPLEMENTATION_SPECIFIC_ERROR_CODES): reasons each
      proxy defines for checks tied to its own credential format or topology.
      IronRDP never assigns these, and a client interprets them only when it
      knows which proxy it talks to.
    • 32768 and above stay reserved, so that independent implementations
      storing the code as a signed 16-bit integer can represent every code in
      use.

    The web client exposes the code as RDCleanPathDetails.errorCode, and
    @devolutions/iron-remote-desktop-rdp exports the standard codes as
    RDCleanPathErrorCode.

    The reason travels in the existing error_code field, not in a new one.
    A new error field would follow the last one, [3], and IronRDP-based
    peers decode RDCleanPath with der's derived decoder, which rejects
    unknown fields at the end of a SEQUENCE with TrailingData despite the
    context-specific tags: deployed IronRDP clients would fail to decode
    error PDUs carrying it. Deployed IronRDP clients decode any code, show
    an unknown one as an unknown error, and still read the HTTP status, WSA
    error and TLS alert, which proxies keep sending alongside the reason.
    The native client and the FFI already treat any code other than the
    negotiation one as a general error, so they need no change.

    Proxies can send these codes with any version, since error_code is a
    plain integer. The constants and the web client's errorCode need
    releases of ironrdp-rdcleanpath and the web packages; the Devolutions
    Gateway follow-up, which will use the standard codes and its own
    implementation-specific ones, needs the crates.io release. That release
    also carries the der 0.8 upgrade already on master, which is breaking
    because the crate re-exports der.

    🤖 Generated with Claude Code

ironrdp-core

[0.3.1] - 2026-10-27

Bug Fixes

  • Check remaining length when skipping padding and reading client core data (#2130) (b69cda22ec)

ironrdp-pdu

[0.11.0] - 2026-10-27

Security

  • Support Entra RDS AAD session authentication (#2248) (c790e6d4f2)

    Add MS-RDPBCGR RDS AAD (SecurityProtocol::RDSAAD) negotiation and
    NUL-terminated JSON nonce, assertion, and authentication-result framing
    to ironrdp-connector, along with
    FailureCode::ENTRA_AUTH_REQUIRED_BY_SERVER in ironrdp-pdu.

    Expose the optional entra-auth feature in ironrdp-client
    (client-entra-auth in ironrdp) to acquire or accept
    proof-of-possession RDP access tokens, fetch fresh AAD challenge nonces,
    sign compact JWS assertions with RSA-256 and req_cnf key binding, and
    enforce strict TLS validation without CredSSP or password fallback.

ironrdp-connector

[0.12.0] - 2026-10-27

Security

  • Support Entra RDS AAD session authentication (#2248) (c790e6d4f2)

    Add MS-RDPBCGR RDS AAD (SecurityProtocol::RDSAAD) negotiation and
    NUL-terminated JSON nonce, assertion, and authentication-result framing
    to ironrdp-connector, along with
    FailureCode::ENTRA_AUTH_REQUIRED_BY_SERVER in ironrdp-pdu.

    Expose the optional entra-auth feature in ironrdp-client
    (client-entra-auth in ironrdp) to acquire or accept
    proof-of-possession RDP access tokens, fetch fresh AAD challenge nonces,
    sign compact JWS assertions with RSA-256 and req_cnf key binding, and
    enforce strict TLS validation without CredSSP or password fallback.

ironrdp-acceptor

[0.11.1] - 2026-10-27

Bug Fixes

  • Send RDP as the Demand Active source descriptor (#2119) (d921607fc8)

    The server Demand Active PDU used an empty source descriptor, which
    DemandActive encodes as a single NUL byte. Jump Desktop rejects it
    (bad packet - source Descriptor not set to RDP) and drops the
    connection right after the TLS upgrade.

    Send RDP instead. It encodes as RDP\0, the same four bytes the
    FreeRDP server writes, and the value already used by the server Demand
    Active fixture in ironrdp-testsuite-core.

  • Error on steps after the acceptor ends (#2231) (e51dcfee4a)

    Stepping an Acceptor, a ChannelConnectionSequence or a
    FinalizationSequence after a failed step, or after it finished,
    reached unreachable!() and panicked. Both states are reachable through
    the public API: a failed step leaves the sequence consumed, and the
    accepted or finished state stays until the caller moves on.

    Each sequence now returns an error in those states, and a finished one
    stays finished, so an accepted acceptor still yields its result. The
    type docs state this. The client connector already answers the same
    misuse with an error.

  • Send a zero pduSource in Monitor Layout (#2230) (3ca12ee636)

    MS-RDPBCGR 2.2.12.1 requires the pduSource field of the Monitor Layout
    PDU to be zero, but the acceptor wrapped it with the I/O channel ID like
    the finalization PDUs. The acceptor now passes zero for this PDU only;
    the share data helper takes the pduSource it writes instead of naming it
    after the I/O channel.

ironrdp-cfg

[0.3.0] - 2026-10-27

Features

  • Redirect USB devices over URBDRC with nusb and RemoteFX USB backends (#2181) (35247071a3)

    Adds host-device backends for the MS-RDPEUSB (URBDRC) client and wires
    them into ironrdp-client and the viewer, so local USB devices can be
    redirected to the server. On Windows it redirects USB the way mstsc
    does, through the in-box RemoteFX USB drivers, when policy allows it,
    and falls back to nusb otherwise. It also fixes three interop bugs in
    ironrdp-rdpeusb found by redirecting a device to Windows Server 2025.

ironrdp-dvc

[0.9.1] - 2026-10-27

Features

  • Redirect USB devices over URBDRC with nusb and RemoteFX USB backends (#2181) (35247071a3)

    Adds host-device backends for the MS-RDPEUSB (URBDRC) client and wires
    them into ironrdp-client and the viewer, so local USB devices can be
    redirected to the server. On Windows it redirects USB the way mstsc
    does, through the in-box RemoteFX USB drivers, when policy allows it,
    and falls back to nusb otherwise. It also fixes three interop bugs in
    ironrdp-rdpeusb found by redirecting a device to Windows Server 2025.

ironrdp-dvc-pipe-proxy

[0.6.1] - 2026-10-27

Build

  • Mark exposed dependencies as public (#2213) (405e6576ba)

    These crates expose types or traits from these dependencies in their
    public API, so a breaking release of the dependency requires a breaking
    release of the crate:

    • ironrdp-str: ironrdp-core, whose Encode and DecodeOwned traits
      the string types implement.
    • ironrdp-dvc-pipe-proxy: ironrdp-dvc, through DvcNamedPipeProxy's
      DvcProcessor implementation.
    • ironrdp-dvc-com-plugin: ironrdp-dvc, plus ironrdp-pdu and
      ironrdp-svc through the PduResult return type and the SvcMessage
      callback bound of load_dvc_plugin.
    • ironrdp-mstsgu: ironrdp-error, whose Error<GwErrorKind> the
      GwClient methods return.

ironrdp-graphics

[0.10.1] - 2026-10-27

Bug Fixes

  • Reject RLGR3 values larger than their remainder (#2132) (e31f2b89ad)

    RLGR3's code_remainder - val1 (rlgr.rs) overflowed when the stream
    set val1 larger: a panic in debug builds, a garbage value in release.
    It's now an InvalidIntegralConversion error. FreeRDP rejects it too.

  • Keep Progressive tile state per surface (#2117) (00820f6e47)

    ProgressiveDecoder kept its tile grid and the set of tiles sent in the
    current RDPGFX frame per (surface_id, codec_context_id). Windows moves
    a surface to a new codec context mid-session, deletes the old one with
    DeleteEncodingContext, and keeps refining the same tiles under the new
    id. Two things then went wrong without any error:

    • A REGION under the new context that relies on a tile sent earlier in
      the same frame under the old context (MS-RDPEGFX 2.2.4.2.1.5 allows
      REGION rectangles to be covered by tiles from an earlier REGION in the
      frame) found no tile in its own set and painted nothing.
    • A TILE_UPGRADE under the new context for a tile whose first pass
      arrived under the old context found a fresh tile with pass == 0 and
      was skipped.

    On a Windows 11 host this left vertical 64-pixel columns of earlier
    animation frames on screen (swiping cards in a browser) until something
    repainted the area, such as scrolling.

ironrdp-egfx

[0.5.0] - 2026-10-27

Features

  • [breaking] Composite surfaces mapped to RemoteApp windows (#2197) (6e54d5e9ec)

    With the graphics pipeline in a RemoteApp session, Windows servers
    present each application window from its own surface through
    MapSurfaceToWindow or MapSurfaceToScaledWindow (MS-RDPEGFX 2.2.2.20 and
    2.2.2.23). The client only forwarded these PDUs to handler callbacks, so
    nothing those surfaces drew reached the windows.

    The compositor now records window mappings and, at each EndFrame,
    materializes dirty regions of window-mapped surfaces into window
    updates: the RAIL window ID, the presented size and the changed region
    in window coordinates, scaled when the server asks for a different
    target size. GraphicsPipelineClient::drain_window_updates exposes them,
    the session emits ActiveStageOutput::WindowSurfaceUpdates and the client
    forwards RdpOutputEvent::WindowSurfaceUpdates. A mapping the client
    cannot present, such as a mapped area larger than its surface, is
    ignored and the surface keeps its previous mapping; FreeRDP also refuses
    oversized mappings.

    🤖 Generated with Claude Code

Bug Fixes

  • Keep Progressive tile state per surface (#2117) (00820f6e47)

    ProgressiveDecoder kept its tile grid and the set of tiles sent in the
    current RDPGFX frame per (surface_id, codec_context_id). Windows moves
    a surface to a new codec context mid-session, deletes the old one with
    DeleteEncodingContext, and keeps refining the same tiles under the new
    id. Two things then went wrong without any error:

    • A REGION under the new context that relies on a tile sent earlier in
      the same frame under the old context (MS-RDPEGFX 2.2.4.2.1.5 allows
      REGION rectangles to be covered by tiles from an earlier REGION in the
      frame) found no tile in its own set and painted nothing.
    • A TILE_UPGRADE under the new context for a tile whose first pass
      arrived under the old context found a fresh tile with pass == 0 and
      was skipped.

    On a Windows 11 host this left vertical 64-pixel columns of earlier
    animation frames on screen (swiping cards in a browser) until something
    repainted the area, such as scrolling.

ironrdp-mstsgu

[0.0.3] - 2026-10-27

Build

  • Mark exposed dependencies as public (#2213) (405e6576ba)

    These crates expose types or traits from these dependencies in their
    public API, so a breaking release of the dependency requires a breaking
    release of the crate:

    • ironrdp-str: ironrdp-core, whose Encode and DecodeOwned traits
      the string types implement.
    • ironrdp-dvc-pipe-proxy: ironrdp-dvc, through DvcNamedPipeProxy's
      DvcProcessor implementation.
    • ironrdp-dvc-com-plugin: ironrdp-dvc, plus ironrdp-pdu and
      ironrdp-svc through the PduResult return type and the SvcMessage
      callback bound of load_dvc_plugin.
    • ironrdp-mstsgu: ironrdp-error, whose Error<GwErrorKind> the
      GwClient methods return.

ironrdp-rdcleanpath

[0.3.1] - 2026-10-27

Features

  • Add reason error codes (#2127) (0c7e3abfb3)

    An RDCleanPath error PDU carries a general error code next to an HTTP
    status, WSA error or TLS alert, so a client cannot tell why a proxy
    rejected a connection: an expired credential and a misconfigured one
    both arrive as HTTP 401.

    Split the open error_code space into ranges, specified in the crate
    README:

    • 100 to 16383: standard reasons, for conditions any client can explain
      without knowing which proxy it talks to. This adds EXPIRED_ERROR_CODE,
      NOT_YET_VALID_ERROR_CODE, REVOKED_ERROR_CODE,
      TARGET_UNREACHABLE_ERROR_CODE, DNS_RESOLUTION_FAILED_ERROR_CODE and
      TLS_HANDSHAKE_FAILED_ERROR_CODE (100 to 105), which Display
      describes.
    • 16384 to 32767 (IMPLEMENTATION_SPECIFIC_ERROR_CODES): reasons each
      proxy defines for checks tied to its own credential format or topology.
      IronRDP never assigns these, and a client interprets them only when it
      knows which proxy it talks to.
    • 32768 and above stay reserved, so that independent implementations
      storing the code as a signed 16-bit integer can represent every code in
      use.

    The web client exposes the code as RDCleanPathDetails.errorCode, and
    @devolutions/iron-remote-desktop-rdp exports the standard codes as
    RDCleanPathErrorCode.

    The reason travels in the existing error_code field, not in a new one.
    A new error field would follow the last one, [3], and IronRDP-based
    peers decode RDCleanPath with der's derived decoder, which rejects
    unknown fields at the end of a SEQUENCE with TrailingData despite the
    context-specific tags: deployed IronRDP clients would fail to decode
    error PDUs carrying it. Deployed IronRDP clients decode any code, show
    an unknown one as an unknown error, and still read the HTTP status, WSA
    error and TLS alert, which proxies keep sending alongside the reason.
    The native client and the FFI already treat any code other than the
    negotiation one as a general error, so they need no change.

    Proxies can send these codes with any version, since error_code is a
    plain integer. The constants and the web client's errorCode need
    releases of ironrdp-rdcleanpath and the web packages; the Devolutions
    Gateway follow-up, which will use the standard codes and its own
    implementation-specific ones, needs the crates.io release. That release
    also carries the der 0.8 upgrade already on master, which is breaking
    because the crate re-exports der.

    🤖 Generated with Claude Code

ironrdp-rdpdr

[0.8.1] - 2026-10-27

Bug Fixes

  • Check remaining length when skipping padding and reading client core data (#2130) (b69cda22ec)

ironrdp-rdpeudp-tokio

[0.2.0] - 2026-10-27

Features

  • Support STUN and ICE candidate gathering (#2245) (79343b26cb)

    Add a standalone RFC 8489 STUN Binding probe and an optional ice
    feature to ironrdp-rdpeudp-tokio for UDP ICE candidate gathering,
    connectivity checks, nominated-pair selection, and UDP TURN relay
    transport beneath the existing RDPEUDP2, TLS, and RDPEMT stack.

    Expose connect_udp_with_socket, gather_ice_candidates,
    connect_udp_with_ice, accept_udp_with_ice, and
    MultitransportBootstrap::connect_with_ice while keeping the default
    direct connect_udp path unchanged.

ironrdp-str

[0.2.1] - 2026-10-27

Build

  • Mark exposed dependencies as public (#2213) (405e6576ba)

    These crates expose types or traits from these dependencies in their
    public API, so a breaking release of the dependency requires a breaking
    release of the crate:

    • ironrdp-str: ironrdp-core, whose Encode and DecodeOwned traits
      the string types implement.
    • ironrdp-dvc-pipe-proxy: ironrdp-dvc, through DvcNamedPipeProxy's
      DvcProcessor implementation.
    • ironrdp-dvc-com-plugin: ironrdp-dvc, plus ironrdp-pdu and
      ironrdp-svc through the PduResult return type and the SvcMessage
      callback bound of load_dvc_plugin.
    • ironrdp-mstsgu: ironrdp-error, whose Error<GwErrorKind> the
      GwClient methods return.

ironrdp-rdpeusb

[0.2.0] - 2026-10-27

Features

  • Redirect USB devices over URBDRC with nusb and RemoteFX USB backends (#2181) (35247071a3)

    Adds host-device backends for the MS-RDPEUSB (URBDRC) client and wires
    them into ironrdp-client and the viewer, so local USB devices can be
    redirected to the server. On Windows it redirects USB the way mstsc
    does, through the in-box RemoteFX USB drivers, when policy allows it,
    and falls back to nusb otherwise. It also fixes three interop bugs in
    ironrdp-rdpeusb found by redirecting a device to Windows Server 2025.

ironrdp-rdpsnd-native

[0.8.0] - 2026-10-27

Features

  • Harden Windows client playback path (#1648) (2d9a9bf114)

    Keep client format order for wFormatNo, play pre-v8 Wave PDUs, and apply
    volume on a broader CPAL PCM offer so ActiveX mode 0 can redirect remote
    audio reliably.

    Also fix clippy noise in the RDPSND client suite and keep interleaved
    volume L/R phase stable across wave blocks. Volume scaling is a simple
    amplitude map, not a logarithmic MS-RDPEA model.

  • Wire MS-RDPEAI capture into Windows client and ActiveX (#1642) (205fe038cc)

    Add the client MS-RDPEAI capture path on top of hardened RDPSND
    playback: connector CFG + static channel wiring, CPAL PCM capture
    backend, ironrdp-client --audio-capture, and ActiveX
    AudioCaptureRedirectionMode.

    PCM capture only accepts encode formats that match the Open capture
    stream, rejects non-16-bit capture (Data PDU size contract), and gates
    the capture backend behind ironrdp-rdpsnd-native/capture.

    Depends on feat(rdpsnd): harden Windows client playback path #1648 (playback).

  • [breaking] Compressed audio over AUDIO_PLAYBACK_DVC (#2203) (45b67591e9)

    Windows 8 and later servers stream audio over the AUDIO_PLAYBACK_DVC and
    AUDIO_PLAYBACK_LOSSY_DVC dynamic channels, preferring AAC or ADPCM on
    constrained links, but IronRDP declined those channels and could only
    play PCM and Opus. Wave Confirm PDUs echoed the server timestamp,
    playback dropped audio when its fixed 500 ms ring filled, and devices
    could not be chosen.

    • ironrdp-rdpsnd gains a pure codec module (PCM, G.711 A-law and
      µ-law, IMA and Microsoft ADPCM decoders and encoders, bit-exact with the
      Windows ACM codecs), an RdpsndDvc processor whose RdpsndDvcState
      lets both dynamic channels share one negotiation (Windows negotiates on
      the reliable channel and sends AAC on the lossy one), the UDP Wave
      datagrams, and a playout jitter-buffer policy. Wave Confirm PDUs
      report the hold time plus the handler's playback latency, and handlers
      pick the formats to advertise from the server's list.
    • The CPAL backend decodes every offered format it can, including AAC
      through Media Foundation on Windows, plays through the jitter buffer
      with a configurable latency target, reports buffered plus device
      latency, follows the default device or a selected one, and maps the
      server volume to the Windows audio session. Microphone capture encodes
      to PCM, G.711 or ADPCM and selects its device.
    • ironrdp-client registers the dynamic channels next to the static one
      on a shared backend and adds AudioConfig (ironrdp_audiooutputdevice,
      ironrdp_audioinputdevice, ironrdp_audiolatency); the viewer adds
      --audio-output-device, --audio-input-device, --audio-latency and
      --list-audio-devices.

Bug Fixes

ironrdp-session

[0.13.0] - 2026-10-27

Features

  • [breaking] Composite surfaces mapped to RemoteApp windows (#2197) (6e54d5e9ec)

    With the graphics pipeline in a RemoteApp session, Windows servers
    present each application window from its own surface through
    MapSurfaceToWindow or MapSurfaceToScaledWindow (MS-RDPEGFX 2.2.2.20 and
    2.2.2.23). The client only forwarded these PDUs to handler callbacks, so
    nothing those surfaces drew reached the windows.

    The compositor now records window mappings and, at each EndFrame,
    materializes dirty regions of window-mapped surfaces into window
    updates: the RAIL window ID, the presented size and the changed region
    in window coordinates, scaled when the server asks for a different
    target size. GraphicsPipelineClient::drain_window_updates exposes them,
    the session emits ActiveStageOutput::WindowSurfaceUpdates and the client
    forwards RdpOutputEvent::WindowSurfaceUpdates. A mapping the client
    cannot present, such as a mapped area larger than its surface, is
    ignored and the surface keeps its previous mapping; FreeRDP also refuses
    oversized mappings.

    🤖 Generated with Claude Code

  • [breaking] Broaden mstscax compatibility (#2211) (98413f16cc)

    Hosts written against Microsoft's mstscax control (RDM, MsRdpEx,
    scripting hosts, mstsc-style shells) still hit members that IronRDP's
    ActiveX control left unimplemented. A comparison against mstscax.dll
    10.0.26100 (its embedded MSTSCLib type library, AdvancedSettings vtable
    and property handlers) identified the most-used gaps; this change closes
    six of them.

    Late-bound Automation: every published MSTSCLib member of the control
    and of the Advanced, Secured, Transport and RemoteProgram settings
    objects is reachable through IDispatch by name and DISPID, with
    arguments coerced to the published Automation types and calls routed to
    the existing vtable slots through DispCallFunc. The control also
    implements IProvideClassInfo2, IQuickActivate and
    IPersistPropertyBag/IPersistPropertyBag2. No type library is created
    or registered, so GetTypeInfo still returns E_NOTIMPL.

  • Expose EGFX compositing (#2120) (c25dba154b)

    ActiveStage composites the EGFX output after each PDU. That only works
    when the GraphicsPipelineClient lives inside it.

    Why run it somewhere else:

    • H.264 decoding can be slow (a busy GPU).
    • While it decodes, the session loop doesn't read the socket.
    • Audio waits behind video, and GNOME Remote Desktop drops audio older
      than 50 ms.
    • Running the pipeline on its own thread fixes that, but then nothing
      composites its output: the reset and composite steps were private.

    What this adds:

    • composite_graphics_pipeline(gfx, image): follows a pending
      ResetGraphics, applies the finished output regions, and takes the
      RemoteApp window regions.
    • CompositedGraphics: whether it reset, the union region, each region,
      and the window updates.
    • ActiveStage calls it too, so its behavior doesn't change.
    • ironrdp-egfx is now a # public dependency, since
      GraphicsPipelineClient is in the signature. CompositedGraphics is
      #[non_exhaustive].

    Using it off the session loop, the caller also:

    • registers a channel processor named ironrdp_egfx::CHANNEL_NAME that
      forwards each message to the pipeline;
    • sends the pipeline's replies (capabilities, frame acks) through the
      tunnel dvc_tunnel_for_channel names, or over TCP with
      ActiveStage::encode_dvc_messages;
    • shares the image with the session under a lock (bitmaps and the
      pointer write to it too);
    • paints the window updates into the RemoteApp windows they name, as
      ActiveStage returns them in WindowSurfaceUpdates;
    • remembers a reset until the next paint, and tracks damage itself.

    The function's docs say the same.

    🤖 Generated with Claude Code

ironrdp-dvc-com-plugin

[0.2.1] - 2026-10-27

Build

  • Mark exposed dependencies as public (#2213) (405e6576ba)

    These crates expose types or traits from these dependencies in their
    public API, so a breaking release of the dependency requires a breaking
    release of the crate:

    • ironrdp-str: ironrdp-core, whose Encode and DecodeOwned traits
      the string types implement.
    • ironrdp-dvc-pipe-proxy: ironrdp-dvc, through DvcNamedPipeProxy's
      DvcProcessor implementation.
    • ironrdp-dvc-com-plugin: ironrdp-dvc, plus ironrdp-pdu and
      ironrdp-svc through the PduResult return type and the SvcMessage
      callback bound of load_dvc_plugin.
    • ironrdp-mstsgu: ironrdp-error, whose Error<GwErrorKind> the
      GwClient methods return.

ironrdp-server

[0.14.0] - 2026-10-27

Security

ironrdp-rdpdr-native

[0.8.1] - 2026-10-27

Bug Fixes

  • Confine Unix drive paths to the share (#2221) (bbebd384ce)

    The Unix RDPDR drive backend resolved server-supplied paths by joining
    strings, so .., symbolic links and mount points could lead the server
    outside the shared directory, and its create, rename and delete handling
    did not follow NT semantics.

    Server paths are now parsed into components without touching the
    filesystem and opened one component at a time relative to the share,
    refusing symbolic links and mount points with openat2 where available
    and a device check otherwise.
    Names Windows cannot hold are refused with STATUS_OBJECT_NAME_INVALID,
    and opens never block, so a FIFO in the share cannot stall the client.

    Create, rename, delete and directory queries follow MS-FSA and report
    the NT status the Windows backend reports for the same condition:

    • Overwriting dispositions truncate only after every check passes, so a
      refused open leaves the file intact, and an invalid disposition or
      directory request fails with STATUS_INVALID_PARAMETER.
    • A delete marked on a handle runs when the file's last handle closes,
      the channel resets or the backend drops, and removes the name it was
      marked through only while that name still refers to the file.
    • Opening a file marked for deletion, or any path through a directory
      marked for deletion, fails with STATUS_DELETE_PENDING; only an empty
      directory can be marked, and the shared directory never.
    • A rename moves only the handle's own file, follows every handle opened
      through the renamed link, removes the source when the target is another
      hard link of the same file, and refuses targets that are directories,
      marked for deletion or open, as well as directories that hold open
      files.
    • Directory listings enumerate a final *, return . and .. except
      in the share, and report errors instead of an early end or an empty
      match.
    • FileStandardInformation reports the delete mark and leaves the marked
      link out of NumberOfLinks.

    File IDs skip IDs still in use, and the number of open files is capped
    at a quarter of the descriptor limit, at most 1024.

ironrdp-rdpewa

[0.1.1] - 2026-10-27

Added

  • Initial MS-RDPEWA protocol crate with CBOR PDU codec, client processor, and server skeleton.


This PR was generated with release-plz.

Copilot AI balanced review requested due to automatic review settings October 27, 2026 15:28
@github-actions
github-actions Bot force-pushed the release-plz/2026-10-27T15-28-47Z branch from 7642f92 to ed926d0 Compare October 27, 2026 15:29

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Five critical missing releases leave incompatible public dependencies selected, including compilation failures in registry server builds.

5 open issues
What changed in this PR

Prepares IronRDP crates for publication by updating release metadata and dependency requirements. No runtime source code changes are included.

Changes:

  • Advances crate versions and propagates workspace dependency requirements.
  • Adds release notes for previously merged features and fixes.
  • Refreshes the fuzzing lockfile, including der resolution.

Five critical missing package-version bumps leave registry consumers with incompatible public types or traits. Four changelog nits describe superseded read_padding! behavior.

File Description
fuzz/​Cargo.lock Synchronizes crate versions and der resolution.
crates/​ironrdp/​Cargo.toml Updates facade dependency requirements.
crates/​ironrdp-vmconnect/​CHANGELOG.md Adds the VMConnect release heading.
crates/​ironrdp-vmconnect/​Cargo.toml Bumps VMConnect and its dependencies.
crates/​ironrdp-viewer/​Cargo.toml Updates viewer dependencies.
crates/​ironrdp-tokio/​CHANGELOG.md Adds the Tokio adapter release heading.
crates/​ironrdp-tokio/​Cargo.toml Bumps the Tokio adapter and dependencies.
crates/​ironrdp-svc/​CHANGELOG.md Adds the SVC release heading.
crates/​ironrdp-svc/​Cargo.toml Bumps SVC and its PDU requirement.
crates/​ironrdp-str/​CHANGELOG.md Records public-dependency annotations.
crates/​ironrdp-str/​Cargo.toml Bumps the string primitives patch version.
crates/​ironrdp-session/​CHANGELOG.md Documents compositing, compatibility, and QOIZ changes.
crates/​ironrdp-session/​Cargo.toml Bumps session and protocol dependencies.
crates/​ironrdp-server/​Cargo.toml Bumps server and supporting dependencies.
crates/​ironrdp-rpc/​CHANGELOG.md Adds the RPC release heading.
crates/​ironrdp-rpc/​Cargo.toml Bumps RPC and input dependencies.
crates/​ironrdp-rdpsnd/​CHANGELOG.md Adds the audio protocol release heading.
crates/​ironrdp-rdpsnd/​Cargo.toml Bumps audio protocol and channel dependencies.
crates/​ironrdp-rdpsnd-native/​CHANGELOG.md Documents playback, capture, and compressed-audio changes.
crates/​ironrdp-rdpsnd-native/​Cargo.toml Bumps the native audio backend and dependencies.
crates/​ironrdp-rdpewa/​CHANGELOG.md Adds the WebAuthn protocol release heading.
crates/​ironrdp-rdpewa/​Cargo.toml Bumps WebAuthn protocol and channel dependencies.
crates/​ironrdp-rdpewa-native/​Cargo.toml Updates the native WebAuthn protocol requirement.
crates/​ironrdp-rdpevor/​CHANGELOG.md Creates the video-remoting release changelog.
crates/​ironrdp-rdpevor/​Cargo.toml Bumps video-remoting and supporting dependencies.
crates/​ironrdp-rdpeusb/​CHANGELOG.md Nit (1 vote): Remove superseded macro bounds-checking and early-return claims; describe the actual RDPEUSB call-site changes.
crates/​ironrdp-rdpeusb/​Cargo.toml Bumps USB protocol and supporting dependencies.
crates/​ironrdp-rdpeusb-native/​Cargo.toml Updates native USB backend dependencies.
crates/​ironrdp-rdpeudp-tokio/​CHANGELOG.md Documents STUN and optional ICE support.
crates/​ironrdp-rdpeudp-tokio/​Cargo.toml Bumps the UDP transport driver and dependencies.
crates/​ironrdp-rdpel/​CHANGELOG.md Adds the location-channel release heading.
crates/​ironrdp-rdpel/​Cargo.toml Bumps location-channel and supporting dependencies.
crates/​ironrdp-rdpei/​CHANGELOG.md Adds the input-channel release heading.
crates/​ironrdp-rdpei/​Cargo.toml Bumps input-channel and supporting dependencies.
crates/​ironrdp-rdpegt/​CHANGELOG.md Creates the geometry-channel release changelog.
crates/​ironrdp-rdpegt/​Cargo.toml Bumps geometry-channel and supporting dependencies.
crates/​ironrdp-rdpecam/​CHANGELOG.md Creates the camera-channel release changelog.
crates/​ironrdp-rdpecam/​Cargo.toml Bumps camera-channel and supporting dependencies.
crates/​ironrdp-rdpecam-native/​Cargo.toml Updates the native camera protocol requirement.
crates/​ironrdp-rdpeai/​CHANGELOG.md Adds the audio-input release heading.
crates/​ironrdp-rdpeai/​Cargo.toml Bumps audio-input and supporting dependencies.
crates/​ironrdp-rdpdr/​CHANGELOG.md Nit (1 vote): Replace contradictory macro-contract claims with the final optional directory-response padding and explicit smart-card field size check.
crates/​ironrdp-rdpdr/​Cargo.toml Bumps device-redirection and protocol dependencies.
crates/​ironrdp-rdpdr-native/​CHANGELOG.md Documents Unix drive confinement and filesystem fixes.
crates/​ironrdp-rdpdr-native/​Cargo.toml Bumps the native drive backend and platform dependencies.
crates/​ironrdp-rdcleanpath/​CHANGELOG.md Documents connection-error reason codes.
crates/​ironrdp-rdcleanpath/​Cargo.toml Bumps the RDCleanPath patch version.
crates/​ironrdp-rail/​Cargo.toml Critical (3 votes): SVC 0.10 changes RailPdu’s public trait implementation, but RAIL remains 0.2.0. Release 0.3.0 and update consumer requirements and release metadata.
crates/​ironrdp-pdu/​CHANGELOG.md Nit (1 vote): Consolidate entries around explicit decoder size checks; remove superseded claims that read_padding! checks bounds or returns decode errors.
crates/​ironrdp-pdu/​Cargo.toml Bumps the PDU release version.
crates/​ironrdp-nscodec/​Cargo.toml Critical (3 votes): The public graphics parameter changes type identity, but NSCodec remains 0.3.0, breaking registry server builds with nscodec. Release 0.4.0 and update the server requirement and release metadata.
crates/​ironrdp-mstsgu/​CHANGELOG.md Records the public error-dependency annotation.
crates/​ironrdp-mstsgu/​Cargo.toml Bumps the gateway patch version.
crates/​ironrdp-input/​CHANGELOG.md Adds the input utilities release heading.
crates/​ironrdp-input/​Cargo.toml Bumps input utilities and the PDU requirement.
crates/​ironrdp-graphics/​CHANGELOG.md Documents decoder fixes and RLGR performance improvements.
crates/​ironrdp-graphics/​Cargo.toml Bumps graphics and its PDU requirement.
crates/​ironrdp-futures/​Cargo.toml Critical (3 votes): Publicly re-exported async types move to 0.12, but Futures remains 0.9.0. Release 0.10.0 and update its changelog and lockfile.
crates/​ironrdp-egfx/​CHANGELOG.md Documents RemoteApp compositing and decoder fixes.
crates/​ironrdp-egfx/​Cargo.toml Bumps graphics-pipeline and supporting dependencies.
crates/​ironrdp-egfx-native/​CHANGELOG.md Creates the native decoder release changelog.
crates/​ironrdp-egfx-native/​Cargo.toml Bumps the native decoder and EGFX requirement.
crates/​ironrdp-echo/​CHANGELOG.md Adds the echo-channel release heading.
crates/​ironrdp-echo/​Cargo.toml Bumps echo-channel and supporting dependencies.
crates/​ironrdp-dvc/​CHANGELOG.md Documents USB-related dynamic-channel changes.
crates/​ironrdp-dvc/​Cargo.toml Bumps dynamic-channel and protocol dependencies.
crates/​ironrdp-dvc-pipe-proxy/​CHANGELOG.md Records public-dependency annotations.
crates/​ironrdp-dvc-pipe-proxy/​Cargo.toml Bumps the pipe proxy and public dependencies.
crates/​ironrdp-dvc-com-plugin/​CHANGELOG.md Records public-dependency annotations.
crates/​ironrdp-dvc-com-plugin/​Cargo.toml Bumps the COM plugin and supporting dependencies.
crates/​ironrdp-displaycontrol/​CHANGELOG.md Adds the display-control release heading.
crates/​ironrdp-displaycontrol/​Cargo.toml Bumps display-control and channel dependencies.
crates/​ironrdp-daemon/​Cargo.toml Updates daemon dependencies.
crates/​ironrdp-core/​CHANGELOG.md Nit (1 vote): Reconcile contradictory entries: read_padding! remains unchecked, callers perform size checks, and the early-return compatibility warning is obsolete.
crates/​ironrdp-core/​Cargo.toml Bumps the core patch version.
crates/​ironrdp-connector/​CHANGELOG.md Documents authentication and compatibility changes.
crates/​ironrdp-connector/​Cargo.toml Bumps connector and protocol dependencies.
crates/​ironrdp-cliprdr/​CHANGELOG.md Adds the clipboard protocol release heading.
crates/​ironrdp-cliprdr/​Cargo.toml Bumps clipboard protocol and supporting dependencies.
crates/​ironrdp-cliprdr-native/​Cargo.toml Critical (3 votes): Public clipboard traits move incompatibly to CLIPRDR 0.9, but the backend remains 0.8.0. Release 0.9.0, document the break, and update consumers retaining 0.8.
crates/​ironrdp-client/​Cargo.toml Updates client protocol and native-backend requirements.
crates/​ironrdp-cfg/​CHANGELOG.md Documents USB-redirection configuration support.
crates/​ironrdp-cfg/​Cargo.toml Bumps configuration utilities.
crates/​ironrdp-capture-replay/​Cargo.toml Updates capture/replay dependencies.
crates/​ironrdp-blocking/​CHANGELOG.md Adds the blocking adapter release heading.
crates/​ironrdp-blocking/​Cargo.toml Bumps the blocking adapter and dependencies.
crates/​ironrdp-async/​CHANGELOG.md Adds the async adapter release heading.
crates/​ironrdp-async/​Cargo.toml Bumps the async adapter and dependencies.
crates/​ironrdp-ainput/​Cargo.toml Critical (3 votes): AInput remains 0.9.0 despite moving to DVC 0.10, leaving the published server with incompatible DvcEncode implementations. Release 0.10.0 and update the server requirement, changelog, and lockfiles.
crates/​ironrdp-agent/​Cargo.toml Updates agent dependencies.
crates/​ironrdp-activex/​Cargo.toml Updates ActiveX integration dependencies.
crates/​ironrdp-acceptor/​CHANGELOG.md Documents interoperability and terminal-state fixes.
crates/​ironrdp-acceptor/​Cargo.toml Bumps acceptor and supporting dependencies.
crates/​iron-remote-desktop/​CHANGELOG.md Documents web-facing connection-error reason codes.
crates/​iron-remote-desktop/​Cargo.toml Bumps the web helper patch version.

Review effort: Balanced

[dependencies]
ironrdp-core = { path = "../ironrdp-core", version = "0.3" } # public
ironrdp-dvc = { path = "../ironrdp-dvc", version = "0.9" } # public
ironrdp-dvc = { path = "../ironrdp-dvc", version = "0.10" } # public

[dependencies]
ironrdp-cliprdr = { path = "../ironrdp-cliprdr", version = "0.8" } # public
ironrdp-cliprdr = { path = "../ironrdp-cliprdr", version = "0.9" } # public
[dependencies]
futures-util = { version = "0.3", features = ["io"] } # public
ironrdp-async = { path = "../ironrdp-async", version = "0.11" } # public
ironrdp-async = { path = "../ironrdp-async", version = "0.12" } # public

[dependencies]
ironrdp-graphics = { path = "../ironrdp-graphics", version = "0.10", optional = true } # public when `encoder` is on
ironrdp-graphics = { path = "../ironrdp-graphics", version = "0.11", optional = true } # public when `encoder` is on
[dependencies]
ironrdp-core = { path = "../ironrdp-core", version = "0.3", default-features = false, optional = true } # public
ironrdp-svc = { path = "../ironrdp-svc", version = "0.9", optional = true } # public
ironrdp-svc = { path = "../ironrdp-svc", version = "0.10", optional = true } # public
@devolutionsbot
devolutionsbot force-pushed the release-plz/2026-10-27T15-28-47Z branch from ed926d0 to 967a907 Compare October 27, 2026 15:42
@github-actions
github-actions Bot force-pushed the release-plz/2026-10-27T15-28-47Z branch from 967a907 to c77975b Compare October 27, 2026 15:43
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ironrdp-ainput, ironrdp-cliprdr-native, ironrdp-futures, ironrdp-nscodec,
ironrdp-rail, ironrdp-rdpecam-native and ironrdp-rdpewa-native have no
changes of their own, but each exposes a dependency that takes a breaking
release, so each takes one too.

ironrdp-mstsgu is released as 0.1.0 rather than 0.0.3: a 0.0.x patch
release is breaking too, and 0.1.0 lets later compatible releases be patch
releases.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@CBenoit
Benoît Cortier (CBenoit) merged commit b13befa into master Oct 27, 2026
43 checks passed
@CBenoit
Benoît Cortier (CBenoit) deleted the release-plz/2026-10-27T15-28-47Z branch October 27, 2026 16:26
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.

3 participants