digraph G {
    size ="4,4";
    subgraph cluster_augment {
        label="Augment Phase JVM"
        color=blue
        appjar [shape=box, label="Application Jar File"];
        augmentor [shape=oval, label="Quarkus Augmentation Processor"];
        runner [shape=box, label="Runnable Jar"];
        appjar -> augmentor -> runner;
    }


    subgraph cluster_runjvm {
        label="Runtime JVM"
        color=blue
        runtimestatic [shape=oval, label="Quarkus Runtime Static Init"];
        runtimestart [shape=oval, label="Quarkus Runtime Startup"];
        running [shape=box, label="Running JVM Application"];
        runner -> runtimestatic -> runtimestart -> running;
    }

    subgraph cluster_native_image_build {
        label="Native Image Build JVM"
        color=blue
        imagestatic [shape=oval, label="Quarkus Runtime Static Init"];
        nativeimageprocess [shape=oval, label="Substrate Image Build"];
        nativeimage [shape=box, label="Native Executable"];
        runner -> imagestatic -> nativeimageprocess -> nativeimage;
    }


    subgraph cluster_runnative {
        label="Native Image Execution"
        color=blue
        nativestart [shape=oval, label="Quarkus Native Image Startup"];
        runningnative [shape=box, label="Running Native Application"];
        nativeimage -> nativestart -> runningnative;
    }
}