Interactive force-directed graph of a GitHub organisation's repositories and their interdependencies.
-
Add this repo to your org. GitHub does not allow forking a public repo as a private one, so pick the option that fits:
- Public: click Fork and select your org as the destination.
- Private: go to github.com/new/import, paste this repo's URL, set visibility to private, and import.
-
Create a Personal Access Token (PAT) with
repo(orpublic_repofor public-only) andread:orgscopes:- Go to GitHub → Settings → Developer settings → Personal access tokens → Tokens (classic)
- Add it as a repository secret named
GH_TOKENunder Settings → Secrets and variables → Actions.
-
Enable GitHub Pages: go to Settings → Pages → Branch:
main/ Folder:/docsand save. -
Run the workflow: go to Actions → Update visualization → Run workflow. Data is fetched automatically every Monday at 03:00 UTC after that.
Your graph will be live at https://<your-org>.github.io/<repo-name>/.
# Set your GitHub token (needs read:org + repo or public_repo scope)
export GITHUB_TOKEN=ghp_xxxx
uv run fetch.py <your-org>Then serve the docs/ folder with a local HTTP server (required for the JSON data to load correctly):
# Python (built-in)
python3 -m http.server 8000
# Node.js
npx serve docsOpen http://localhost:8000 in your browser to preview the graph.
GITHUB_TOKEN needs a Personal Access Token (PAT), not an SSH key.
- Go to https://github.com/settings/tokens
- Click Generate new token (classic) or Fine-grained token
- Grant scopes:
repo(orpublic_repo) andread:org - Copy the token and set it in your environment or
.env:
GITHUB_TOKEN="ghp_yourActualTokenHere"uv run fetch.py <org> [--output PATH] [--skip-forks] [--skip-archived] [--limit N]
| Flag | Default | Description |
|---|---|---|
--output |
docs/data.json |
Output path for the JSON data |
--skip-forks |
false | Skip forked repositories |
--skip-archived |
false | Skip archived repositories |
--limit N |
all | Process at most N repos (useful for testing) |
- Force-directed graph layout with draggable nodes
- Node tiles showing repo name, description, stars, badges
- Expandable sections per node: Created date, Contributors, Commit activity, Languages, Dependencies, README
- Expanded sections stay visible even when Details is collapsed
- Settings sidebar: toggle orphan/standalone nodes, expand any section for all nodes at once
- Stats sidebar: total repos & contributors, LoC by language, aggregate commit graph, popular external deps & top contributors with hover-to-highlight
- Hover a repo → dims unrelated nodes
- Hover a dep or contributor in the Stats sidebar → highlights all repos that use/include them
- Pan (drag background) and scroll-to-zoom
fetch.py reads package files (package.json, requirements.txt, pyproject.toml, go.mod, Cargo.toml, Gemfile) and cross-references discovered dependency names against the list of repos in the org. Matches become graph edges.