title: Interactive Graphviz viewer with basic node/edge filtering
body: <p>I looked thru <a href="http://www.graphviz.org/Resources.php" rel="noreferrer">Graphviz resources page</a> , and questions <a href="https://stackoverflow.com/questions/7034/graph-visualization-code-in-javascript">1</a> and <a href="https://stackoverflow.com/questions/6344318/pure-javascript-graphviz-equivalent">2</a> and still couldn't find specific answer. My usecase is browsing dependencies among software components (e.g. installable packages), and one particular trait with it is that some common nodes are targets for many edges. For example, almost every executable package depends on libc.</p>
  
  <p>Based on that trait, I'd like to have viewer/library with following capabilities:</p>
  
  <ol>
  <li>Use Graphviz "dot" layout algorithm (force layout algos which are plenty in different libs don't provide good layout quality for the discussed usecase).</li>
  <li>Interactively disable/re-enable some node in a graph (libc example above).</li>
  <li>Interactively disable/re-enable all edged from a particular node (for example, libpng depends on libz, but that's obvious, and can be disabled to not clutter view).</li>
  <li>Re-root graph at some node (show subgraph with only nodes reachable from that node), and "zoom back" to complete graph.</li>
  </ol>
  
  <p>Ideally, this would be a Javascript library, which would allow more complicated manipulation capabilities easily implemented. What's important that basic viewing behaviors as described above were available out of the box - again, I couldn't find something like that, with many solutions being either static viewers, or "freeform editors" allowing to drag nodes around, but not something with sufficiently high-level and useful behaviors.</p>
  
  <p>Finally, if such solution doesn't exist, suggestions for the best framework to implement those features are welcome.</p>