Features28
-
Sign in to GitHub or GitLab from the setup wizard: the Connection step offers Azure DevOps, GitHub and GitLab as cards you can drive with the arrow keys and Enter, with token help specific to each platform and a connection summary that adapts to it; GitHub and GitLab remain in beta.
-
Clearer collapsed panels: counts in collapsed strips (Files, Review) are now written vertically in green and no longer overflow; the Review strip reads “Review”, then “20/389 files reviewed”, “15 pending” and “7 open threads” in plain text, with no pill or gauge.
-
Filterable, context-aware shortcuts help (⌘/): a “Filter shortcuts” field (focused on open, ignoring case and accents, searching labels and keys); Esc clears the filter, then closes. The group for the current space comes first (Pull Requests, Code, Home). Focus stays in the dialog and returns to the trigger on close. In the island, the row for the space you are in is dimmed (“You’re here”) and no longer preselected: ↵ opens the first useful row.
-
No more duplicate review draft: the “N comments pending in your review” banner only appears when the review panel is collapsed; with the panel open, a single “Finish my review…” remains and the diff gets the banner’s height back.
-
Narrow layouts fixed: in Info, the target branch stays fully readable (the source branch is the one shortened); in Team, the figures strip goes from 6 to 3 then 2 columns with no empty cell; in the Flow view, files that couldn’t be loaded are listed in a box, each opening the file in File view.
-
Narrow Files column: signals no longer truncate the file name: below ~330 px of column width, the AI badge, the thread counter, the risk and the +/− bar merge into a single 22 px counter (details on hover and in the accessible name), so the name keeps over 60% of the row at 270 px. Unchanged at comfortable widths.
-
Title bar: the search bar docks to the right again when a PR is open or in Code, leaving room for the title (an intermediate version had centered it everywhere by mistake). In a PR, the branch chip shrinks before the title and disappears below 1100 px (the branch stays in Info). The reviewers badge reads “1 reviewer of 2 approved” / “2 reviewers of 3 approved”, and freshness (“just now”) carries a tooltip and an accessible name.
-
Switching PRs mid-publish no longer mixes them up: a comment published just before switching to another PR no longer shows up in that one (it is still published and reappears in its own PR), and the “reviewed” checkmarks shown always belong to the open PR.
-
Quitting the app stops the running AI: closing Diffwright during a review or a conversation with
claudeorcodexalso stops that program, which no longer keeps running in the background and using your quota; closing stays instant when nothing is running. -
Ollama: no more silently truncated prompts: a review (or any other request) sent to Ollama now reserves a context window sized to its length, within what the model supports; if the content can’t fit, Diffwright sends nothing and explains why instead of producing an analysis of truncated text.
-
Reliable comment typing: typing “@alice” fast then pressing Enter no longer inserts a different user (Enter/Tab are ignored until the search is up to date); switching tabs or PRs right after typing no longer loses your draft (it is saved on unmount). A draft stays local.
-
Chat: “Stop” works right after sending: cancellation is registered before any wait, including engine detection (Ollama / CLI) when the AI setting is implicit; stopping during that detection interrupts the question without starting a process, and no cancellation entry is left afterwards.
-
“Reviewed” checkmark no longer flips back: a file you just checked (or unchecked) no longer unchecks/rechecks itself because of a portal read that started just before your click (Azure DevOps and GitHub alike); the write to the portal is still triggered by your click alone, with no retry.
-
Home: the same numbers everywhere: one label no longer shows two values. Under “My queue”, the “to review” and “replies awaited” chips use exactly the numbers in the subtitle, the title is the sum of the subtitle’s badges, the “To review” group also counts the “Start with” PR and the inbox counter no longer counts “Other” PRs; under “Whole project”, the chips count the whole project.
-
Risk never “low” on a partial analysis: when Diffwright has measured only some of the files, the Risk card shows “At least medium/high risk” or “Risk incomplete” instead of “Low risk”, like the header ring.
-
More accurate wording: an empty PR list names the active tab first and mentions the “favorites” filter only when it really hides repositories; a “blocked by CI” signal (like silence, old PR and conflict) no longer shows its duration twice; unlinking a work item uses an “×” button and “Remove link” instead of suggesting a deletion.
-
Unreadable settings, finally explained: if the settings file is corrupted, Diffwright sets it aside without deleting anything, starts with the default settings and tells you in a discreet message, with the backup location and a "Restore backup" button. A backup of the last valid state is now kept on every save.
-
Pre-analysis of Pull Requests to review: while you work, Diffwright reads in the background the files of the Pull Requests waiting for you so that each one opens without waiting, the on-disk cache reads back much faster, and the +/− bars of a Pull Request you've already seen appear straight away; a small gauge in the list shows where each Pull Request stands, nothing is written to the platform, and Settings lets you turn it off or limit the disk space it uses.
-
Search in comments, without opening the PR: the ⌘K search finds the text of all comments and replies on the Pull Requests in your index (active ones, or ones closed less than 90 days ago), even those you have never opened, in a "Comments" group from three letters on; "by: me" keeps only yours.
-
Impact without a button: the Impact tab no longer has a large "Analyze impact" card; Diffwright automatically finds, from the files already read on this computer, the symbols that were removed or whose signature changed, and searches their usages without downloading anything as soon as a symbol index of the repository exists (even an older one); the first download of the branch stays an explicit click, "Refresh index" is in the ⋯ menu, and the tab says plainly when the check is partial instead of announcing "nothing to check".
-
"New iteration" and "changed since your review": pre-analysis flags a Pull Request pushed since your last review, and the file list marks the files that changed since your review; a click on the badge in the Files column header shows only those.
-
Local risk learning: the risk score adjusts from your own reviews, on this machine only; Settings › Pull requests can turn it off, and "Delete learning" erases what it has learned.
-
Suggested review order in named steps: the file list splits the Pull Request into balanced steps named by area and role ("Order · data access"), with an indicative duration as a range; the same change repeated across many files is read once and skimmed for the rest, and pure renames as well as patterns resembling a secret are flagged. This order, its names and its durations stay in place while you read, and a more precise order waits for your click on "Apply".
-
Time estimate as a range: a review shows its duration as a range (for example "≈ 20 – 30 min") based on the size and kind of the changes, with the number of files whose size is unknown; a Pull Request too large for one sitting shows "Too large for one session · Split it up" instead of a figure. The setting "Adapt time estimates to my reading speed (local)", on by default, refines these ranges from the time you actually spend on files, on this machine only.
-
Pull Request risk explained: the author's avatar in the Pull Request header is ringed by a risk ring whose score out of 100 shows in a badge (green low, amber medium, red high); a click, Enter or ⌘K "Explain Pull Request risk" opens the Impact tab, where "What weighs in" lists the signals found (sensitive paths, large diff, added complexity, central file, missing test, possible secrets…) with the files concerned, clickable. Until the analysis has covered every file, the ring stays dashed and reads "at least medium" or "incomplete", and the level can only go up; when the risk arrives after a visible calculation of the Pull Request, the ring fills up to its score in 0.7 s, and a risk already known is shown as it is.
-
Local search by meaning: in the ⌘K search, Pull Requests, comments and what a PR’s description or discussion says are now ranked TOGETHER by relevance in a single “Results” group (no more PRs first, comments after), even when you use different words or another language; each row carries its “temperature” (three bars: very relevant, relevant, uncertain), what made it surface (Title, Comment, Description, Meaning) and, when useful, the excerpt found with your words highlighted. The “Meaning only” button narrows the list to what meaning finds; filters (author, repository, status, date) apply.
-
Similar Pull Requests during a review: a PR’s Info tab ends with a card listing the closest PRs (“Very close”, “Close”) to find a precedent or a duplicate; one click opens it.
-
Settings › Semantic search: turn the feature on or off, follow indexing progress and pause it, pick the repositories and the history window (6 months to 5 years), see the disk space used and purge one repository or the whole index.
Improvements22
-
No favorite where there is nothing to choose: with a single project or a single repository, the setup wizard no longer offers a favorite, the star disappears from the project switcher and from the Projects column of the Repositories space, and the labels (project, organization, group) follow the account’s platform.
-
Predictable dividers: a divider now changes only the column it borders, and the neighboring columns adjust around it; dragging neither collapses nor reopens any column, and double-clicking a divider resets its column to its default width.
-
Instant first display of the lists: the PR list, the files list and the Code space columns (branches, tree) no longer play the staggered row rise on the first display of a launch (a scrolling-like animation that differed between folders and files); lists already in memory appear as they are.
-
Rounded cards on every space: Pull requests, Code, Repositories and Team now show their columns as rounded cards separated by thin gutters on a darker background, in the style of Rider or VS Code (Home stays a single card); collapsed columns become thin strips that stay visible, so no gap appears, and the card with focus stands out.
-
Narrower activity bar: the left column goes from 62 to 44 px, icons only (like Rider’s bar); the space name stays in the tooltip and for screen readers.
-
Pull Request search without false hits: a word of four letters or more is no longer “found” in a long title whose letters are merely scattered (“write tests” surfaced unrelated PRs); typos are still tolerated.
-
Search reads Pull Request descriptions: a word found in a Pull Request’s description makes it surface in the ⌘K search, with or without search by meaning (after the index next reads the PR; a title match still ranks first).
-
Simpler search: no more “Meaning only”, “Everywhere” or “Sort” buttons: ⌘K search covers every project (Settings › Sync › “Search all projects” limits it to your favorites) and decides the order itself: relevance when you type text, signals (to review, recent) when you only have filters.
-
No more empty row under the search field: the save-search star is gone and the row only shows when there are filters; the index status becomes a small icon with no text at the bottom of the search, visible only when abnormal (running, failed, late), details in its tooltip.
-
Clicking a person opens the Team space: the “person” search result no longer sets a filter, it opens that person’s activity in the Team space (scope: all repositories of the active project; other projects aren’t covered yet).
-
Search fits its content: the ⌘K window tightens when there are few or no results (no more big empty space), without moving while you type, and its loading state shows ghost rows shaped like real results.
-
Avatars in search comments: each comment found shows its author’s picture (initials when it isn’t known).
-
Search by meaning with nothing to install, even offline: it replaces the old version that required Ollama; the model ships with Diffwright, indexing runs in the background at low priority, everything stays on your computer and nothing is written to the platform.
-
Comment search for GitHub and GitLab: comments of the GitHub PRs and GitLab MRs you open, or whose notifications you receive, now join the local index and show in the Island “Comments” group like Azure DevOps ones; nothing is written to the platform.
-
Search that keeps itself up to date: the index refreshes on its own when you open the search, and once more when the “Comments” group finds nothing; the “Refresh index” and “Retry” buttons of the status line are gone, and the line only says whether the index is up to date or behind.
-
Setting for comments of PRs you haven’t opened: Settings › Synchronization › “Index comments of PRs I haven’t opened”, on by default, turns off this background reading; it stays read-only and never writes anything to the platform.
-
Finishing touches: “Explain PR risk” now appears in the shortcuts list (rebindable in Settings, no key by default), the “no results” and “empty index” messages in the Island and the Impact tab say what to do next, and the Team space says “Threads” instead of “Discussions”.
-
Impact tab reorganized: the Risk card leads the tab, followed by "Usages outside the Pull Request" (formerly "Consumers outside the PR") then collisions; the superfluous figures are gone, and the subtitle counts the files to re-read. When "What weighs in" arrives later, "Usages" no longer shifts.
-
Reindentation no longer raises the risk: a file whose only change is formatting (indentation, trailing spaces, blank lines, JSON re-laid out identically) is rated low and no longer counts toward the score; "What weighs in" reports it separately with the number of files concerned, and the file list shows how many lines really changed. A sensitive file stays at medium risk.
-
Large test files and new files: a large test file, or a file just added, no longer alone pushes the Pull Request to high risk; it stays at most medium, and "What weighs in" reports it. Sensitive files are never capped.
-
Clearer PR row: in the Pull Requests list, titles stay readable and nothing is cut off; signals are summarized in compact icons, and each PR's details open in a “Signals of the PR” popover.
-
AI availability checked in the background: the AI engine check (
claude, Codex, Ollama) now runs shortly after launch, then quietly when you return to the app once it has expired; opening a Pull Request's AI tab no longer waits for it. No call is made to API-key engines.
Fixes19
-
File list without flicker: on Mac, a Pull Request's file list could be replaced for half a second by a loading skeleton right after it appeared; it now stays in place.
-
The Pull Requests list no longer closes on its own: it only collapses when the window is shrunk, never during a drag; resizing one column no longer affects the others.
-
File icons without a black square: README, changelog, log, diff, document, settings… showed a black square behind the icon (the SVG root's “no fill” was lost at generation); the generator now keeps it on 29 icons.
-
No more “Checking…” in the AI review card: the engine availability check runs in the background without showing anything; only an engine that is actually missing or signed out is reported.
-
PR list counters follow the “favorites” filter: the header total and the All / To review / Mine tabs now count only the PRs of favorite repositories while the star is on (they used to count the whole project).
-
PRs to review hidden by “favorites” are flagged: under the “To review” tab, an “N to review outside favorites” line (with “Show all repositories”) explains the gap with the activity bar badge, which counts the whole project.
-
The “Actions” title is visible when the search opens: the list is no longer already scrolled, the first row no longer hides its group’s title.
-
The search index keeps itself up to date, independent of the interface: the background read could be stopped by mistake after an interface reload or a window state change (the indicator showed “Index from 57 min ago” without advancing); the app itself now starts and maintains it, favorite projects and the “Search all projects” setting included.
-
Ollama errors in your language: unreachable server, model not installed, unreadable or truncated response now appear in English with an English interface, and in French (formal “vous”) with a French interface.
-
Numbers and plurals in the interface language: “1,5 k”, “2,5 Mo”, “1,2 s”, “1/2 (50 %)” in French (“1.5k”, “2.5 MB”, “1.2s”, “1/2 (50%)” in English), “1 commit” / “1 line” in the singular in Team charts, and the semantic search settings failure message follows the same punctuation rule.
-
Linked work items: one deleted item no longer hides them all: if one of a PR’s work items was deleted or isn’t accessible, the others display normally; beyond 200 work items, they are fetched in batches.
-
Azure DevOps comment never published on the wrong line: if the author pushed new commits since the diff was displayed, “Publish” is refused with a message asking you to reload the diff, instead of placing the thread on another line; your text and draft are kept, and nothing is resent without your click. Same guard on GitHub and GitLab, which previously read the head refreshed in the background rather than the displayed diff’s.
-
Complete long Azure DevOps lists: an organization with more than 100 projects shows them all, and a file deleted in a PR of more than 100 files gets its path back; beyond a page limit, Diffwright says so instead of showing a truncated list.
-
Safer external links and labels: work item and build links now only open when they are http or https, and a failure to create or assign a label now shows a message instead of failing silently (the typed text is kept).
-
Labels and overlaps on the right PR: when two repositories each have a Pull Request with the same number, a label set on one no longer shows on the other, the "×" removes the label from the right Pull Request, and opening an overlap opens the Pull Request of the right repository. Your existing labels are kept.
-
Review publishing: a step that succeeded is no longer republished: when the summary was sent and the vote then failed, trying again created the summary a second time. It is now unchecked, flagged "already published" and never sent again, even after closing and reopening the dialog; only the vote is retried, on your click. "Finish test" gets the same guarantee, and its counter no longer announces an already published verdict.
-
Panel dividers smooth on macOS: dragging the divider between two columns no longer stutters on Mac, even with a very large file.
-
Comments from every thread found: on Azure DevOps, search only found the comments of the first thread of each Pull Request; the other threads and their replies are now indexed, and those of Pull Requests already indexed catch up in the background.
-
Reliable pre-analysis: a Pull Request is no longer shown as “ready” once its review plan has been removed from the cache to make room; it is prepared again. Removing an account immediately stops all background pre-analysis for that account.
Download this version
- Download for macOS (Apple Silicon)
macOS
Apple Silicon (M1 and later) - Download for macOS (Intel)
macOS
Intel Mac - Download for Windows
Windows
Windows, 64-bit