digraph "GG" {
  compound=true;
	
node [
  fontsize = "12"
];
subgraph cluster_0 {
    label = "onnxruntime.dll";
    "ort_graph" [ label="onnxruntime_graph\n(schemas)" shape="box"];
    "ort_common" [ label="onnxruntime_common" shape="box"];
    "ort_util" [ label="onnxruntime_util" shape="box"];
    "ort_mlas" [ label="onnxruntime_mlas" shape="box"];
    "ort_optimizer" [ label="onnxruntime_optimizer" shape="box"];    
    "ort_session" [ label="onnxruntime_session" shape="box"];
    "ort_graph" -> "ort_common"
    "onnx" [ label="onnx" shape="box"];
    "protobuf" [ label="Google Protobuf" shape="box"];
    "onnx" -> "protobuf"
    "ort_graph" -> "protobuf"    
    "ort_graph" -> "onnx"
    "ort_optimizer" -> "onnx"        
    "ort_framework" [ label="onnxruntime_framework" shape="box"];
    "ort_framework" -> "ort_graph" 
    "ort_framework" -> "ort_common" 
    "ort_framework" -> "onnx" 
    "ort_cpu_provider" [ label="onnxruntime_cpu_provider\n(kernels)" shape="box"];
    "ort_cpu_provider" -> "ort_common" 
    "ort_cpu_provider" -> "ort_framework"
    "ort_cpu_provider" -> "ort_util"
    "ort_cpu_provider" -> "ort_mlas"
    "ort_cpu_provider" -> "onnx"
    "ort_cuda_provider" [ label="onnxruntime_cuda_provider\n(kernels)" shape="box"];
    "ort_cuda_provider" -> "ort_common" 
    "ort_cuda_provider" -> "ort_framework"
    "ort_cuda_provider" -> "ort_util"
    "ort_cuda_provider" -> "ort_mlas"    
    "ort_cuda_provider" -> "onnx"    
    "ort_util" -> "ort_common" 
    "ort_util" -> "ort_framework" 
    "ort_util" -> "ort_mlas" 
    "ort_mlas" -> "ort_common"
    "ort_session" -> "ort_framework"
    "ort_session" -> "ort_common"
    "ort_session" -> "ort_graph"   
    "ort_session" -> "ort_optimizer"
    "ort_session" -> "ort_cpu_provider"            
    "ort_optimizer" -> "ort_cpu_provider"
    "ort_optimizer" -> "ort_common"
    "ort_optimizer" -> "ort_framework"
    "ort_optimizer" -> "ort_graph"
    "capi" [ label="C API" shape="box"];        
}

subgraph cluster_1 {
    label = "Application Interfaces";
    style=filled;
    color=lightgrey;
    node [style=filled,color=white];
    "javaapi" [ label="Java API" shape="box"];
    "csharpapi" [ label="C# API" shape="box"];
    "cppapi" [ label="C++ API\n(header only)" shape="box"];            
    "javaapi" -> "capi"
    "cppapi" -> "capi"
    "csharpapi" -> "capi"    
    "pythonapi" [ label="Python API" shape="box"];
     pythonapi -> ort_session [lhead=cluster_0]
}

"grpc" [ label="gRPC" shape="box"];
"boost" [ label="Boost" shape="box"];
"onnx2" [ label="onnx" shape="box"];
"protobuf2" [ label="Google Protobuf" shape="box"];
"onnx2" -> "protobuf2"
"grpc" -> "protobuf2"

subgraph cluster_2 {
    label = "Applications";
  "onnxruntime_server" [ label="ONNX Runtime Server" shape="box"];
  "onnxruntime_server" -> "cppapi"   
  "app1" [ label="User application" shape="box"];
  "app2" [ label="User application" shape="box"];
}
  "onnxruntime_server" -> "grpc"
  "onnxruntime_server" -> "boost" 
  "onnxruntime_server" -> "onnx2"
}


