RDPilot is a fast Avalonia RDP client backed by FreeRDP. It focuses on responsive remote desktop sessions, dynamic resolution, secure saved profiles, and a clean tabbed interface.
Windows is currently the only supported platform. Linux support is in progress.
- Dynamic resolution when the client window changes size.
- Low-latency keyboard and mouse input with mouse-move coalescing.
- Multiple simultaneous RDP sessions through tabs.
- Saved connection profiles with passwords stored in the OS credential vault.
- Text clipboard sync between local and remote sessions.
- Per-connection and global quality settings for color depth, font smoothing, wallpaper, themes, animations, full-window drag, compression, bitmap cache, and connection type.
Download the latest Windows installer from the GitHub Releases page:
https://github.com/ErnieBernie10/RDPilot/releases
The installer is per-user and installs to:
%LOCALAPPDATA%\Programs\RDPilot
After the winget package is accepted, installation will also be available with:
winget install RDPilot.RDPilotOn Arch Linux, RDPilot is currently available from the GitHub Release package:
curl -LO https://github.com/ErnieBernie10/RDPilot/releases/download/v0.2.0/rdpilot-0.2.0-1-x86_64.pkg.tar.zst
sudo pacman -U rdpilot-0.2.0-1-x86_64.pkg.tar.zstAUR packaging is planned and will be available soon.
- Add a saved connection from the sidebar.
- Enter the remote PC, username, optional domain, and optional gateway settings.
- Save the profile. Passwords are stored in the operating system credential store, not in the profile JSON.
- Click
Connectto open a new session tab.
Each Connect action opens a separate tab. Switching tabs keeps background sessions connected and routes input, resize, and clipboard updates only to the active session.
Saved connection metadata is stored per user:
- Windows:
%APPDATA%/RDPilot.Client/connections.json - macOS:
~/Library/Application Support/RDPilot.Client/connections.json - Linux:
$XDG_CONFIG_HOME/RDPilot.Client/connections.json, or~/.config/RDPilot.Client/connections.json
Passwords are stored separately:
- Windows: Credential Manager
- macOS: Keychain
- Linux: Secret Service via
secret-tool
- Clipboard redirection is text-only.
- Audio playback and device redirection are disabled.
- RDPGFX is disabled; RDPilot currently uses the classic GDI rendering path for resize stability.
- Console diagnostics include
[PERF_NATIVE],[PERF_UI],[PERF_INPUT], and[CLIPRDR]logs.
RDPilot contains two main projects:
RDPilot.Client: .NET/Avalonia desktop client.RDPilot.Wrapper: native C wrapper around FreeRDP 3 APIs.
Requirements:
- .NET SDK 10.0 or newer
- CMake
- Visual Studio Build Tools with the MSVC C/C++ toolchain
- vcpkg
- Inno Setup 6 for installer builds
Prepare vcpkg dependencies:
scripts/setup-windows-vcpkg.ps1Build and run:
scripts/run-windows.ps1Build only:
scripts/build-windows.ps1Build a Release installer:
scripts/build-installer-windows.ps1 -AppVersion 0.1.0The installer is written to:
artifacts/installer/RDPilot-Setup-<version>-win-x64.exe
The default vcpkg location is a sibling of this repository, for example C:/Users/<you>/Sources/vcpkg when this repo is C:/Users/<you>/Sources/rdp-client. Pass -VcpkgRoot to use a different location.
Linux support is in progress. The notes below are for contributors working on Linux builds and are not a supported end-user installation path yet.
Requirements:
- .NET SDK 10.0 or newer
- CMake
- C compiler toolchain
- pkg-config
- FreeRDP 3 development packages:
freerdp3,freerdp-client3,winpr3 secret-tooland a working Secret Service session for password storage
On Arch/CachyOS:
sudo pacman -S dotnet-sdk cmake gcc pkgconf freerdpBuild and run:
scripts/run-linux.shBuild only:
scripts/build-linux.shBuild a Release configuration:
scripts/build-linux.sh --configuration ReleaseEquivalent direct commands:
dotnet build RDPilot.slnx
dotnet run --project RDPilot.Client/RDPilot.Client.csprojThe .NET project builds the native wrapper with CMake and copies the native library beside the managed output so DllImport("freerdp_wrapper") can load it. On Linux, the wrapper is built at RDPilot.Wrapper/build/native/libfreerdp_wrapper.so.
Release versions use major.minor.patch tags. The tag version is used for the .NET assembly, Inno installer, GitHub Release asset name, and winget package version.
Create a release:
git tag v0.1.0
git push origin v0.1.0The Windows Installer workflow publishes:
RDPilot-Setup-0.1.0-win-x64.exe
RDPilot-Setup-0.1.0-win-x64.exe.sha256
The Linux Arch Package workflow publishes:
rdpilot-0.1.0-1-x86_64.pkg.tar.zst
rdpilot-0.1.0-1-x86_64.pkg.tar.zst.sha256
PKGBUILD
.SRCINFO
Copy the generated PKGBUILD and .SRCINFO into the rdpilot AUR repository for each release.
Submit or update winget manually with wingetcreate after testing the release installer.
New package:
wingetcreate new https://github.com/ErnieBernie10/RDPilot/releases/download/v0.1.0/RDPilot-Setup-0.1.0-win-x64.exePackage values:
PackageIdentifier: RDPilot.RDPilot
PackageName: RDPilot
Publisher: RDPilot
PackageVersion: 0.1.0
PackageUrl: https://github.com/ErnieBernie10/RDPilot
PublisherUrl: https://github.com/ErnieBernie10/RDPilot
ShortDescription: Fast Avalonia RDP client backed by FreeRDP.
Moniker: rdpilot
InstallerType: inno
Scope: user
Architecture: x64
Update package:
wingetcreate update RDPilot.RDPilot --version 0.1.1 --urls https://github.com/ErnieBernie10/RDPilot/releases/download/v0.1.1/RDPilot-Setup-0.1.1-win-x64.exe