A JetBrains IntelliJ-inspired application platform for C++/Qt desktop applications.
aIDE eliminates the boilerplate of building a Qt desktop application — giving you a pre-wired action registry, settings dialog, configurable keybindings, and structured logging out of the box, so you can focus on your application's unique functionality.
Think of it as the IntelliJ Platform, but for C++20 and Qt.
- Features
- Roadmap
- Requirements
- Integration
- Usage
- Building from Source
- License
- Contributing
- Contributors
- Action Registry — register
QActions under aHierarchicalId(e.g."Main Menu"/"File"/"New") and look them up or bind them to menus anywhere in your application - Settings Dialog — a tree-structured settings UI; add your own pages with a single
SettingsPageRegistry::addPage()call - Configurable Keybindings — per-action key sequences stored in
QSettings, editable through the built-in keybinding settings page - Structured Logging — spdlog-based logging behind a
LoggerInterface, so your components stay decoupled from the logging backend - Translation Support —
TranslatorInterfaceintegrates Qt'sQTranslatorwith an easy hook for loading additional translation files - Qt6 — built and shipped against Qt 6.5+
- C++20 — modern, interface-driven design with no exceptions in public API
The following features are planned for future releases:
- Notification system
- Background task management
- Version control integration
- Appearance settings (fonts, themes, color schemes)
- Additional settings infrastructure
| Dependency | Minimum version |
|---|---|
| CMake | 3.25 |
| C++ compiler | C++20 (GCC 10+, Clang 12+, MSVC 2019 16.11+) |
| Qt | Qt 6.5+ |
| Conan | 2.x (recommended for dependency management) |
Platforms: Linux, macOS, Windows.
aIDE's own dependencies (fmt, spdlog, Catch2) are managed automatically via Conan 2 using the bundled conan_provider.cmake.
The recommended way to consume aIDE is via CMake's FetchContent.
aIDE requires fmt and spdlog. The easiest way to provide them is to use the same conan_provider.cmake hook that aIDE uses internally:
# In your top-level CMakeLists.txt, before project()
set(CMAKE_PROJECT_TOP_LEVEL_INCLUDES
"${CMAKE_SOURCE_DIR}/cmake/conan_provider.cmake"
)Copy conan_provider.cmake into your project's cmake/ directory, then create a conanfile.txt that includes at minimum:
[requires]
fmt/12.1.0
spdlog/1.17.0
[generators]
CMakeDepsAlternatively, provide fmt and spdlog through any other CMake-compatible package manager.
include(FetchContent)
FetchContent_Declare(
aide
GIT_REPOSITORY https://github.com/mrpilot2/aide.git
GIT_TAG v0.3.0
)
FetchContent_MakeAvailable(aide)
target_link_libraries(my_app PRIVATE Aide::AideApplication)A minimal aIDE application:
#include <aide/application.hpp>
#include <aide/settings/settingspageregistry.hpp>
#include <aide/menucontainerinterface.hpp>
#include <aide/aideconstants.hpp>
#include <QLabel>
int main(int argc, char* argv[])
{
// Must be set before constructing Application
aide::Application::setOrganizationName("MyCompany");
aide::Application::setApplicationName("MyApp");
aide::Application::setApplicationDisplayName("My Application");
const aide::Application app(argc, argv);
// Access the main window provided by aIDE
auto mainWindow = app.mainWindow();
mainWindow->setCentralWidget(new QLabel("Hello from aIDE!"));
// Register a custom settings page
aide::core::SettingsPageRegistry::addPage(
std::make_unique<MySettingsPage>(
aide::HierarchicalId("My App")("Preferences"),
aide::AideSettingsProvider::unversionableSettings()));
// Extend an existing menu
auto actionRegistry = app.actionRegistry();
auto fileMenu = actionRegistry->getMenuContainer(
aide::HierarchicalId("Main Menu")("File"));
if (fileMenu.has_value()) {
auto* action = new QAction(QObject::tr("New Project..."));
fileMenu.value()->menu()->addAction(action);
actionRegistry->registerAction(
std::shared_ptr<QAction>(action),
aide::HierarchicalId("Main Menu")("File")("New Project"));
}
return aide::Application::exec();
}A fully working example is available in the demo/ directory.
| Concept | Description |
|---|---|
aide::Application |
Derives from QApplication; owns the main window, logger, settings, and action registry |
aide::HierarchicalId |
Dot-separated ID used to address actions and settings (e.g. "Main Menu"/"File"/"New") |
aide::core::SettingsPageRegistry |
Static registry; call addPage() to add your own pages to the settings dialog |
ActionRegistryInterface |
Look up menus and actions by HierarchicalId; register new actions for keybinding support |
LoggerInterface |
Inject into your components for structured, spdlog-backed logging |
aIDE uses CMake presets for all build configurations.
- CMake 3.25+
- Conan 2.x (
pip install conan) - Clang or GCC (recommended for the
devpreset) - Qt 6.5+
# Configure, build, and test in one step
cmake --workflow --preset workflow-dev-unix-static-debugcmake --preset dev-unix-static-debug
cmake --build --preset build-dev-unix-static-debug
ctest --preset test-dev-unix-static-debug| Role | Description |
|---|---|
client |
Plain build, no extra tooling |
dev |
Clang, warnings-as-errors, ASan + UBSan, coverage, clang-tidy, cppcheck |
ci-strict |
Clang, warnings-as-errors, sanitizers |
ci-static |
Clang, warnings-as-errors, clang-tidy, cppcheck |
Presets follow the naming pattern {role}-{platform}-{linkage}-{build_type}, e.g. dev-unix-static-debug or client-windows-shared.
Tests use Catch2 3.x:
./build/client-unix-static-debug/tests/ut/ut.aide "test name or pattern"
./build/client-unix-static-debug/tests/ut/ut.aide --list-tests
./build/client-unix-static-debug/tests/ut/ut.aide "[tag]"The following CMake options are available (most are set automatically by presets):
| Option | Default | Description |
|---|---|---|
AIDE_ENABLE_DEMO |
ON |
Build the demo application |
AIDE_ENABLE_COVERAGE |
OFF |
Enable coverage reporting |
AIDE_ENABLE_HARDENING |
ON |
Enable compiler hardening flags |
AIDE_ENABLE_SANITIZER_ADDRESS |
platform-dependent | Enable AddressSanitizer |
AIDE_ENABLE_SANITIZER_UNDEFINED |
platform-dependent | Enable UndefinedBehaviorSanitizer |
AIDE_ENABLE_CLANG_TIDY |
OFF (client) / ON (dev) |
Enable clang-tidy |
AIDE_ENABLE_CPPCHECK |
OFF (client) / ON (dev) |
Enable cppcheck |
AIDE_ENABLE_CACHE |
OFF (client) / ON (dev) |
Enable ccache |
AIDE_ENABLE_IPO |
OFF |
Enable link-time optimization |
AIDE_WARNINGS_AS_ERRORS |
OFF (client) / ON (dev) |
Treat warnings as errors |
aIDE is licensed under the GNU General Public License v3.0.
Important: GPLv3 is a copyleft license. If you embed aIDE in your application and distribute it, your application must also be released under a GPL-compatible open-source license. Embedding aIDE in a closed-source or proprietary application is not permitted under this license.
aIDE includes third-party open-source libraries under their own licenses. See 3rd-party-licenses.md for details.
See the contributing docs for more information.
This project follows the all-contributors specification. Contributions of any kind are welcome.
See the full list of contributors.