⚠️ Development Status: Nodens is currently in active, experimental development with no stable release. It serves primarily as a learning ground and playground for exploring game engine architecture and modern C++ features (specifically C++20 Modules, C++23std::jthread/std::futureconcurrency and C++26 reflection). APIs are highly subject to change.
Nodens is an experimental C++26 framework designed for rapidly developing interactive desktop applications with an immediate mode graphical user interface.
It unifies excellent third-party libraries (e.g. ImGui, Tracy) with a custom, multithreaded core. It provides a robust foundation for prototyping interactive applications ranging from simple visualization tools to custom game engines.
Nodens compiles into a single static library that is linked to your application, ensuring the final product is a single portable executable to streamline distribution.
| Resource | Description |
|---|---|
| Wiki | Tutorials, architecture guides, and how-to articles |
| API Reference | Doxygen-generated class and function documentation — not yet hosted; build locally with cmake --build build --target nodens-docs |
Nodens follows a module-first architecture — public APIs are C++20 module interfaces (.cppm), third-party headers are isolated, and consumers simply import Nodens;.
| Area | Highlights |
|---|---|
| Core | Layer stack system, cross-platform windowing (GLFW), import std; throughout |
| Concurrency | std::jthread thread pool with std::future results, thread-safe Pub/Sub event bus |
| GUI & Visualization | ImGui (Docking + Viewports), ImPlot, ImPlot3D |
| Rendering | OpenGL via GLAD (Vulkan in progress) |
| Profiling | Tracy integration, spdlog logging |
📖 For architecture deep-dives, see the Wiki.
Requirements: Clang 22+, CMake 3.30+, Ninja. See the Building and Toolchain wiki page for compatibility details.
include(FetchContent)
FetchContent_Declare(nodens
GIT_REPOSITORY https://github.com/EldritchCodex/Nodens.git
GIT_TAG dev # Or a specific commit hash for stability
)
FetchContent_MakeAvailable(nodens)
add_executable(myapp main.cpp)
target_link_libraries(myapp PRIVATE Nodens::Nodens)import Nodens;
class MyApp : public Nodens::Application {
public:
static inline const Nodens::ApplicationSpecification appSpecifications = {
.Name = "My Nodens Application",
.WindowWidth = 1280,
.WindowHeight = 720,
.EnableGUI = true,
.IsHeadless = false,
};
MyApp() : Application(appSpecifications) {
// Add layers here, e.g., PushLayer(new MyLayer());
}
};
int main()
{
Nodens::InitializeLoggers();
auto app = MyApp();
app.Run();
return 0;
}git clone https://github.com/EldritchCodex/Nodens.git
cd Nodens
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug
cmake --build build📖 For a full walkthrough, see the Getting Started wiki page.
Nodens includes several examples in the examples/ directory:
| Example | Demonstrates |
|---|---|
circularwave3d |
Immediate mode GUI, real-time 2D/3D plotting with ImPlot and ImPlot3D |
jobsystem |
Thread pool submission, std::future polling, non-blocking UI updates |
asyncevent |
Pub/Sub event bus, thread-safe data collection, live scatter plot visualization |
📖 For detailed walkthroughs of each example, see the Examples Guide on the wiki.
example-tracy-profiling-multithread.mp4
Demonstrations of the Nodens framework in action, featuring real-time interactive simulations.
1D.Simulation.Engine.mp4
2D.Simulation.Engine.mp4
All dependencies are resolved automatically at configure time via CMake FetchContent. Libraries with official CMake packaging (spdlog, GLFW, Tracy) are first searched on the system via find_package; if not found, they are downloaded and built from source. Libraries without official CMake packaging (ImGui, ImPlot, ImPlot3d) are always fetched from source.
| Library | Role / Domain | Description | Version | Resolution Strategy |
|---|---|---|---|---|
| GLAD | Graphics Core | OpenGL function loader. | v0.1.35 | Generated / Vendored |
| GLFW | System & Input | Cross-platform for window, context, and input management. | 3.4 | FetchContent + find_package |
| ImGui | UI / Tools | Bloat-free Immediate Mode GUI. | v1.92.8-docking | FetchContent (always from source) |
| ImPlot | Visualization | 2D data plotting extension for ImGui. | v1.0 | FetchContent (always from source) |
| ImPlot3D | Visualization | 3D data plotting extension for ImGui. | v0.4 | FetchContent (always from source) |
| spdlog | Utilities | Fast, header-only/compiled logging library. | v1.17.0 | FetchContent + find_package |
| Tracy | Profiling | Real-time frame profiler. | v0.13.1 | FetchContent + find_package |
A special thanks to TheCherno. The foundational architecture of Nodens was heavily inspired by the early episodes of his excellent Game Engine series on YouTube.
Additionally, Nodens originally began as a personal project for my undergraduate Computer Graphics course at UFMG. Early iterations of this framework powered several of my academic projects, including boids and galaxians.
[1] The Cherno (no date) Game Engine Series, YouTube. Available at: http://www.youtube.com/playlist?list=PLlrATfBNZ98dC-V-N3m0Go4deliWHPFwT.
[2] Gregory, J. (2019) Game Engine Architecture. Third edition. CRC Press.
[3] Horton, I. and Van Weert, P. (2023) Beginning C++23: From Beginner to Pro. Berkeley, CA: Apress. Available at: https://doi.org/10.1007/978-1-4842-9343-0.
[4] Angel, E. and Shreiner, D. (2012) Interactive computer graphics: a top-down approach with shader-based OpenGL. 6th ed. Boston: Addison-Wesley.
Copyright (c) 2026 EldritchCodex. This project and its entire history are licensed under the MIT License.