Paste in any public GitHub repo and get a readable map of how its issues, PRs, and people link together.
I started this because digging through a new repo usually means opening 20 tabs and still not knowing who worked on what with whom. GitHub has all the pieces, it just doesn't show the connections. That's what this tries to fix.
Say you open facebook/react and want context on one issue. Instead of grepping bodies and timelines by hand, you pick a focus like issue:123 and get a small graph around it:
- who opened it, who is assigned
- which PRs mention or close it, and who reviewed them
- what else got referenced along the way
Every edge shows where it came from with a link back to GitHub, so you can verify it yourself. If something is inferred from a keyword like "fixes #123", it says so instead of pretending it's certain.
A couple of ground rules the app enforces to stay readable:
- you always need a
focus(an issue, PR, or user) - depth maxes out at 2, node limit at 400
- big repos load progressively with a queue and cache, not all at once
All numbers you see (stars, issue counts, etc.) come live from the GitHub API. There's no hardcoded stats in the app. The only static list is a few example repos on the landing page for one-click trying, and the DB seed is just local sample data for development.
You need Node 20+, pnpm 9+, and a GitHub token. Docker makes life easier.
git clone https://github.com/RepoGraphs/repograph.git
cd repograph
cp .env.example .env
# open .env and set GITHUB_TOKEN to your token
docker compose upThat gives you:
- web on http://localhost:3000
- api on http://localhost:3001
- postgres + redis behind the scenes
Without Docker, you'll need Postgres 16 and Redis 7 running locally, then:
pnpm install
pnpm db:generate && pnpm db:migrate
pnpm devpnpm dev:web and pnpm dev:api run them separately if you only need one side.
Example flow once it's up: paste https://github.com/facebook/react, hit Explore, open an issue, expand to the linked PR and its reviewers. The URL keeps ?focus=issue:123&depth=1 so you can share exactly what you're looking at.
repograph/
├── apps/web # Next.js frontend, landing + repo pages + graph view (XYFlow)
├── apps/api # NestJS backend, GitHub fetching, ingestion queue, graph endpoints
├── packages/
│ ├── graph-model # shared types, no runtime code
│ ├── github-client # GitHub API wrapper with token pool and caching
│ ├── relationship-engine # turns GitHub data into edges, one file per rule
│ ├── db # Prisma schema and migrations
│ ├── config # eslint / tsconfig / tailwind presets
│ └── ui # small shared components
├── ee/ # paid extras, separate license
└── docs/ # extra notes (MCP, private repos)
More detail is in ARCHITECTURE.md if you want the full contracts.
The main ones in .env:
GITHUB_TOKEN— required for anything live. A read-only fine-grained token is fine.DATABASE_URL,REDIS_URL— defaults point at localhost.RATE_LIMIT_MAX_GRAPHS_PER_DAY_PER_IP— defaults to 3 for anonymous use.CACHE_GRAPH_TTL_SECONDS— how long subgraphs are cached, default 600.INGESTION_MAX_REQUESTS_PER_REPO— API budget per repo, default 5000.
Full list is in .env.example. Don't commit your .env, it's already gitignored.
Basic shape, all JSON:
POST /repositories/resolve
{ "url": "https://github.com/facebook/react" }
GET /repositories/:id/status
GET /repositories/:id/graph?focus=issue:123&depth=1&timeWindow=30d&limit=300
# focus is required, depth 1-2, limit 1-400, timeWindow 7d/30d/90d/all
POST /repositories/:id/graph/expand
{ "nodeId": "issue:facebook/react:123", "depth": 1 }
GET /badge/:owner/:repo.svg
# small embeddable badge, cached about an hour
PRs welcome. Read CONTRIBUTING.md first, it has the setup and the few rules I care about (types stay pure, one file per relationship rule, no hardcoded metrics).
Quick check before you push:
pnpm lint && pnpm typecheck && pnpm testIf you find a vulnerability, don't open a public issue. Email security@repograph.dev or use a private GitHub advisory. More in SECURITY.md.
Core (apps/, packages/) is AGPL-3.0, see LICENSE. Stuff under ee/ is commercial, see ee/LICENSE. Name and logo are ours, see TRADEMARK.md.
Built with Next.js, NestJS, Prisma, Redis, BullMQ, XYFlow, and Tailwind. Inspired by tools like DeepWiki and GitLens, just focused on a different problem: how the work flowed, not what the code does.
Maintained under RepoGraphs. If it helped you, a star is appreciated.