Skip to content

EldritchCodex/Nodens

Repository files navigation

License: MIT

⚠️ 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::future for concurrency; and C++23 import std;, std::move_only_function, std::to_underlying, etc). APIs are highly subject to change.

Introduction

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.

Documentation

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

Quick Start

📖 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.

Minimal Application Using Nodens

# 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;
}

Cloning & Building Locally

git clone https://github.com/EldritchCodex/Nodens.git
cd Nodens
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug
cmake --build build

Example Applications

Nodens 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.

Multithreaded Workload Profiling Showcase
example-tracy-profiling-multithread.mp4

Other Applications Showcase

Applications I used in my own research on numerical simulations using earlier versions of Nodens.

1D.Simulation.Engine.mp4
2D.Simulation.Engine.mp4

Dependencies

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

Acknowledgements

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.

References

License

Copyright (c) 2026 EldritchCodex. This project and its entire history are licensed under the MIT License.

About

Modern C++23 framework for cross-platform multi-threaded desktop applications.

Topics

Resources

License

Stars

4 stars

Watchers

1 watching

Forks

Releases

No releases published

Contributors