this post was submitted on 31 May 2026
14 points (100.0% liked)

programming

301 readers
14 users here now

  1. Post about programming, interesting repos, learning to program, etc. Let's try to keep free software posts in the c/libre comm unless the post is about the programming/is to the repo.

  2. Do not doxx yourself by posting a repo that is yours and in any way leads to your personally identifying information. Use reports if necessary to alert mods to a potential doxxing.

  3. Be kind, keep struggle sessions focused on the topic of programming.

founded 2 years ago
MODERATORS
 

I've been using a package called pyvis for a while to help visualize general graph data, but it's been pretty limited in terms of exposed API for vis.js (which is what it renders in) so I've been working on a more general full featured wrapper in Python that uses a fast graph library backend.

My test project is to visualize the repository as an interactive graph. It builds the html template in under a second right now and I'm planning on trying to make it something you can use to generate interactive repo graphs with.

It's still very WIP, but I think it's fun so I wanted to share.

Also, you can double click any node to have it open the source on GitHub. My goal is to make it host agnostic so you can just slap a repo url in there and it'll generate a graph with properly formatted links. I've got all the components exposed though, so you can manipulate how the link is generated as needed.

you are viewing a single comment's thread
view the rest of the comments
[–] QuillcrestFalconer@hexbear.net 2 points 1 week ago (1 children)

Oh I've been working on something like this, but it's a frontend/vs code extension to visualize dependency graphs of a project (it shows dependencies between files and function/classes/etc). It also includes features to filter nodes, cluster nodes, change graph layouts. It's done with typescript, svelte, d3.js and graphviz compiled to wasm

[–] invalidusernamelol@hexbear.net 1 points 1 week ago (1 children)

This project would probably be compatible, since the js portion is just written by a jinja template. Python is just used to build the actual graph data and format it for visjs.

The data attribute is just a dictionary though, so you could really initialize it with anything. I just wrote the schema for visjs.

Curious about the performance of d3 vs vis. I will probably end up doing some rudimentary physics calculation before I write the graph, bit being able to avoid that would be nice.

[–] QuillcrestFalconer@hexbear.net 2 points 5 days ago (1 children)

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

[–] invalidusernamelol@hexbear.net 1 points 5 days ago* (last edited 5 days ago) (1 children)

I might end up doing that, or just disabling physics when I need to, but still use visjs.

I just had to make a PR today because the node system wont properly resolve size when using icon shapes lol.

I might need with ast stuff tomorrow and see if I can try and get a rudimentary version of what you have working with pygraph. I'd probably have it generate multiple graphs from a view (e.g. module -> class, then click a class to get class -> function, or use hidden edges for some things and put everything in different style groups based on inheritance?).

Would also be cool to keep the GitHub links in place, but instead tie the link with the symbol line number so you get a permalink

[–] QuillcrestFalconer@hexbear.net 1 points 4 days ago (1 children)

ast stuff tomorrow and see if I can try and get a rudimentary version of what you have working with pygraph.

For mine I wrote a python script walking through the ast of a python project to generate the graph, so that I had a graph on hand I could use to build and test the visualizer.

Last time I worked on it I started implementing the package for the vscode extension and wrote some typescript code to build a graph for typescript/javascript files. It is still very barebones but I managed to get the basic extension set up working. Haven't worked on it in a while though.

If you want I can dm you the git repo and the .io with the frontend

I'm down, I already dm'd you about some changes I made