noodles is a standalone C++17 library for rendering interactive node graphs
with OpenGL. It provides the core rendering, layout, spatial indexing, and
undo/redo machinery used to display large directed graphs of nodes connected
by curved links — the kind of UI you see in shader editors, compositors, and
visual programming tools.
The library is host-agnostic: it does not create a window or own a GL
context. The consuming application provides a current OpenGL context and
calls noodles to draw into it.
🚧 Early-stage / experimental. The public C++ API may change without notice.
- GPU-accelerated rendering of node graphs with thousands of nodes
- MSDF (multi-channel signed distance field) text rendering for crisp, zoom-independent labels
- Curved Bezier links with forward and polyline rendering modes
- Spatial index for fast hit-testing and viewport culling
- Pluggable command-based undo/redo stack
- Animator for smooth interpolation of node positions and link geometry
- Cross-platform: Linux, macOS, Windows
core/ Math primitives, node data model, render config, animator
render/ OpenGL renderers (nodes, links, text, stickers, font atlas)
spatial/ Spatial index for hit-testing
undo/ Command pattern + undo manager
assets/ Bundled fonts (Poppins, Baskerville) and GLSL shaders
tests/ GoogleTest-based unit tests
See BUILDING.md for full build instructions.
Quick start:
git clone https://github.com/facebookexperimental/noodles.git
cd noodles
cmake -S . -B build
cmake --build buildThird-party dependencies (GLEW, stb, RapidJSON) are fetched automatically
via CMake FetchContent if they are not already present on the system.
After cmake --install build, link against the installed library:
find_package(noodles REQUIRED)
target_link_libraries(my_app PRIVATE noodles)See the headers under core/ and render/ for the public API.
We welcome pull requests. See CONTRIBUTING.md for the
contributor workflow and Meta's CLA requirements.
noodles is MIT licensed. See LICENSE.txt for details.
This repository bundles third-party assets (Poppins and Baskerville fonts).
Their licenses are reproduced in THIRD_PARTY_LICENSES.txt.
Build-time dependencies fetched by CMake (GLEW, stb, RapidJSON) are also
acknowledged there.