Vertex avoidance
You can instruct VisuallyJs to attempt to route edges around vertices, either for all edges in your app or just for some specific type(s) of edge.
Example
The key option being avoidVertices in the edges config. Internally, vertex avoidance is computed using an A* algorithm, which is based upon a grid, and so we do recommend you use a grid in your app if you've got avoidVertices set. Without a grid set you can sometimes see an effect where a path segment's location changes as you drag an element, and then snaps back to some multiple of the A* grid. The A* grid has a cell size of 10 pixels and so the best results are obtained from setting your own grid to a multiple of that.
Path constrainment
You can constrain the travel of the path in a few different ways.
Orthogonal routing
Orthogonal routing constrains path segments to travel either horizontally or vertically, as shown at the top of the page.
Any angle
With this setup path segments can travel at any angle:
Smooth connectors
For some applications the above can look a little jerky, and so one thing you can do is set smooth on your connector, to get that Graphviz effect:
Straight connectors with smooth:true set are aliased in VisuallyJs to the connector name Smooth:
Metro routing
"Metro" routing constrains path segments to travel either horizontally, vertically, or at 45 degrees.