digraph { graph [rankdir=LR]; subgraph complete { node [color="gray",fontcolor="gray"]; } subgraph groups { node [color="blue",fontcolor="blue"]; cpp; python; ruby; go; php; dotnet; } milestone3 [color="green",style="filled"]; function_desc_fmt -> function_descs; function_desc_fmt -> binding_generator; binding_generator -> cpp_gen; binding_generator -> python_gen; binding_generator -> ruby_gen; binding_generator -> go_gen; binding_generator -> php_gen; binding_generator -> dotnet_gen; function_descs -> cpp_gen; function_descs -> python_gen; function_descs -> ruby_gen; function_descs -> go_gen; function_descs -> php_gen; function_descs -> dotnet_gen; // Plugins to generate a type of code cpp_gen -> cpp; python_gen -> python; ruby_gen -> ruby; go_gen -> go; php_gen -> php; dotnet_gen -> dotnet; // base code... developed concurrently with _gen's cpp_base -> cpp; python_base -> python; ruby_base -> ruby; go_base -> go; php_base -> php; dotnet_base -> dotnet; // Bindings for various languages. These are just groupings. cpp -> milestone3; python -> milestone3; ruby -> milestone3; go -> milestone3; php -> milestone3; dotnet -> milestone3; }