Declarative UI toolkit for modern C++20
  • C++ 81.3%
  • C 13%
  • CMake 4%
  • Objective-C++ 1.1%
  • Python 0.2%
  • Other 0.3%
Find a file
Alex2772 b8b72a7468
yield generator (#747)
* yield generator

* Update aui.core/src/AUI/Util/AYieldGenerator.h

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* address pr comments

* address pr comments

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-06-16 12:44:28 +03:00
.github Soft rename to AArc and AWeakArc (#632) 2026-06-16 00:12:02 +03:00
.idea update copyright year 2025-04-01 10:26:47 +03:00
.vscode Feat/small pimpl (#700) 2026-02-20 17:02:55 +03:00
aui.audio Feat/small pimpl (#700) 2026-02-20 17:02:55 +03:00
aui.core yield generator (#747) 2026-06-16 12:44:28 +03:00
aui.crypt Example for embedding AUI into SDL3 (#659) 2026-05-09 22:24:49 +03:00
aui.curl Feat/aui.boot isolate src (#690) 2026-01-30 05:12:42 +03:00
aui.data Feat/mkdocs (#574) 2025-08-19 21:17:15 +03:00
aui.image Implemented stride in AImageView (#702) 2026-05-16 18:14:35 +03:00
aui.json json path (#743) 2026-05-28 02:47:04 +03:00
aui.mysql update copyright year 2025-04-01 10:26:47 +03:00
aui.network Correct Unicode handling in UTF-8 AString and UTF-32 in text inputs (#596) 2025-09-08 12:47:13 +03:00
aui.remote_tools Hot code reload concept (Linux) (#637) 2025-10-18 19:11:17 +03:00
aui.sqlite Windows XP support (#573) 2025-08-25 11:09:52 +03:00
aui.toolbox add icon test (#622) 2025-09-20 02:22:01 +03:00
aui.uitests Example for embedding AUI into SDL3 (#659) 2026-05-09 22:24:49 +03:00
aui.updater fix updater 2025-11-27 04:09:36 +03:00
aui.views Soft rename to AArc and AWeakArc (#632) 2026-06-16 00:12:02 +03:00
aui.xml update copyright year 2025-04-01 10:26:47 +03:00
cmake feat: unified app-id across all platforms (Windows, X11, GTK, Wayland) (#739) 2026-05-19 16:12:20 +03:00
docs migration to master branch 2026-05-17 19:23:21 +03:00
examples Feat/gtk improvements (#740) 2026-05-19 19:39:02 +03:00
platform validate links (#738) 2026-05-18 02:48:16 +03:00
test fix aui.boot cli tests 2026-05-17 19:08:11 +03:00
test_package Initial Conan adoption (#590) 2025-08-26 21:19:21 +03:00
.clang-format AUI_WITH_STYLE -> AUI_OVERRIDE_STYLE (#656) 2025-11-18 17:14:04 +03:00
.clang-tidy try fix coro lifetime issues (#733) 2026-05-11 02:40:25 +03:00
.gitattributes Выпилено всё 2020-08-21 06:39:12 +03:00
.gitignore Improved interface of OpenGL wrapper (#613) 2025-09-16 17:09:37 +03:00
aui.boot.cmake migration to master branch 2026-05-17 19:23:21 +03:00
CMakeLists.txt migration to master branch 2026-05-17 19:23:21 +03:00
CMakePresets.json Adds CMakePresets.json for build configurations (#560) 2025-08-12 11:21:00 +03:00
CODE_OF_CONDUCT.md Little updates in core, views, and json modules (#261) 2024-03-25 18:31:47 +03:00
conanfile.py workaround freetype with cmake 4.0 (#687) 2026-01-15 16:22:08 +03:00
CONTRIBUTING.md migration to master branch 2026-05-17 19:23:21 +03:00
CREDITS.md update docs 2025-08-23 20:52:46 +03:00
gdb.py repair mkdocs missing pages for Windows OS (#586) 2025-08-26 14:32:35 +03:00
LICENSE Feat/license switch (#295) 2024-06-14 05:17:20 +03:00
lldb.py Feat/license switch (#295) 2024-06-14 05:17:20 +03:00
logo.svg fix logo positioning 2025-01-19 09:15:31 +03:00
mkdocs.yml migration to master branch 2026-05-17 19:23:21 +03:00
README.md validate links (#738) 2026-05-18 02:48:16 +03:00
Resource.rc get rid of rc 2020-12-21 22:19:22 +03:00
valgrind_suppressions.supp Create APathView, Replace GLEW with GLAD, Replace OpenSSL with MbedTLS, Update CURL, MinGW support, Update workflows (#615) 2025-10-27 16:06:15 +03:00

AUI (Advanced Universal Interface)

build badge discord badge

logo

Cross-platform high performance efficient module-based framework for developing and deploying hardware accelerated graphical desktop applications using modern C++20.

The project is inspired by Qt and aims to provide developers with the best possible experience (including, but not limited to: dependency management, packaging, ui building, styling, debugger visualizing) with pure C++, without custom programming languages and external compilers.



Quickstart

Linux dependencies

If you are using Linux, install following dependencies:

Debian/Ubuntu

sudo apt update
sudo apt install pkg-config libglew-dev zlib1g-dev libssl-dev libcurl4-openssl-dev libgtk-3-dev libdbus-1-dev libfontconfig-dev ninja-build libpulse-dev git cmake g++ libxcursor-dev libxi-dev libxrandr-dev libstdc++-static libpulse-dev libdbus-1-dev libepoxy-dev

Fedora

sudo dnf install fontconfig-devel libXi libglvnd-devel libstdc++-static glew-devel pulseaudio-libs-devel libepoxy-devel

AUI App Template

Use our setup-free repository templates for quick start:

  1. Minimal UI - an absolute minimum to start a graphical UI application, without any boilerplate.
  2. Minimal UI with assets - same as above but with assets.
  3. Full-fledged App Template - a complete template to create a GitHub-hosted app project with CI/CD building, testing, releasing, auto updating, code quality checking and more.

Integrating AUI to existing CMake project

To link AUI to your project, use the following CMake script. This script is self sufficient and does not require additional setup, AUI is imported to your project thanks to AUI.Boot.

Download aui.boot (one-time):

curl https://raw.githubusercontent.com/aui-framework/aui/refs/heads/master/aui.boot.cmake -o aui.boot.cmake

Update CMakeLists.txt

CMakeLists.txt:

# Standard routine
cmake_minimum_required(VERSION 3.16)
project(aui_app)

include(aui.boot.cmake)
set(AUI_VERSION v8.0.0-rc.21)

# import AUI
auib_import(aui https://github.com/aui-framework/aui
        COMPONENTS core views
        VERSION ${AUI_VERSION})


# Create the executable. This function automatically links all sources from the src/ folder,
# creates CMake target and places the resulting executable to bin/ folder.
aui_executable(${PROJECT_NAME})

# Link required libs
aui_link(${PROJECT_NAME} PRIVATE aui::core aui::views)

src/main.cpp:

#include <AUI/Platform/Entry.h>
#include <AUI/Platform/AWindow.h>
#include <AUI/Util/UIBuildingHelpers.h>
#include <AUI/View/ALabel.h>
#include <AUI/View/AButton.h>
#include <AUI/Platform/APlatform.h>

using namespace declarative;

AUI_ENTRY {
    auto w = _new<AWindow>("Window title", 300_dp, 200_dp);
    w->setContents(Centered {
      Vertical {
        Centered { Label { "Hello world from AUI!" } },
        Centered {
          Button { "Visit GitHub page" }.clicked(w, [] {
              APlatform::openUrl("https://github.com/aui-framework/aui");
          }),
        },
      },
    });
    w->show();
    return 0;
}

Result:

Example window

Key features

  • Extended common types (containers, strings, streams, etc...)
  • Graphical User Interfaces, including framework tools for fast declarative UI producing using modern C++ capabilities
  • Resource compiler (assets)
  • Internationalization (i18n)
  • DPI support
  • CMake deployment scripts
  • Model binding
  • Encryption
  • IO streams
  • Networking, including http(s) requests
  • Both asynchronous and synchronous application architecture support

Module list

  • aui.core - basic types (containers, strings, streams, etc...)
  • aui.crypt - wrapper around OpenSSL for encryption functionality
  • aui.curl - wrapper around libcurl for http/https requests
  • aui.image - popular image format loader
  • aui.json - JSON parser
  • aui.network - networking
  • aui.toolbox - resource compiler
  • aui.uitests - UI testing based on GTest
  • aui.views - UI toolkit
  • aui.xml - XML parser

Feature support

  • equals this feature is unusable on given platform
  • - equals unsupported
  • ? equals planned
  • + equals has naive implementation that may contain issues
  • # equals fully supported
Feature or module Windows Vista+ Windows XP Linux Android MacOS iOS
aui.core # # # # # #
aui.crypt # # # # # #
aui.curl # # # # # #
aui.image # # # # # #
aui.json # # # # # #
aui.network # # # # + +
aui.toolbox # # # #
aui.views # ? + + + +
aui.xml # # # # # #
Assets # # # # # #
App packaging # # # # # #
HiDPI # # # # # #
Filesystem # # # # + +
Prebuilt binaries # - # ? ? ?
Process creation # # # ?
AUI Devtools # # # - # -
Custom window # # # ? ? ?
IME - - + - + -
Touch - - - # - #
Drag n drop + - - - -
Global menu ? ?
OpenGL renderer # # # # # #
Software renderer # # # ?
Hot Code Reload - - # - - -
Compiler Support
MSVC 19+ (Visual Studio 20+) Full
gcc (13+) Full
MinGW (13+) Static only*
Cross-compile MinGW Static only*
clang Full
* Use -DBUILD_SHARED_LIBS=OFF

Used libraries

IDE Plugins

Refer to documentation page

Projects using AUI

Examples

Check the examples page in our docs or examples/ dir in our repo.

Fractal

Views

Minesweeper

Licensing

Please refer to LICENSE.

Our project is published under Mozilla Public License Version 2.0 (the License). In short, you can use AUI for free in your private (i.e, that does not go outside your company) projects.

If you would like to publish your project (including, but not limited to: sell, sign, release in software stores like Google Play or App Store), does not matter open source, closed source or proprietary, the License obligates you to:

  • Mention your project uses "AUI Framework" in your legal notice.
  • Release your changes to AUI (if any) under the same terms (the License).

As for the latter, you are welcome to upstream your changes (i.e., propose your changes to this repository).

You are not obligated to disclose your own sources nor release your own project under the same terms (License).

Maintaining

The AUI framework is maintained by Alexey Titov (Alex2772, alex2772sc 'at' gmail.com) with contributions from many other people. Join our Discord community for voice calls.

Let us know if your contribution is not listed or mentioned incorrectly, and we'll make it right.

The project evolves fast and inconsistently, possibly breaking backward compatibility. The APIs likely to be changed/removed are marked in docs as experimental. Consult with our migration guides on release pages.

Contributing

You are welcome to open issues and pull requests on our GitHub repository. This project is maintained by a team of volunteers on a reasonable-effort basis. As such, we can accept your issue, but we can't guarantee resolution. It's all depends on severity and our own needs. In fact, we'd be happy if you submit a pull request. In this case we'll do our best to help you merge your changes to upstream.

Please refer to CONTRIBUTING.md

Star History