Rust implementation of the Microsoft Remote Desktop Protocol (RDP)
Find a file
Benoît Cortier 27f5504508
Some checks are pending
CI / Fuzzing (push) Blocked by required conditions
CI / Check formatting (push) Waiting to run
CI / Check typos (push) Waiting to run
CI / Checks [linux] (push) Blocked by required conditions
CI / Checks [macos] (push) Blocked by required conditions
CI / Checks [windows] (push) Blocked by required conditions
CI / Web Client (push) Blocked by required conditions
CI / FFI (push) Blocked by required conditions
CI / Success (push) Blocked by required conditions
Coverage / Coverage Report (push) Waiting to run
Release crates / Open release PR (push) Waiting to run
Release crates / Release crates (push) Waiting to run
refactor(mstsgu): follow up to PR 913 (#920)
- Update tokio-tungstenite to latest
- Fix the dependencies
- Move the top-level documentation into a README.md that we re-include
in the source code
- Re-order the imports using the nightly formater
- Audit the unwraps and remove them
- Fix the UTF-16 string length computation
2025-08-19 10:01:49 -04:00
.cargo build(deps): bump getrandom to 0.3 2025-07-24 06:34:50 -04:00
.github [DEVOPS-3822] fix: add iron-remote-desktop-rdp to package cache update (#871) 2025-07-17 13:52:37 -04:00
benches build(deps): bump the patch group across 2 directories with 6 updates (#914) 2025-08-12 10:27:56 +00:00
crates refactor(mstsgu): follow up to PR 913 (#920) 2025-08-19 10:01:49 -04:00
ffi fix: rename option no_audio_playback into enable_audio_playback 2025-08-04 06:46:10 -04:00
fuzz build(deps): bump the patch group across 2 directories with 6 updates (#914) 2025-08-12 10:27:56 +00:00
web-client refactor(web): add NegotiationFailure to IronErrorKind (#905) 2025-08-08 04:52:28 -04:00
xtask refactor: add macro_use_extern_crate rustc style/readability lint (#919) 2025-08-19 09:45:34 -04:00
.gitattribute feat(ffi): initial C# bindings (connector only) (#423) 2024-04-05 15:11:32 +00:00
.gitignore docs(now-proto): add missing NOW-PROTO docs (#575) 2024-11-07 19:29:08 -05:00
ARCHITECTURE.md refactor(mstsgu): follow up to PR 913 (#920) 2025-08-19 10:01:49 -04:00
Cargo.lock refactor(mstsgu): follow up to PR 913 (#920) 2025-08-19 10:01:49 -04:00
Cargo.toml refactor: add macro_use_extern_crate rustc style/readability lint (#919) 2025-08-19 09:45:34 -04:00
cliff.toml chore(release): prepare for publishing (#656) 2025-01-31 04:22:55 +00:00
clippy.toml chore: update Rust toolchain to 1.88.0 (#852) 2025-07-03 07:38:28 +03:00
LICENSE-APACHE ironrdp: initial commit 2019-07-10 17:31:26 -04:00
LICENSE-MIT ironrdp: initial commit 2019-07-10 17:31:26 -04:00
README.md docs: add ironrdp docs.rs & crates.io badges 2024-10-29 19:14:20 +09:00
release-plz.toml chore: only publish GitHub releases for ironrdp-client (#704) 2025-03-14 11:00:44 +02:00
rust-toolchain.toml chore: update Rust toolchain to 1.88.0 (#852) 2025-07-03 07:38:28 +03:00
rustfmt.toml style: run cargo fmt 2022-04-15 13:39:34 -04:00
STYLE.md docs: clarify STYLE.md (#910) 2025-08-05 09:12:59 +00:00
typos.toml chore(release): prepare for publishing (#748) 2025-05-27 15:21:56 +00:00

IronRDP

A collection of Rust crates providing an implementation of the Microsoft Remote Desktop Protocol, with a focus on security.

Demonstration

https://user-images.githubusercontent.com/3809077/202049929-76f42471-aeb0-41da-9118-0dc6ea491bd2.mp4

Video Codec Support

Supported codecs:

  • Uncompressed raw bitmap
  • Interleaved Run-Length Encoding (RLE) Bitmap Codec
  • RDP 6.0 Bitmap Compression
  • Microsoft RemoteFX (RFX)

Examples

ironrdp-client

A full-fledged RDP client based on IronRDP crates suite, and implemented using non-blocking, asynchronous I/O.

cargo run --bin ironrdp-client -- <HOSTNAME> --username <USERNAME> --password <PASSWORD>

screenshot

Example of utilizing IronRDP in a blocking, synchronous fashion.

This example showcases the use of IronRDP in a blocking manner. It demonstrates how to create a basic RDP client with just a few hundred lines of code by leveraging the IronRDP crates suite.

In this basic client implementation, the client establishes a connection with the destination server, decodes incoming graphics updates, and saves the resulting output as a BMP image file on the disk.

cargo run --example=screenshot -- --host <HOSTNAME> --username <USERNAME> --password <PASSWORD> --output out.bmp

How to enable RemoteFX on server

Run the following PowerShell commands, and reboot.

Set-ItemProperty -Path 'HKLM:\Software\Policies\Microsoft\Windows NT\Terminal Services' -Name 'ColorDepth' -Type DWORD -Value 5
Set-ItemProperty -Path 'HKLM:\Software\Policies\Microsoft\Windows NT\Terminal Services' -Name 'fEnableVirtualizedGraphics' -Type DWORD -Value 1

Alternatively, you may change a few group policies using gpedit.msc:

  1. Run gpedit.msc.

  2. Enable Computer Configuration/Administrative Templates/Windows Components/Remote Desktop Services/Remote Desktop Session Host/Remote Session Environment/RemoteFX for Windows Server 2008 R2/Configure RemoteFX

  3. Enable Computer Configuration/Administrative Templates/Windows Components/Remote Desktop Services/Remote Desktop Session Host/Remote Session Environment/Enable RemoteFX encoding for RemoteFX clients designed for Windows Server 2008 R2 SP1

  4. Enable Computer Configuration/Administrative Templates/Windows Components/Remote Desktop Services/Remote Desktop Session Host/Remote Session Environment/Limit maximum color depth

  5. Reboot.

Architecture

See the ARCHITECTURE.md document.

Getting help