digraph ori { edge [arrowhead=normal] node [shape=box3d, height=0.8] graph [splines=ortho] rankdir="TB" ori [label="ori\n(command line)"] orisync [label="orisync\n(deamon)"] orifs [label="orifs\n(FUSE driver)"] { rank=same; ori; orisync, orifs } libori [label="libori", width=3] libFUSE [label="libFUSE"] { rank=same; libori; libFUSE } ori -> libori [dir="both"] orisync -> libori [dir="both"] orifs -> libori [dir="both"] orifs -> libFUSE [dir="both"] repo [label="Local Repository", shape=rect] index [label="Index", shape=rect] store [label="Object\nStore", shape=rect] meta [label="Object\nMetadata", shape=rect] { rank=same; index; store, meta } libori -> repo [dir=back, style=dotted] repo -> index repo -> store repo -> meta }