A lightweight RDP client for Linux and macOS, built on FreeRDP and SDL3.
GPU-accelerated rendering via SDL3 (Metal on macOS, GPU-accelerated on Linux), hardware video decoding (VAAPI/FFmpeg on Linux, VideoToolbox on macOS), and system keyring integration for password storage.
Download the latest build from the releases page.
| Asset | Platform |
|---|---|
fiRDP-trixie-x86_64 |
Linux x86_64 (Debian Trixie) |
fiRDP-trixie-arm64 |
Linux arm64 (Debian Trixie) |
fiRDP-flatpak-x86_64.flatpak |
Linux (Flatpak bundle, x86_64) |
fiRDP-flatpak-arm64.flatpak |
Linux (Flatpak bundle, arm64) |
fiRDP-macos-arm64.zip |
macOS (Apple Silicon) |
On macOS, unzip and run open fiRDP.app -- <file.rdp>.
The native binary is built on Debian 13 (Trixie). Install the runtime dependencies:
sudo apt install libsdl3-0 libcups2t64 libusb-1.0-0 libsecret-1-0 \
libavcodec61 libavutil59 libswscale8 libswresample5Then make it executable and run ./fiRDP-trixie-x86_64 <file.rdp>.
For other distros, use the Flatpak bundle instead - it includes all dependencies.
flatpak install fiRDP-flatpak-x86_64.flatpak
flatpak run me.stanis.apps.rdp <file.rdp>Requirements: clang, lld, cmake, SDL3, and FreeRDP's build dependencies (openssl, ffmpeg, libusb, cups, jansson). On Linux: libsecret. On macOS: Xcode command line tools.
sudo port install clang-18 SDL3 cmake openssl libusb jansson ffmpeg8git submodule update --init --recursive
cmake -B build -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang -DCMAKE_BUILD_TYPE=Release
cmake --build build --target fiRDP -j$(nproc 2>/dev/null || sysctl -n hw.ncpu)On macOS, the build produces build/fiRDP.app. Run it with:
open build/fiRDP.app -- <file.rdp>
# or directly:
./build/fiRDP.app/Contents/MacOS/fiRDP [options] <file.rdp>fiRDP [options] <file.rdp | rdp://...> [-- "key:type:value" ...]
Options:
-c, --connect Connect immediately (skip confirmation)
-q, --quiet Suppress connection info output
-v, --verbose Verbose logging (DEBUG). Repeat (-vv) for TRACE
--password-stdin Read password from stdin; skip the keyring entirely
-g, --grab-keyboard Grab keyboard (requires Accessibility on macOS)
-s, --native-scale Override desktop scale factor with local display scale
--native-resolution Use display's native panel resolution (macOS only)
-d, --display <n> Use display index n (0-indexed)
--no-wayland Force X11 backend instead of Wayland (Linux only, not recommended)
--prefer-h264 Hint server to prefer H.264
--low-latency Send QoE feedback and suspend per-frame acks
--resolution <res> Remote desktop resolution: 1080p, 1440p, 2160p, 2k, 4k, 8k, or a height in pixels
--takeover Connect to the admin/console session (xfreerdp /admin)
--no-key-repeat Drop local key-repeat events; let the server autorepeat
-h, --help Show this help
Settings are loaded from the .rdp file. Passwords are retrieved from the system keyring (libsecret on Linux, Keychain on macOS) and stored after successful connections.
Any RDP setting can be overridden on the command line after --, using the standard .rdp file format (key:type:value):
fiRDP -c my.rdp -- "use redirection server name:i:0" "negotiate security layer:i:1"Instead of an .rdp file, you can pass an rdp:// URL with URL-encoded parameters:
fiRDP 'rdp://full%20address=s:mypc:3389&username=s:admin&audiomode=i:2&disable%20themes=i:1'| Shortcut | Action |
|---|---|
| Shift+F11 | Toggle fullscreen |
| Shift+F12 | Disconnect |
Config file: ~/.config/freerdp/sdl-freerdp.json (created on first run).
The host_keys option specifies key combinations kept for the host OS instead of forwarded to the remote session:
{
"SDL_KeyModMask": ["KMOD_NONE"],
"host_keys": ["Super+Q", "Super+Tab", "Alt+F4"]
}Modifiers: Ctrl, Alt, Shift, Super (aliases: Win, Cmd, Gui). Key names use SDL naming (e.g. Q, Tab, F4).
GPLv3 or later. Includes code from FreeRDP (Apache 2.0).