What is IronRDP?
IronRDP is a comprehensive RDP protocol implementation that enables you to:- Build custom RDP clients and servers in Rust
- Integrate RDP functionality into existing applications
- Create specialized remote desktop solutions with full protocol control
- Leverage Rust’s memory safety guarantees for secure remote access
Key Features
Security-First Design
IronRDP treats all parsing and state transitions as potentially hostile input surfaces, making security a core architectural principle rather than an afterthought.Modular Architecture
The crate suite is organized into distinct tiers:- Core Tier: Foundational libraries with strict quality standards (
no_std-compatible, heavily fuzzed) - Extra Tier: Higher-level abstractions for async/sync I/O, clients, and servers
- Community Tier: Additional implementations and tools maintained by the community
Comprehensive Codec Support
IronRDP supports multiple video codecs for efficient remote desktop streaming:- Uncompressed raw bitmap
- Interleaved Run-Length Encoding (RLE) Bitmap Codec
- RDP 6.0 Bitmap Compression
- Microsoft RemoteFX (RFX)
Virtual Channel Support
Implement custom functionality through static and dynamic virtual channels:- CLIPRDR: Clipboard redirection (MS-RDPECLIP)
- RDPDR: Device redirection
- RDPSND: Audio output (MS-RDPEA)
- DRDYNVC: Dynamic virtual channel infrastructure
- Custom channel implementations through extensible traits
Architecture Overview
IronRDP follows a strict architectural design where foundational crates in the Core Tier must be
no_std-compatible, platform-independent, and thoroughly fuzzed for robustness.ironrdp re-exports the most important crates through feature flags:
core- Common traits and types (enabled by default)pdu- PDU encoding and decoding (enabled by default)connector- Client connection state machinesacceptor- Server connection acceptancesession- Session state machinesgraphics- Image processing primitivesserver- Server implementation skeletoncliprdr,rdpdr,rdpsnd- Virtual channel implementations- And more specialized features for specific use cases
Common Use Cases
Building an RDP Client
IronRDP provides everything needed to create a full-featured RDP client:Building an RDP Server
Create custom RDP servers with full control over input handling and display updates:Blocking vs Async I/O
IronRDP supports both blocking and async I/O patterns:ironrdp-blocking: Synchronous, blocking I/O for simple use casesironrdp-async: Future-based async abstractionsironrdp-tokio: Integration with the Tokio async runtimeironrdp-futures: Integration with the Futures crate
Example: Screenshot Client
The project includes a complete example that connects to an RDP server, receives graphics updates, and saves them as a PNG image:Example: RDP Server
A full server implementation example is also included:Protocol Compliance
IronRDP implements the Microsoft RDP protocol specifications, with extensive support for:- RDP 6.0+ features
- TLS security layer
- CredSSP authentication
- Multiple compression types (K8, K64, RDP6, RDP6.1)
- Virtual channel extensibility
Getting Help
If you need assistance or want to contribute:- Report bugs in the GitHub issue tracker
- Join discussions in the Matrix room
- Review the ARCHITECTURE.md document for deep dives
Next Steps
Installation
Add IronRDP to your Rust project
Quickstart
Build your first RDP client in minutes

