{"id":51168058,"url":"https://github.com/prof18/difftray","last_synced_at":"2026-06-26T21:30:41.435Z","repository":{"id":363287246,"uuid":"1247746872","full_name":"prof18/difftray","owner":"prof18","description":"Local-first macOS app for reviewing Git changes across projects — tracks reviewed files, flags drift, and exports review notes as agent prompts.","archived":false,"fork":false,"pushed_at":"2026-06-08T07:56:43.000Z","size":3200,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-08T09:25:19.428Z","etag":null,"topics":["code-review","diff-viewer","electron","git","local-first","macos"],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/prof18.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"docs/roadmap.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-05-23T18:14:36.000Z","updated_at":"2026-06-08T07:53:49.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/prof18/difftray","commit_stats":null,"previous_names":["prof18/difftray"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/prof18/difftray","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prof18%2Fdifftray","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prof18%2Fdifftray/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prof18%2Fdifftray/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prof18%2Fdifftray/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/prof18","download_url":"https://codeload.github.com/prof18/difftray/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prof18%2Fdifftray/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34834415,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-26T02:00:06.560Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["code-review","diff-viewer","electron","git","local-first","macos"],"created_at":"2026-06-26T21:30:40.338Z","updated_at":"2026-06-26T21:30:41.429Z","avatar_url":"https://github.com/prof18.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"design/logo/logo-256.png\" alt=\"Difftray\" width=\"160\" /\u003e\n\u003c/p\u003e\n\n# Difftray\n\nDifftray is a local-first macOS desktop app for reviewing Git changes across multiple projects. It tracks which files have been reviewed, automatically invalidates that review state when the relevant diff changes, and turns review comments into a ready-made prompt for your favorite agent or AI tool.\n\nKeep track of what changed, what you already reviewed, and what needs another look.\n\nDifftray is not an IDE, not an AI agent host, and not a pull request platform. It is a focused review desk for local Git changes.\n\n## Why Difftray?\n\nWhy not just use a regular Git diff client?\n\nI built this because I kept losing track of my own reviews. I'd skim a diff, an agent would iterate, I'd come back, and I had no idea which files were still the ones I'd looked at and which had moved underneath me.\n\nA few things came out of that:\n\n- **Reviewed files don't stay reviewed if they change.** Mark a file as reviewed; if the diff for that file changes later, Difftray drops it back to unreviewed so you know to look again. It doesn't tell you _what_ changed, just that something did, and your previous pass is no longer trustworthy.\n- **It's built around the iteration loop.** Working tree changes, branch changes,\n  or a single committed patch, same flow. You're not preparing a PR, you're\n  checking what the agent (or you) just did.\n- **Comments are meant to go back to the agent.** Leave line-level notes while reviewing, then copy them out as a prompt.\n\n## Current Features\n\n- Keep several local repositories open in one review desk.\n- See which projects still need attention without switching context.\n- Review working tree changes, branch changes against a local ref, or a single\n  recent/pasted commit with the same focused workflow.\n- Move through changed files quickly, with noisy generated files out of the way\n  by default.\n- Read diffs in the shape that fits the moment: side-by-side, unified, expanded context, or focused on one side.\n- Mark files reviewed and Difftray will flag them if they change later.\n- Leave line-level review notes and copy a ready-made prompt to paste back into your favorite agent or AI tool.\n- Drive review from the keyboard, command palette, or dense file list controls.\n- Open the selected file in the system default editor or an installed common\n  editor preset.\n- Configure app appearance, default diff mode, line wrapping, generated-file\n  visibility, drift notifications, and editor launch behavior.\n- Stay local by design: no fetching, pushing, staging, editing, or repository metadata writes.\n\n## Screenshots\n\nReview workflow with inline comments and a ready-made agent handoff prompt:\n\n![Review workflow](docs/screenshots/review-workflow.png)\n\nReviewed-file drift notification after a diff changes:\n\n![Reviewed-file drift notification](docs/screenshots/review-invalidated.png)\n\nExpandable unchanged context in split diff mode:\n\n![Expandable diff context](docs/screenshots/expanded-context.png)\n\nFocused new-side diff view:\n\n![Focused new-side diff](docs/screenshots/diff-focused-new.png)\n\n## Install\n\nDownload the latest macOS build from the [Releases page](https://github.com/prof18/difftray/releases/latest):\n\n- **Apple Silicon (M-series):** `Difftray-arm64.dmg`\n- **Intel:** `Difftray-x64.dmg`\n\nOpen the `.dmg` and drag Difftray into your Applications folder.\n\n## Development\n\nPrerequisites:\n\n- Node.js 22 or newer\n- pnpm 10.11.0 or newer\n- Git available on `PATH`\n- macOS for the intended desktop runtime\n\nInstall dependencies:\n\n```sh\npnpm install\n```\n\nRun the desktop app in development:\n\n```sh\npnpm dev\n```\n\nBuild the app:\n\n```sh\npnpm build\n```\n\nRun the full local CI gate before committing:\n\n```sh\n./ci.sh\n```\n\n`pnpm check` delegates to the same script.\n\nUseful focused checks:\n\n```sh\npnpm format\npnpm lint\npnpm typecheck\npnpm test\npnpm test:visual\npnpm bench:performance\n```\n\nRun `pnpm bench:performance` before and after changes that can affect large\nchangesets, workspace loading, file selection, mark-reviewed flow, diff loading,\ndiff rendering, review-state resolution, or bundle size.\n\n## License\n\nApache-2.0.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprof18%2Fdifftray","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprof18%2Fdifftray","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprof18%2Fdifftray/lists"}