Difflicious
A local diff viewer for comparing your working directory to any branch, not just HEAD.
No forge, no push — just run it in your repo.
Screenshots
Usage
The quickest way — no install required:
uvx difflicious
Or with Docker:
docker run -it --rm -v "$PWD:/workspace" -p 5000:5000 insipid/difflicious
Then open http://localhost:5000 in your browser.
Installation
For regular use, install from PyPI:
pip install difflicious
difflicious
See INSTALLATION.md for Docker, source installation, and full configuration options.
If you prefer not to install globally, add one of these to your shell profile:
# via uvx
difflicious() { uvx difflicious "$@"; }
# via Docker (uses DIFFLICIOUS_PORT if set, otherwise 5000)
difflicious() { docker run -it --rm -v "$PWD:/workspace" -p "${DIFFLICIOUS_PORT:-5000}:${DIFFLICIOUS_PORT:-5000}" insipid/difflicious "$@"; }
Features
Like your favourite forge, and then some:
- Side-by-side diff view with line numbering
- Syntax highlighting for 100+ languages (via Pygments)
- Context expansion to see more surrounding code
- Search and filter across files
- Light and dark themes
- Live auto-reload on file changes (SSE)
- Font customization via
DIFFLICIOUS_FONTenvironment variable - Compare against any branch — defaults to remote HEAD, configurable per session
- Toggle staged and unstaged changes independently
- UI state is persistent — collapsed files, hidden files, and view settings are remembered in the browser across sessions
Configuration
All options can be set via environment variable or CLI flag:
| Environment variable | CLI flag | Default | Description |
|---|---|---|---|
DIFFLICIOUS_PORT |
--port, -p |
5000 |
Port to listen on |
DIFFLICIOUS_HOST |
--host, -h |
127.0.0.1 |
Host to bind to |
DIFFLICIOUS_FONT |
— | jetbrains-mono |
Code font (--list-fonts to browse) |
DIFFLICIOUS_DISABLE_GOOGLE_FONTS |
— | false |
Use system fonts only |
DIFFLICIOUS_AUTO_RELOAD |
--auto-reload / --no-auto-reload |
true |
Auto-reload on file changes |
DIFFLICIOUS_WATCH_DEBOUNCE |
--watch-debounce |
1.0 |
File watcher debounce delay (seconds) |
DIFFLICIOUS_DEBUG |
--debug |
false |
Verbose debug logging |
See INSTALLATION.md for full configuration details.
Technology
- Backend: Flask, GitPython, Pygments, unidiff
- Frontend: Alpine.js, Tailwind CSS
- Real-time: Server-Sent Events
Documentation
- INSTALLATION.md — installation options, configuration, environment variables
- DEVELOPING.md — development setup, testing, code conventions
- CHANGELOG.md — version history
- docs/TROUBLESHOOTING.md — common issues
Contributing
See CONTRIBUTING.md.
Metadata
Release files for difflicious 0.15.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| difflicious-0.15.0.tar.gz | 3.4 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| difflicious-0.15.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 3.5 MB
Release files / difflicious-0.15.0.tar.gz
| Download URL | difflicious-0.15.0.tar.gz |
|---|---|
| Size | 3.4 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0e6a5f902e26cbbd4ce97b39d9a1aab4b55a07372de613e02179e0942fcd08ea
|
|
BLAKE2b-256 checksum How to use checksums |
66555f4dc2f4d0c5c937d070f60041ee54d0a5d73c921e514df82301c387a3d3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Aug 25, 2026.
Transparency logRelease files / difflicious-0.15.0-py3-none-any.whl
| Download URL | difflicious-0.15.0-py3-none-any.whl |
|---|---|
| Size | 142.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
dccd260ecd55a4d67562229989fa55bcce0cf6506a7c9f42e30b57c5c4d6d812
|
|
BLAKE2b-256 checksum How to use checksums |
3195da62e24fd8e3080d9342cc8ba2abf6d6ced86667b5497369cc93cb6f2c03
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Aug 25, 2026.
Transparency log