transforming your .proto files into .dot files (and .svg, .png if you happen to have graphviz installed)
you can find an online demo of this tool here
you can download the sources (from this page) and build protodot yourself, or
you can download pre-built binaries for a few selected environments (or from here):
protodot output is highly customizable through its configuration file and a set of templates files.
if you installed protodot from the binary distribution - you may want to extract aforementioned files by running:
   ./protodot -install
- -src what.proto- location and name of the source file, required
- -config config.json- location and name of the configuration file, optional
- -select .one.two;three.four- name(s) of the selected elements to show, optional, explained later in this document
- -output save-it-here- name of the output file, optional
- -inc /abc/def;/xyz- (semicolon separated) list of the include directories, optional
tbd
sometimes the resulting diagram can be overwhelming.
you have an option to limit the output to the elements that interest you the most, hence -select args command line option.
so far, args in -select args can take one of the three available forms:
- list of the elements (and their dependencies) that you want to see included (separated by ;). the elements can beenums,messages,rpcmethods andservices.
- if you specify *as an argument - this will result in the inclusion of the elements declared in the main.protofile (specified in-srcargument) and their dependencies. in other words: all the unused elements declared in all the included.protofiles will not be shown.
- if you specify importsas an argument -protodotwill generate import dependency graph (see an example below)
using https://github.com/googleapis/googleapis/blob/master/google/privacy/dlp/v2/dlp.proto as the source
everything declared in the root .proto file and all the imports will be produced:
only elements declared in the root .proto file and their dependencies will be produced:
only imports dependency graph will be produced:
in this particular case, the name of the rpc method was specified: this will result in production of the requested rpc method, it's encompasing service element and all the dependencied of the method:
same as above, but instead of rpc method, name of the message was specified:
- install graphviz(see https://graphviz.gitlab.io/download/ for the instructions)
- specify the location of the dotutility (which is a part ofgraphviz)in your version of configuration file, e.g.
{
	"locations": {
		"graphviz":	"/path/to/dot",
- set approptiate optionsin your version of configuration file, e.g.
{
	"options" : {
		"generate .png file":		false,
		"generate .svg file":		true,