Skip to main content
IronRDP is published to crates.io and can be added to your Rust project using Cargo.

Prerequisites

Before installing IronRDP, ensure you have:
  • Rust toolchain: Version 1.88.0 or later (as specified in rust-toolchain.toml)
  • Cargo: Rust’s package manager (included with Rust)
IronRDP uses Rust Edition 2021 and requires a modern Rust toolchain.

Basic Installation

Add IronRDP to your Cargo.toml:
By default, this enables the core and pdu features, providing basic types and PDU encoding/decoding.

Feature-Based Installation

IronRDP is designed as a meta crate with optional feature flags. Choose the features you need:

Client Development

For building RDP clients:
Required features:
  • connector - Client connection state machines (ironrdp-connector)
  • session - Session state machines (ironrdp-session)
  • graphics - Image processing primitives (ironrdp-graphics)

Server Development

For building RDP servers:
Required features:
  • acceptor - Server connection acceptance (ironrdp-acceptor)
  • server - Server implementation skeleton (ironrdp-server)

Virtual Channels

Add support for specific virtual channels:

Complete Feature Reference

  • core - Common traits and types (ironrdp-core) [default]
  • pdu - PDU encoding and decoding (ironrdp-pdu) [default]
  • connector - Client connection state machines (ironrdp-connector)
  • acceptor - Server connection acceptance (ironrdp-acceptor)
  • session - Session state machines (ironrdp-session)
  • graphics - Image processing primitives (ironrdp-graphics)
  • input - Input packet utilities (ironrdp-input)
  • qoi - QOI codec support
  • qoiz - QOIZ codec support
  • svc - Static virtual channel traits (ironrdp-svc)
  • dvc - Dynamic virtual channel implementation (ironrdp-dvc)
  • cliprdr - Clipboard redirection (ironrdp-cliprdr)
  • rdpdr - Device redirection (ironrdp-rdpdr)
  • rdpsnd - Audio output (ironrdp-rdpsnd)
  • displaycontrol - Display control channel (ironrdp-displaycontrol)
  • echo - Echo channel (ironrdp-echo)
  • server - Server implementation skeleton (ironrdp-server)

I/O Layer Installation

IronRDP’s core is I/O-agnostic. Choose an I/O layer based on your needs:

Blocking I/O

For synchronous applications:
Use case: Simple clients, CLI tools, examples

Async I/O with Tokio

For async applications using Tokio:
Use case: High-performance servers, concurrent clients

Async I/O with Futures

For async applications using the Futures crate:
Use case: Custom async runtimes, async-std users

Additional Dependencies

Depending on your use case, you may need:

For TLS Support

For CredSSP Authentication

For Native Clipboard Support

For Image Processing (Examples)

Platform-Specific Considerations

No Standard Library (no_std)

All core-tier crates are no_std-compatible:
Enable the std feature flag if you need standard library support:

WebAssembly (WASM)

For browser-based RDP clients:
Build target:

Verification

Verify your installation by building a minimal example:
The Config struct has many required fields. The examples above are simplified. See the Quickstart for complete configuration examples.

Running Examples

The IronRDP repository includes runnable examples:

Screenshot Example (Client)

Server Example

Full Client (ironrdp-client)

Type Definitions

Key types you’ll interact with after installation:

Connection Types

Session Types

PDU Types

Troubleshooting

Compilation Errors

Error: cannot find type X in module YSolution: Enable the required feature flag:
Error: failed to select a version for ironrdp-*Solution: Use compatible versions across all IronRDP crates. The meta crate handles this automatically.
Error: Compilation fails with older Rust versionsSolution: Update Rust to 1.88.0 or later:

Next Steps

Quickstart

Build your first RDP client

API Reference

Explore the complete API documentation