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
}
