Socha Diff

User guide

Every control in Socha Diff, explained

What each button, box, badge and shortcut does, with short real recordings. The demos compare two copies of a small project, C:\Projects\shop-v1 and C:\Projects\shop-v2.

Quick start

  1. 1
    Enter two folders. Type or paste a path into Folder A and Folder B (quotes from Explorer's Copy as path are fine).
  2. 2
    Click Compare. Socha Diff scans both folders, including subfolders, and lists every file that differs.
  3. 3
    Read and act. Filter with the summary chips, open either copy of a file with its A / B link, copy text from one side, or make one folder match the other.

Folder boxes and Compare

Typing Folder A, a mistyped Folder B shows 'Folder not found', fixing it, Compare, then filtering with the only in A and only in B chips
Folder check on leaving a box, Compare, then the only in A and only in B chips.
Folder A Folder B
The two folders to compare. Surrounding spaces and one pair of quotes are removed, so "C:\Work\site" pasted from Explorer works. The last folders you compared successfully are filled in when the app starts.
Folder check
When you leave a box, Socha Diff checks the path. A folder gets a subtle green border; otherwise the box turns red with Folder not found, Not a folder, Access denied or Folder not accessible above it. Typing clears the check. It is advice only and never blocks Compare.
Compare
Compares the two folders with the current settings. A Comparing… spinner shows at the top while it runs. With an empty box you get Missing folder paths; a folder that does not exist gives Compare failed with the reason.
✦ pending star
A small amber star on Compare's corner means the settings changed since the last Compare, so the results on screen use the old settings. Hover it for Settings changed. Run Compare again to apply them. It disappears after a Compare, or when you change the settings back.

How Folder A and Folder B are matched

  • Both folders are scanned including all subfolders. Symbolic links are skipped, and so are excluded folders.
  • A file is paired with the file at the same relative path on the other side: src/app.js in A with src/app.js in B. Paths are shown with /.
  • Letter case: Windows folders ignore letter case by default, so Readme.md in A and README.md in B are paired as the same file, and the row also shows B's real name: Readme.md B: README.md.
  • A folder can be case-sensitive if case sensitivity is turned on for it (for example a WSL or developer folder) or if it is on a case-sensitive network share. When both folders are case-sensitive, names must match exactly. Socha Diff detects this for each folder when you compare.
  • A case-sensitive folder can hold two names that differ only by case, such as notes.txt and Notes.txt. When letter case is ignored they cannot be told apart, so they are listed under Errors and Make A/B match never touches them.
  • Files without a partner go to Only in A or Only in B.
  • Paired text files are compared as UTF-8. With Ignore whitespace on (the default), files whose only differences are spaces, tabs, blank lines or CRLF/LF line endings go to whitespace-only (ignored).
  • Binary files (a zero byte in the first 8,000 bytes) and files over 5 MB are compared byte for byte, with no line diff. Different ones are listed under Binary / non-text files that differ, as are text files with too many changes to show a line diff.
  • Files or folders that cannot be read are listed under Errors with the reason.

Summary chips

After a Compare, a row of chips counts the files in each group:

Click a chip
Shows only that group. Click the same chip again to show everything. Chips with a count of 0 are greyed out and cannot be clicked.
No differences
If nothing differs, a line says The folders match, or how many files differ only in whitespace.

Result lists and signs

Results are grouped under headings with a count: Differing files, Only in A, Only in B, Binary / non-text files that differ, Differ only in whitespace (ignored), Errors and Identical. Every file name ends with its sides in brackets:

Shown asMeaning
( A≠B )The two copies differ (text or binary).
( A≈B )They differ only in whitespace, which is being ignored.
( A=B )Identical.
( A ) / ( B )The file exists only in that folder.
( A - B )An entry in the Errors list.
File header
Each differing file has a header with its path, the A/B links and change counts: +N lines added, -N removed, ~N changed. Click the header to fold or unfold that file.
Large comparisons
With up to 25 differing files every diff opens automatically. With more, the files start folded to stay fast; click a header to open it.
Notes
Binary and error entries carry a short note, such as binary file — compared byte-for-byte or the reason a file could not be read.

Side-by-side and unified

Switching to Unified and back to Side-by-side, then folding and unfolding a file by clicking its header
Switching views, then folding a file by its header.
Side‑by‑sideUnified
Side-by-side (default) shows A on the left and B on the right, with unchanged lines aligned. Unified shows one column: removed lines (-) then added lines (+). Switching is instant and does not re-scan the folders.
Colours
Red is A (removed), green is B (added). On a changed line, the characters that actually differ get a brighter highlight.
Long lines
Lines do not wrap. A thin scrollbar under each side pans that side left and right; it shows when you hover and only when a line is too long to fit.
Unified is read-only
Text cannot be selected in the unified view. Switch to side-by-side to copy.

Hidden unchanged lines

Clicking '39 unchanged lines' reveals the lines in place; clicking the marker again hides them
Expand a gap in place, then click the same marker to hide it again.
⋯ 39 unchanged lines ⋯
Three unchanged lines are kept around each change; longer unchanged stretches fold into this marker. Click it to show the lines right there. The marker stays in place and reads (click to hide); click it again to fold them back. Works in both views.

Selecting and copying

Drag-selecting lines in the B pane, right-clicking and choosing Copy, clicking a line number to select a line, then Ctrl+A selecting the whole A side
Drag-select, the Copy menu, a line-number click, and Ctrl+A for one side.
Drag to select
Selection stays inside the side where you started: it cannot cross from A to B, into another file, or into the rest of the page. Dragging near a side's left or right edge scrolls long lines slowly.
Line numbers
Click a line number to select that whole line; drag over line numbers to select several; Shift+click extends the selection. Triple-click text selects its line.
Ctrl+A
Selects all text of the side you clicked in, not the whole page.
Copy menu
Right-click a diff side for Socha Diff's own Copy menu. It copies your selection, or the whole side if nothing there is selected. Ctrl+C works too. Esc, scrolling or clicking elsewhere closes the menu.
Exact text
Copied text is verbatim: whitespace as in the file, and each line's own CRLF or LF. The newline at the end of a line is a selectable character: drag onto or past it to include it. When a selection spans a folded gap (with the lines around it fully selected), the hidden lines are copied too.

Whitespace

The whitespace-only chip lists src/format.js; Whitespace chars shows dots for spaces; clicking the Whitespace ignored badge switches to Whitespace aware and Compare shows format.js as differing
The whitespace-only list, Whitespace chars, then the ¶ badge and a whitespace-aware Compare.
¶ Whitespace ignored ¶ Whitespace aware
The badge in the header shows the comparison mode. Ignored (green, default): spaces, tabs, blank lines and line endings do not count as differences. Aware (amber): they do, and a line whose only change is CRLF vs LF is shown as changed, with the line ending highlighted. Click the badge (or press Enter/Space on it) to switch; it is the same setting as the checkbox in Settings. Then Compare again.
👁 Whitespace chars
Shows invisible characters in the diffs: · for a space, → for a tab, symbols for other control characters, and at each line end ↓ for LF or ↵ for CRLF (a line with no final newline has no mark). The eye opens when the marks are on. Display only: copied text is never changed.
whitespace-only (ignored) list
While whitespace is ignored, files that differ only in whitespace are listed under Differ only in whitespace (ignored) with ( A≈B ). Make A/B match leaves them alone.

Settings (Ctrl+S)

Hovering Settings shows 'Ctrl+S to open Settings'; pressing Ctrl+S opens the dialog; unticking Ignore whitespace saves automatically; Esc closes it; the pending star appears on Compare; clicking the badge switches back and the star disappears
Ctrl+S, an automatic save, Esc, and the pending star.
Settings / Ctrl+S
Opens the Settings dialog. The shortcut is exactly Ctrl+S (no Shift or Alt) and works anywhere in the app, even while typing in a folder box. Hover the button for the reminder Ctrl+S to open Settings.
? / F1
The ? button right of Settings opens this guide in your default web browser (in a new tab when you use Socha Diff in a browser). F1 does the same from anywhere in the app. Hover it for Help: open the Socha Diff guide (every control explained).
✓ Ignore whitespace differences
On by default. When off, differences in spacing, indentation and line endings are reported as changes. Always in step with the ¶ badge.
Excluded folder names
One folder name per line. See Excluded folders.
Saving
There is no Save button: the checkbox saves immediately, the list saves shortly after you stop typing. A status line confirms Saved., or Saved. Run a new comparison to apply the changes., and fades after a few seconds. Errors show there in red.
Reset to default
Restores whitespace ignoring and the default excluded folders.
Closing
The × button, Esc, or a click outside the dialog.

Excluded folders

Adding legacy and docs to Excluded folder names, the status says Saved, closing Settings, the pending star, Compare, and the only in A and only in B counts drop to 0
Adding legacy and docs, then Compare: their files drop out.
  • One folder name per line. Every folder with that name is skipped, at any depth, in both A and B.
  • Matching ignores letter case: Node_Modules matches node_modules. Names are saved in lower case, sorted, without duplicates.
  • Names only. Entries with \ or /, or . / .., are rejected (Excluded entries must be directory names, not paths.). Wildcards are not supported: *.tmp would only match a folder literally named that.
  • Only folders are excluded, not files.
  • Excluded folders are left out of the comparison and are never touched by Make A/B match.
  • Default list: .git .github .vs .vscode bin dist node_modules obj. Reset to default brings it back.

Make A/B match

Clicking Make B match A opens 'Confirm folder mirroring'; OK updates Folder B and a message reports 1 created, 4 updated, 1 deleted
Make B match A, the confirmation, and the result.
Make B match A Make A match B
Appear after a Compare. They change the target folder (B or A) to match the other one, using the current results: differing and binary files are overwritten, files missing from the target are created (with their folders), and files that exist only in the target are deleted.
Letter case
Windows treats Readme.md and README.md as the same file. When a pair's names differ only by letter case, the target file gets the other side's content but keeps its own name, and it is never deleted afterwards as a leftover. Names that differ only by case inside one folder (listed under Errors) are left alone.
What is left alone
Identical files, whitespace-only files while whitespace is ignored, excluded folders, and anything else that was not in the comparison. Folders emptied by deletions are not removed.
Safety checks
First Socha Diff checks that neither folder changed since the Compare; if one did, Folder contents changed aborts, and you need to Compare again. Otherwise Confirm folder mirroring asks before anything happens (Cancel / OK; Esc cancels). The check runs once more right before files are changed.
Afterwards
A message such as Updated Folder B: 1 created, 4 updated, 1 deleted. appears at the top and the results refresh. Problems are reported in Sync completed with errors.

Dialogs and messages

Top message
Progress (Comparing…, Updating Folder B…) with a spinner, and sync results, which fade after a few seconds.
✖ Error dialogs
Missing folder paths, Compare failed, Could not open the path, Folder contents changed, Sync completed with errors, Could not update the folder. Close with OK.
⚠ Confirm folder mirroring
The only question the app asks, before Make A/B match changes files.
Tooltips
The Settings and ? buttons, the ¶ badge and the pending star show a tooltip next to the mouse pointer (or above them when focused with the keyboard). Links show their action on hover.
Right-click elsewhere
In the folder boxes you get the usual Cut / Copy / Paste menu. Diff sides show the Copy menu; A/B file links open Open with.

Keyboard and mouse reference

InputWhereDoes
Ctrl+SAnywhereOpen Settings
F1AnywhereOpen this guide in your web browser
EscSettings, mirroring dialog, Copy menuClose (in the mirroring dialog: Cancel)
EnterFolder boxCompare
Enter / Space¶ badgeSwitch whitespace ignored / aware
Ctrl+AA diff sideSelect that whole side
Ctrl+CA diff sideCopy the selection
ClickA / B after a fileOpen that copy in its default app
Right-clickA / B after a fileWindows Open with picker
ClickA: / B: folder pathOpen the folder in Windows Explorer
Right-clickA diff sideCopy menu (selection, or the whole side)
Click / drag / Shift+clickLine numbersSelect whole lines
Triple-clickDiff textSelect the line
Click⋯ N unchanged lines ⋯Show / hide the hidden lines
ClickFile headerFold / unfold that file
ClickSummary chipShow only that group (again: show all)

What is remembered

  • Settings (whitespace mode and excluded folders) are saved as you change them and kept across launches and updates, in %LOCALAPPDATA%\SochaDiff (.socha-diff-settings.json).
  • The last two folders you compared successfully are filled in at the next start.
  • Results survive a page reload while the app stays open, together with the view, the active chip and Whitespace chars, unless the comparison is very large (more than 150 differing files or 20,000 diff rows).
  • Nothing is uploaded: the comparison runs locally on 127.0.0.1.

Install Socha Diff Back to top