No description
vpn
  • Rust 87.9%
  • C# 7%
  • TypeScript 4.2%
  • Svelte 0.5%
  • GLSL 0.1%
  • Other 0.2%
Find a file
2026-07-13 23:51:48 +09:00
.cargo build(deps): bump getrandom to 0.3 2025-07-24 06:34:50 -04:00
.github chore(release): clean up (#1440) 2026-07-10 16:59:01 +00:00
benches chore(deps): normalize version requirements to minimal form (#1288) 2026-05-19 14:15:04 +00:00
crates fix(dvc-pipe-proxy): handle pre-connected Windows clients (#1447) 2026-07-13 23:51:48 +09:00
ffi fix(pdu)!: send NetworkAutoDetect over the MCS message channel (#1348) 2026-07-10 21:55:47 +09:00
fuzz chore(release): clean up (#1440) 2026-07-10 16:59:01 +00:00
web-client feat(web): add pluggable storage backends for RDP file downloads (#1221) 2026-06-23 18:52:05 +00:00
xtask ci(xtask): add dependency-invariant guard for ironrdp-session (#1438) 2026-07-10 09:08:11 -04:00
.gitattribute feat(ffi): initial C# bindings (connector only) (#423) 2024-04-05 15:11:32 +00:00
.gitignore chore: remove code coverage pipeline (#1324) 2026-05-27 13:29:13 +00:00
AGENTS.md chore: remove code coverage pipeline (#1324) 2026-05-27 13:29:13 +00:00
ARCHITECTURE.md feat: split ironrdp-client into a reusable library + ironrdp-viewer binary (#1309) 2026-05-26 16:15:38 +00:00
Cargo.lock fix(dvc-pipe-proxy): handle pre-connected Windows clients (#1447) 2026-07-13 23:51:48 +09:00
Cargo.toml chore: upgrade toolchain to 1.89.0 and migrate to Rust edition 2024 (#1153) 2026-03-09 14:32:53 +00:00
CLAUDE.md chore: add AGENTS.md with repository manual for AI coding agents (#1106) 2026-02-17 15:53:12 +00:00
cliff.toml chore(release): prepare for publishing (#656) 2025-01-31 04:22:55 +00:00
clippy.toml fix(error): box diagnostic metadata to shrink Error<Kind> size (#1269) 2026-05-14 13:57:23 +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 ci: friendly release asset names and drift-free install docs (#1439) 2026-07-10 13:35:19 +00:00
release-plz.toml chore(release): prepare for publishing (#1364) 2026-07-10 15:38:47 +00:00
rust-toolchain.toml chore: upgrade toolchain to 1.89.0 and migrate to Rust edition 2024 (#1153) 2026-03-09 14:32:53 +00:00
rustfmt.toml style: run cargo fmt 2022-04-15 13:39:34 -04:00
STYLE.md docs(style): define log-level policy for library crates 2026-06-23 22:52:52 +09:00
typos.toml feat(rdpdr): add Web RDPDR virtual printer support (#1230) 2026-05-04 06:51:59 +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-viewer

A full-fledged RDP client based on IronRDP crates suite, and implemented using non-blocking, asynchronous I/O. It is built on top of the reusable ironrdp-client library crate.

cargo run --bin ironrdp-viewer -- <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.

Binary releases

Prebuilt, checksummed .tar.gz archives are attached to each GitHub Release for the executable packages, one per supported platform:

Each package is released under its own tag (ironrdp-agent-v*, ironrdp-viewer-v*). See the Releases page to pick a release and follow the per-platform download, checksum, and extraction instructions included in its notes.

Rust version (MSRV)

IronRDP libraries follow a conservative Minimum Supported Rust Version (MSRV) policy. 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. The pinned toolchain in rust-toolchain.toml is both the project toolchain and the MSRV validated by CI. See ARCHITECTURE.md for the full policy.

Architecture

See the ARCHITECTURE.md document.

Getting help