Skip to main content

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.

Metadata

Release files for git-diff 0.1.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for git-diff 0.1.4
File Size Uploaded Provenance
git_diff-0.1.4.tar.gz 43.1 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for git-diff 0.1.4
File Interpreter ABI Platform
git_diff-0.1.4-py3-none-any.whl Python 3 none any Details

Total release size: 86.2 kB

Release files / git_diff-0.1.4.tar.gz

Download URL git_diff-0.1.4.tar.gz
Size 43.1 kB
Tags Source
SHA-256 checksum
How to use checksums
3cab031366886e4d68359f87a210b0168fdb8f8d73c212cd848c807a5ea6b35f
BLAKE2b-256 checksum
How to use checksums
d6cc8f4bb1cfcb17deeb2c56bc1579f02299c269edd2447ba62b136adc817448
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 13, 2026.

Transparency log

Release files / git_diff-0.1.4-py3-none-any.whl

Download URL git_diff-0.1.4-py3-none-any.whl
Size 43.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f328a8a048f0ea1b11f887aa90dd6d768ba2096607d3b8b2908c76d6fb2e9b3e
BLAKE2b-256 checksum
How to use checksums
5d5363ef0d88c8e1d5e6e0a05b1976f529dacee3d92e98b05705bab77b27406d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 13, 2026.

Transparency log

Security for git-diff 0.1.4

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for git_diff-0.1.4.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 13, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page