A modern web dashboard for visualizing inter-repository dependency graphs produced by gh-repo-map. Designed for enterprise scale — handles 10,000+ repositories across multiple GitHub organizations.
- 📊 Overview Dashboard — Stats, dependency type distribution, critical repos at a glance
- 🔍 Searchable Repo List — Virtualized table with sorting, filtering, and keyboard navigation
- 🌐 Interactive Dependency Graph — WebGL-powered (Sigma.js) visualization with zoom, pan, and highlighting
- 🎯 Smart Filtering — Filter by org, ecosystem, dependency type, confidence level, connected repo group (weak), archived toggle, and free-text search
- 📋 Repo Detail Panel — Drill into direct, transitive, and reverse dependencies
- 💡 Insights — Critical repos, mutual dependency groups (strong), orphan repos, connected repo group explorer (weak), connectivity comparison, migration cohort guidance
- 📤 Export — Share filtered views via URL, export as JSON or CSV
- 🌓 Dark Mode — Full Primer design system integration
- ♿ Accessible — WCAG 2.1 AA, keyboard navigation, screen reader support
npm install
npm run devOpen http://localhost:5173 and upload a gh-repo-map JSON file.
- Generate a dependency map:
gh repo-map --orgs my-org --output repomap.json - Open the dashboard and upload the JSON file (drag-and-drop or file picker)
- Explore the dependency graph, filter by org/type, and drill into individual repos
For split files (per-org mode), upload all files at once — they'll be automatically merged.
- Repo Groups (Weak): ignores edge direction; good for migration wave sizing and blast-radius scoping.
- Repo Groups (Strong): keeps edge direction; shows repos that are mutually reachable and harder to separate.
Example: if A depends on B, B depends on C, and C depends on B — weak grouping places A, B, C together (any connection counts), while strong grouping yields {B, C} as a group (they depend on each other) and A stays separate (nothing depends back on A).
Caveat: both group types can include external/unscanned repos when dependencies target repos outside the scanned set.
- React 19 + TypeScript (strict mode)
- GitHub Primer Design System (@primer/react)
- Sigma.js v3 + Graphology (WebGL graph visualization)
- Zustand (state management with URL sync)
- Zod (runtime schema validation)
- Vite (build tooling)
- Vitest + React Testing Library (testing)
npm run dev # Start dev server
npm run build # Production build
npm run test # Run tests
npm run test:watch # Watch mode
npm run lint # Lint
npm run typecheck # Type checknpx tsx src/test/fixtures/generate.tsGenerates small.json (50 repos), medium.json (1K repos), and edge-cases.json fixtures.
- In GitHub, go to Settings > Pages and set Source to GitHub Actions.
- Push to
main(or run Actions > Deploy to GitHub Pages > Run workflow). - The workflow installs dependencies, runs tests + type-check, builds, and deploys
dist/.
The workflow sets VITE_BASE_PATH from actions/configure-pages for correct project Pages paths.
Static SPA with zero backend. Users upload JSON files directly in the browser.
- Data pipeline: File → Web Worker (parse + validate + build graph) → Zustand store
- Graph engine: Graphology (data model) + Sigma.js (WebGL rendering)
- Filtering: Toggling hidden attributes on graph nodes/edges (no rebuild)
- Scale: Tested with 10K+ repos, virtualized lists, WebGL rendering
MIT