phoenix is a minimalist cross-platform GUI toolkit abstraction layer written in C++11. The idea was to create a clean API for creating basic user interfaces, and then implementing backends for every major GUI toolkit, while keeping the API simple enough to easily implement new backends in the future on an as-needed basis. This allows one to create truly portable code.
Currently, phoenix implements the following backends:
phoenix also supports a reference backend, which defaults to no operation when used. This serves two purposes: one, all of the boilerplate to start a new backend is available in template form; and two, for applications that can also work on the console, said code can be compiled with phoenix on platforms it is otherwise not available on yet.
One nice advantage of phoenix is that you are working only with modern C++11. You are not forced to program in C89 for GTK+, or Objective-C 2.0 for Cocoa.
Unlike existing cross-platform toolkits such as Qt and wxWidgets, phoenix does not try and do everything. Instead, it aims to do that which is widely available on every platform natively. This allows truly native user interfaces with a very small overhead on code size. For instance, the phoenix runtime is around 100KB, compared to around 40MB for Qt. This also means less bugs, and less subtle differences between supported platforms.
But since it is minimalist, phoenix is not appropriate for all applications. Use it when you only need a basic user interface that works on all major operating systems natively, and want to keep your download package size small.
phoenix can be linked statically or dynamically to an application. Given that phoenix is so small, it is recommended to statically link with it. However, if you need to invoke phoenix from dynamic libraries on platforms that lack support for dynamic exports (Windows, notably), you can also link with phoenix dynamically.
It's worth noting that phoenix is ready to target GTK+ 3.x and Qt 5.x, but does not at this time. GTK+ 3.x is currently unable to avoid breaking theming completely between minor releases, and Qt 5.x is not yet widely available on long-term support distributions. Once these libraries are ubiquitous and stable, phoenix will be updated to support them.
phoenix is available under the ISC license.
Note: phoenix is currently in beta status. Although major changes are unlikely at this point, there will be occasional API refinements as the library continues to be developed.