Browse any GitHub repo and download only the files you need.
No more downloading 100 MB zips for a single config file.
| 🔍 Browse | Explore any public GitHub repo's file tree in your browser |
| ✅ Select | Pick individual files or whole directories with checkboxes |
| 📦 Download | Get a clean .zip containing only what you selected |
| 🔁 Compare | Diff files between two repos at /compare with LCS-based line diff and context hunks |
| 🔎 File search | Filter files by name in both Browse and Compare views |
| 🌿 Branch support | Specify any branch, tag, or commit; compare across branches |
| 🔒 Token support | Add a GitHub token for private repos and higher rate limits |
| 🎨 Syntax highlighting | Diff output with language-aware keyword, string, and comment coloring |
| 📋 Export patches | Download diffs as .patch files |
| ⚡ Lazy loading | Directories load on demand — no waiting for the entire tree |
| 🌙 Dark mode | Respects your system color scheme |
# Install dependencies
npm install
# Start the dev server
npm run devOpen http://localhost:5173 and paste a GitHub repo URL. That's it.
Requirements: Node.js 18+ and npm.
| Page | Route | Description |
|---|---|---|
| Browse | / |
Explore repos, select files, download as .zip |
| Compare | /compare |
Diff files between two repos side by side |
| Input | What happens |
|---|---|
facebook/react |
Opens react's default branch |
https://github.com/vitejs/vite |
Full URL also works |
tailwindlabs/tailwindcss |
Opens tailwind's default branch |
facebook/react + branch dev |
Opens react's dev branch |
facebook/react (A) vs facebook/react branch dev (B) |
Cross-branch diff in Compare |
- URL parsing — Accepts
owner/reposhorthand or fullhttps://github.com/...URLs; branch is auto-detected fromtree/branchpaths. - Branch selection — A dedicated branch input lets you switch to any branch, tag, or commit.
- GitHub Contents API — Lists repo contents lazily (one directory at a time) with
?ref=support. - File search — Filter the tree by filename in real time.
- File selection — Check files individually or use directory checkboxes for batch select.
- Client-side bundling — Selected files are fetched, zipped in-browser with JSZip, and downloaded — no server needed.
- Dual repo input — Paste any owner/repo or full GitHub URL into either panel, each with its own branch selector.
- Smart file matching — Files present in both repos show a
bothbadge; expanding a directory on one side auto-loads it on the other. - LCS line diff — Uses a Longest Common Subsequence algorithm to compute additions, deletions, and unchanged lines.
- Context view — Shows 3 lines of context around changes with
@@hunk headers, just likegit diff. - Live stats — Per-file
+additions-deletionsand unchanged counts in the diff header. - Syntax highlighting — Diff code is highlighted by language (keywords, strings, comments, numbers).
- Export
.patch— Download any diff as a standard unified-format.patchfile.
- By default, the GitHub API limits unauthenticated requests to 60/hour.
- Click the gear icon in the nav bar to open Settings.
- Paste a GitHub personal access token — no scopes needed for public repos;
reposcope for private. - The token is stored in
localStorageand sent with every API call — no server involved.
| Layer | Technology |
|---|---|
| Framework | React 19 |
| Routing | React Router 7 |
| Build tool | Vite 8 |
| Language | TypeScript 6 |
| Styling | Tailwind CSS 4 |
| Bundling | JSZip |
| API | GitHub REST API v3 with ?ref= support |
| Auth | Token via localStorage + Authorization: Bearer header |
| Diff | LCS-based line diff (DP + backtrack) with 3-line context hunks |
| Highlighting | Regex-based syntax highlighting (TS / JS / Python / Rust / Go / Shell + more) |
MIT — see LICENSE for details.