Actually when I started doing the visualizer I started making it with visjs, but the graphs were getting very messy (since I have nodes for functions / classes and edges between them) and not very informative. So decided to change to graphviz + d3 to have better control over the layout and I was much happier with the result. I also only wrote the interface for the d3 visualizer and let Claude implement it (I hadn't use d3 before), and only needed to do some small fixes.
With a lot of nodes / edges, visjs physics was also taking quite a bit until stabilising the force layout, and i had to turn physics off after because the jittering was annoying