Library / SDK
FreeRDP/FreeRDP avatar
FreeRDP/FreeRDP

FreeRDP 3.33: A C Library for Remote Desktop Protocol, Not Just a Client

FreeRDP is a free remote desktop protocol library and clients. Enjoy the freedom of using your software wherever you want, the way you want it, in a world where interoperability can finally liberate your computing experience.

14,015 stars15,588 forksCApache-2.0

At a glance

What is it?
FreeRDP is an Apache-2.0 C implementation of the Remote Desktop Protocol, offering a library and clients. This review covers its architecture, build process, limitations, and how it compares to alternatives.
Who is it for?
Adopt FreeRDP if you need a cross-platform RDP client or a library to embed RDP into your own software, especially if you value the Apache-2.0 license and active releases. Do not adopt it if you need a turnkey commercial support contract or a minimal-footprint client, as the project is a full protocol implementation with a steep learning curve.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository received new commits within the last day.
What is it written in?
Mainly C, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on November 13, 2026, and from our analysis. They are not legal advice.

From daily snapshots

Star history

  • FreeRDP/FreeRDP14,015 ★ · +522
Star history
Repository2026-07-282026-11-13
FreeRDP/FreeRDP13.5k14k

522 Stars in the last 108 days, measured from the daily GitHub snapshot. Compare with other projects

Editorial analysis

What FreeRDP Actually Solves

FreeRDP solves the problem of connecting to Windows-based remote desktops from non-Windows systems, and more broadly, of implementing the Remote Desktop Protocol in software. It is not just a single client; it is a library that other applications can use to speak RDP. The README describes it as 'a free implementation of the Remote Desktop Protocol (RDP), released under the Apache license.' This matters for engineers who need to embed remote desktop functionality into their own products, because they can build on FreeRDP's protocol handling rather than reverse-engineering RDP themselves. The project also ships clients, so end users can get a working remote desktop tool out of the box. The target audience is developers and system administrators who need a flexible, license-permissive way to connect to RDP servers, or who want to build custom RDP-based tools.

Architecture: Library Plus Clients

The repository layout, as far as the README and project structure indicate, is a C codebase that produces both a library and client executables. The library exposes an API for RDP connections, while the clients use that API. The README mentions 'library and clients' in the first line, which suggests a separation of concerns: the core protocol logic is in the library, and the user-facing applications are thin wrappers. This design is typical for protocol implementations, allowing third-party projects to link against the library without pulling in the client UI. The project also maintains API documentation at pub.freerdp.com/api, which is a sign that the library interface is considered a public contract. The presence of an ABI checker in the CI workflow (abi-checker.yml) indicates that the project cares about binary compatibility across releases, which is important for downstream projects that link against FreeRDP dynamically.

Building FreeRDP from Source

The README does not include explicit build commands, but it points to a compilation page on the wiki: https://github.com/FreeRDP/FreeRDP/wiki/Compilation. This is a gap in the README itself; you have to leave the repository to get the full instructions. Based on the project's nature, a typical build would involve cloning the repository, installing dependencies, and then using CMake (the repository ships CMakeLists.txt and CMakePresets.json) to configure and build. The README does mention that compilation instructions are on the wiki, so the project expects users to follow that. The release cadence is active, with version 3.33.0 released on 2026-11-02, after 3.32.2 on 2026-10-12. This suggests that building from a release tarball rather than the master branch might be more stable, but the master branch is the default. If you want to build a client, you likely need to enable certain CMake options, but those are not documented in the README.

Licensing and Its Implications

FreeRDP is released under the Apache-2.0 license. This is a permissive license, which means you can use the code in proprietary software, modify it, and distribute it, as long as you include the original copyright notice and state changes. The README explicitly says 'released under the Apache license.' This is a significant advantage over GPL-licensed RDP clients, which would force derivative works to be open source. For engineers evaluating FreeRDP for commercial products, Apache-2.0 is a low-friction choice. However, the license does not provide any warranty or support, so you are on your own for maintenance. The project also has a security policy linked in the README, which is a good sign for handling vulnerabilities, but the policy itself is not described.

Limitations and Failure Modes

FreeRDP is a complex protocol implementation, and that complexity is a limitation. The README does not list known issues, but the existence of a separate issue tracker and a FAQ suggests that problems are common enough to warrant documentation. One failure mode is the build process: because the README defers to the wiki for compilation, a new user might be stumped if the wiki is outdated or incomplete. Another limitation is the scope: FreeRDP implements RDP, but RDP is a moving target with Microsoft's proprietary extensions. The project cannot guarantee interoperability with every RDP server configuration, especially with older or heavily customized servers. The README mentions 'interoperability can finally liberate your computing experience,' which is aspirational, but in practice you may encounter servers that use features FreeRDP does not support. The project's active release schedule (three releases in two months) also implies that bugs are fixed often, but that means you need to keep up with updates to avoid known vulnerabilities.

Alternatives: xrdp and Remmina

A common alternative to FreeRDP is xrdp, which is an RDP server that works with various backends, but it is a different tool because it acts as a server, not a client. For a client-only approach, Remmina is a GTK-based remote desktop client that uses FreeRDP under the hood, so it is not a direct competitor but a higher-level wrapper. A true alternative is the rdesktop project, which was an early open-source RDP client, but it is largely unmaintained and does not support modern RDP features. The key difference is that FreeRDP is a library with a client, while rdesktop is a standalone client. If you need a library to embed, FreeRDP is the more flexible choice. If you need a simple client, Remmina might be easier to use, but it depends on FreeRDP anyway. The alternative approach is to use Microsoft's own Remote Desktop client, which is closed-source and only works on certain platforms, so it does not offer the same cross-platform freedom.

Maintenance and Upgrade Cost

FreeRDP has a clear maintenance story: the project is actively developed, with releases coming out monthly. The README lists CI workflows for multiple platforms (Windows, macOS, Linux, FreeBSD, and alternative architectures like ARM and RISC-V), which indicates a strong commitment to cross-platform compatibility. However, this also means that upgrades can be frequent, and each release may change the API or ABI. The project has an ABI checker in its CI, which suggests they track ABI stability, but you should still check the release notes for breaking changes. The wiki and mailing list are the main support channels, along with a Matrix room and IRC channel. The cost of maintenance for a downstream project is the need to track these releases and rebuild your software against the latest version to receive security fixes. The Apache-2.0 license does not require you to upgrade, so you can choose to stay on an older version, but you would miss out on updates.

Editorial conclusion

Adopt FreeRDP if you need a cross-platform RDP client or a library to embed RDP into your own software, especially if you value the Apache-2.0 license and active releases. Do not adopt it if you need a turnkey commercial support contract or a minimal-footprint client, as the project is a full protocol implementation with a steep learning curve. Before adopting, verify that the specific RDP features you require are enabled in your build, and check the ChangeLog for the version you plan to use.

Frequently asked questions

What does FreeRDP do?

It is a free implementation of the Remote Desktop Protocol, released under the Apache licence. The repository holds the protocol library in libfreerdp/, clients in client/, a server in server/ and the virtual channel plugins in channels/.

how to install freerdp

The README carries no install command at all. Prebuilt releases are published at pub.freerdp.com/releases/, and the project points compilation instructions at the wiki page github.com/FreeRDP/FreeRDP/wiki/Compilation.

how to install freerdp on windows

The repository runs a MinGW build in CI, which is the Windows toolchain the project exercises itself, but the README gives no per-platform install steps. Downloads are at pub.freerdp.com/releases/, and the wiki Compilation page is the documented route to a build.

how to install freerdp 3

The current line is the 3.x series: 3.32.1 was released on 2026-09-28, 3.32.2 on 2026-10-12 and 3.33.0 on 2026-11-02. Those releases are published under pub.freerdp.com/releases/.

how to use freerdp-server

A server tree exists in the repository at server/, alongside the library in libfreerdp/. The README does not document how to build or run it, so that question goes to the wiki rather than to the repository.

Official sources

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/freerdp-freerdp.svg)](https://hysenlabs.com/projects/freerdp-freerdp)

Star history chart for your README

markdown
[![Star history](https://hysenlabs.com/chart/freerdp-freerdp.svg)](https://hysenlabs.com/projects/freerdp-freerdp)

Was this useful?