⚠️ 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, concepts for metaprogramming,std::jthread/std::futurefor concurrency; and C++23import std;,std::move_only_function,std::to_underlying, etc). APIs are highly subject to change.
Nodens is an experimental C++23 framework designed for rapidly developing interactive desktop applications with an optional immediate mode graphical user interface.
It unifies excellent third-party libraries (e.g. ImGui, ImPlot, ImPlot3D, Tracy) with a custom core that integrates 3 main systems:
- Layer System that governs the application lifetime and execution flow, visual rendering priority and input event routing (see wiki);
- Event System with InputEvent routing through the LayerStack and a pub/sub thread-safe EventBus for both immediate and queued dispatch of custom event types (see wiki);
- Job System for multithreaded task execution (see wiki).
Nodens follows a module-first architecture where public APIs are C++20 module interfaces (.cppm), third-party headers are isolated on the global fragment module, and consumers simply import Nodens;.
The framework 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 |
📖 For a full walkthrough, see the Getting Started wiki page.
Requirements: Clang 22+, CMake 3.30+, Ninja 1.13.2. See the Building and Toolchain wiki page for compatibility details.
# CMakeLists.txt
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)// main.cpp
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,
.ShouldImGuiBlockInputs = true,
.DefaultTheme = Nodens::EDefaultTheme::Dark
};
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 buildNodens includes several examples in the examples/ directory:
| Example | Demonstrates |
|---|---|
circularwave3d |
Immediate mode GUI, real-time 2D/3D plotting with ImPlot and ImPlot3D |
planetaryscan |
Pub/Sub event bus, multi-threaded job system with 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
Applications I used in my own research on numerical simulations using earlier versions of Nodens.
1D.Simulation.Engine.mp4
2D.Simulation.Engine.mp4
All dependencies are resolved automatically at configure time via CMake FetchContent and are downloaded and built from source.
| Library | Role / Domain | Description | Version | Resolution Strategy |
|---|---|---|---|---|
| GLAD | Graphics Core | OpenGL function loader. | v0.1.35 | Generated from the website |
| 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.
- Gregory, J. (2019) Game Engine Architecture. Third edition. CRC Press.
- 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.
- The Cherno (no date) Game Engine Series, YouTube. Available at: http://www.youtube.com/playlist?list=PLlrATfBNZ98dC-V-N3m0Go4deliWHPFwT.
Copyright (c) 2026 EldritchCodex. This project and its entire history are licensed under the MIT License.