Flussgraphen oft auch einfach kurz Graph genannt, sind die "Programme" in DynamicNodes. Im Gegensatz zu klassischen C-/Java-Programmen geben Graphen den Programmablauf nicht explizit vor, sondern modellieren nur die Datenpfade-/abhängigkeiten zwischen den Knoten.
Die Reihenfolge, in der Knoten aktiviert oder Daten transportiert werden, sind in einem Graphen nicht definiert. Der Programmablauf wird nur implizit durch die Regeln vorgegeben, nach denen die Laufzeitumgebung arbeitet.
Das Grundprinzip eines Flussgraphen ist Parallelität. Jeder Knoten, dessen Vorbedingungen für die Aktivierung erfüllt sind (z.B. Änderung an einem Eingang), kann theoretisch sofort arbeiten. Diese Parallelität wird in DynamicNodes mit Hilfe eines Thread-Pools realisiert. Das bedeutet, dass zu jedem Zeitpunkt maximal so viele Knoten aktiv sein können, wie es Threads im Pool gibt. Wird also ein Graph modelliert in dem theoretisch 20 Knoten parallel arbeiten können, DynamicNodes aber auf einem Dual-Core-PC läuft auf dem der Thread-Pool auf 4 Threads eingestellt ist, können zu jedem Zeitpunkt nur 4 Knoten parallel arbeiten.
Jeder Flussgraph in DynamicNodes ist genau einer Laufzeitumgebung zugeordnet. Es kann in einem Prozess theoretisch mehrere Laufzeitumgebungen geben. Die Entwicklungsumgebung von DynamicNodes kommt jedoch zur Zeit mit einer Laufzeitumgebung aus. Jede Laufzeitumgebung kann beliebig viele Graphen enthalten.
Graphen können mit Hilfe des Knotens "Sub-Graph" verschachtelt werden. Dazu werden einzelne Anschlüsse der Knoten in einem Graph als Super-Anschlüsse markiert. Der Sub-Graph-Knoten kapselt den Graph und generiert für jeden seiner Super-Anschlüsse einen normalen Anschluss. Der Sub-Graph muss der gleichen Laufzeitumgebung zugeordnet sein wie der Graph, in dem der Sub-Graph als Knoten verwendet wird.
In der Entwicklungsumgebung von DynamicNodes entspricht jede Projekt-Datei (*.dyn) einem Graphen.