Skip to content

Beautiful git viewer in your browser.. like GitHub, but local and instant. No tokens. No accounts. No internet. Just cmd git-diff and a browser tab.

License

Notifications You must be signed in to change notification settings

ankit-chaubey/git-diff

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

10 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

git-diff πŸ”

Beautiful git viewer in your browser β€” like GitHub, but local and instant.
No tokens. No accounts. No internet. Just git-diff and a browser tab.

PyPI version Python 3.8+ License: MIT CI Zero dependencies


The problem

$ git diff HEAD~3
diff --git a/src/api/users.py b/src/api/users.py
index 3f2a1b8..9c4d72e 100644
--- a/src/api/users.py
+++ b/src/api/users.py
@@ -142,6 +142,9 @@ class UserService:
...

Raw git diff in a terminal is painful β€” no syntax colors that actually help, no side-by-side view, no file navigation, no history, no blame. You have to mentally parse it line by line.

git-diff opens a GitHub-quality interface in your browser β€” right now, from any repo, with no setup.


Install

pip install git-diff

That's it. No npm, no node, no extra deps.


Usage

# Open viewer for the current repo
cd /path/to/your/project
git-diff

# Specify a repo path
git-diff --path /path/to/repo

# Use a custom port
git-diff --port 8080

# Bind to all interfaces (share on LAN)
git-diff --host 0.0.0.0

# Don't auto-open browser (print URL only)
git-diff --no-browser

# Show 5 lines of context in diffs
git-diff --context 5

# Print version
git-diff --version

A browser tab opens automatically at http://127.0.0.1:7433.


Features

πŸ”€ Diff Viewer (GitHub-style)

  • Line-by-line diff with line numbers, color-coded + additions / - deletions
  • Hunk headers showing function/class context (@@ ... @@ def my_function)
  • File status badges β€” Added, Modified, Deleted, Renamed (with similarity %)
  • Collapsible files β€” click any file header to expand/collapse
  • Binary file detection
  • Support for thousands of changed files in a single view

πŸ“Š Repository Overview

  • Total commits, contributors, files, branches, tags, repo size
  • Commit activity heatmap (last 90 days, GitHub-style calendar)
  • Language breakdown β€” files and percentage by extension with color chart

πŸ“œ Commit History

  • Browse all commits with author, date, relative time ("3 hours ago")
  • Click any commit to see its full diff instantly
  • Merge commit detection
  • Parent commit links (click to navigate)
  • Ref decoration β€” branch labels, HEAD pointer, tags
  • Search and filter commits in the sidebar

πŸ”€ Compare Any Two Refs

  • Compare any branch vs branch, tag vs tag, SHA vs SHA, or any mix
  • Shows all commits in the range + full file diff
  • One-click "Diff vs current" button on every branch in the branches panel
  • Keyboard shortcut: Ctrl/Cmd + K

✏️ Working Tree Changes

  • Staged and Unstaged changes clearly separated
  • Click any file in sidebar to jump to its specific diff
  • Real-time (refresh to update)

πŸ“ File Browser

  • Browse all tracked files
  • View file content with syntax-aware line numbers
  • File history β€” all commits that touched a file
  • Blame view β€” who wrote which line, with commit hash and date
  • Filter by filename in sidebar

πŸ‘₯ Contributors

  • Ranked leaderboard by commit count
  • Visual progress bars
  • Email address, commit count

🌿 Branches & Tags

  • All local and remote branches
  • Tags with dates and annotation messages
  • "Diff vs current" button on every branch

πŸ“¦ Stashes

  • View all stashed changes
  • Click to see full diff for any stash entry

🎨 3 Themes

Theme Description
πŸŒ™ Dark GitHub dark β€” easy on the eyes
β˜€οΈ Light GitHub light β€” clean and crisp
⚫ AMOLED True black β€” perfect for OLED screens

Themes are persisted in localStorage β€” your preference sticks across sessions.

⌨️ Keyboard Shortcuts

Shortcut Action
Esc Return to overview
Ctrl/Cmd + R Refresh repository data
Ctrl/Cmd + K Open Compare view
Ctrl/Cmd + \ Toggle sidebar

How it works

git-diff is a single Python package with zero runtime dependencies. It:

  1. Detects your git repository root (walks up from CWD)
  2. Collects all data by running git subprocess commands
  3. Starts a tiny HTTP server using Python's built-in http.server
  4. Serves a single-page web app with full UI
  5. Opens your browser automatically
  6. Exposes a /api/* REST endpoint for on-demand data

Everything runs 100% locally. No data leaves your machine.


API Reference

git-diff exposes these endpoints (accessible at http://127.0.0.1:7433):

Endpoint Description
GET / The web UI
GET /api/data Full initial data bundle (repo info, commits, diffs, etc.)
GET /api/commit?hash=<sha> Commit diff + detail for a specific SHA
GET /api/commits?branch=&limit=&offset=&search=&author= Paginated commit history
GET /api/staged[?context=N] Current staged diff
GET /api/unstaged[?context=N] Current unstaged diff
GET /api/range-diff?base=<ref>&compare=<ref> Diff between any two refs
GET /api/file?path=<path>[&ref=<ref>] File content at a ref
GET /api/file-log?path=<path>[&limit=N] Commit history for a file
GET /api/blame?path=<path>[&ref=<ref>] Blame for a file
GET /api/stash?ref=<stash-ref> Stash diff
GET /api/activity[?days=N] Commit activity by day
GET /api/langs Language statistics
GET /api/refresh Re-collect all data
GET /api/git?cmd=<git-args> Safe read-only git passthrough

Supported git commands (internal)

git-diff internally uses these git operations to collect data:

git rev-parse          β€” detect repo root, resolve refs
git log                β€” commit history, activity stats, file history
git show               β€” commit detail, file content at ref
git diff               β€” staged, unstaged, commit diffs
git status             β€” working tree status
git blame              β€” line-level authorship
git stash list/show    β€” stash entries and diffs
git branch             β€” local and remote branches
git for-each-ref       β€” tags with metadata
git shortlog           β€” contributor stats
git ls-tree            β€” tracked file listing
git remote             β€” remote URLs
git rev-list           β€” commit counts

Supported Platforms

Platform Status
macOS (10.14+) βœ… Fully supported
Linux (Ubuntu, Debian, Fedora, Arch…) βœ… Fully supported
Windows 10/11 βœ… Fully supported
Python 3.8 – 3.13 βœ… Tested via CI

Development

# Clone the repo
git clone https://github.com/ankit-chaubey/git-diff.git
cd git-diff

# Install in editable mode
pip install -e .

# Run on itself β€” great for testing!
git-diff

Project structure

git-diff/
β”œβ”€β”€ git_diff/
β”‚   β”œβ”€β”€ __init__.py         Package metadata (version, author)
β”‚   β”œβ”€β”€ __main__.py         python -m git_diff support
β”‚   β”œβ”€β”€ cli.py              Argument parsing, startup banner
β”‚   β”œβ”€β”€ git_data.py         All git data collection (subprocess calls)
β”‚   β”œβ”€β”€ server.py           HTTP server + REST API endpoints
β”‚   └── templates/
β”‚       └── index.html      Full single-page web app (HTML + CSS + JS)
β”œβ”€β”€ .github/
β”‚   └── workflows/
β”‚       β”œβ”€β”€ publish.yml     PyPI trusted publisher (OIDC)
β”‚       └── ci.yml          CI: test on 3 OS Γ— 5 Python versions
β”œβ”€β”€ pyproject.toml          PEP 517 build config
β”œβ”€β”€ README.md
β”œβ”€β”€ CHANGELOG.md
└── LICENSE                 MIT

Changelog

See CHANGELOG.md.


License

MIT Β© 2024-Persent Ankit Chaubey


Author

Ankit Chaubey
πŸ“§ ankitchaubey.dev@gmail.com
πŸ™ github.com/ankit-chaubey


Made with ❀️ because raw git diff in terminal hurts.

About

Beautiful git viewer in your browser.. like GitHub, but local and instant. No tokens. No accounts. No internet. Just cmd git-diff and a browser tab.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •