⛳️ duff is a specialized tool designed to visualize progress across multiple repositories, focusing specifically on tracking status through the familiar git diff format.
Runs entirely in the browser — no server required. Repositories are accessed directly via the File System Access API.
Visual diff is also supported.

- Multi-Repo Visualization: Monitor the status of multiple Git repositories from a single, unified dashboard.
- Serverless / Browser-Only: All Git operations run client-side using
isomorphic-gitand the File System Access API. No backend needed. - Git Diff Focus: Gain deep insights into changes with high-fidelity
git diffrenderings. - Interactive History Graph: Visualize commit history and stashes with an intuitive graph interface.
- Flexible Diff Ranges: Select and compare changes between any two points in history (commits, stashes, or the working tree).
- Visual Image Diff: Detect even subtle changes in images (
png,jpg,webp,svg) with pixel-perfect comparison usingpixelmatch. - Optimized for the AI Era: Quickly grasp development progress to facilitate seamless collaboration between humans and AI.
- Framework: React 19
- Build Tool: Vite
- Language: TypeScript
- Key Libraries:
isomorphic-git: Pure JavaScript Git implementation for browser-side Git operations.idb-keyval: IndexedDB wrapper for persistingFileSystemDirectoryHandleacross sessions.diff2html: Advanced diff rendering.pixelmatch: Pixel-level image comparison.@hello-pangea/dnd: Intuitive drag-and-drop interface.lucide-react: Modern icon set.
- A Chromium-based browser (Chrome, Edge, Arc, etc.) with File System Access API support.
- Node.js 20+ (for development)
git clone git@github.com:chigichan24/duff.git
cd duff# Install root dependencies (Playwright etc.)
npm install
# Install client dependencies
cd client
npm install
cd ..npm run devClick "Add your first repository" to select a local Git repository.
npx playwright install chromium
npx playwright test.
├── client/ # Frontend (React + Vite + isomorphic-git)
│ └── src/
│ ├── lib/
│ │ ├── fsaAdapter.ts # File System Access API → Node.js fs adapter
│ │ ├── gitService.ts # Git operations abstraction (status, log, diff)
│ │ └── repoStore.ts # Repository metadata persistence (localStorage + IndexedDB)
│ └── components/
│ └── GitGraph.tsx # Commit history graph
├── e2e/ # Playwright E2E tests
├── package.json # Root scripts (dev, test:e2e)
└── playwright.config.ts
MIT
