Python + PySide6 diff viewer and merge program.
uv run smartdiff
uv run smartdiff --d C:\left C:\right
uv run smartdiff C:\left\file.py C:\right\file.py--d disables subdirectory scanning when comparing directories.
Nuitka can build a Windows onefile .exe and Linux/macOS release builds:
uv run --with nuitka python -m nuitka smartdiff_nuitka_windows.py
uv run --with nuitka python -m nuitka smartdiff_nuitka_linux.py
uv run --with nuitka python -m nuitka smartdiff_nuitka_macos.pyLaunchers:
smartdiff_nuitka_windows.pybuilds a Windows onefileSmartDiff.exeindist/nuitka_windowswith the PySide6 plugin and hidden console window.smartdiff_nuitka_linux.pybuilds the Linux onefile executable indist/nuitka_linux. The GitHub Actions Linux release build runs onubuntu-22.04for broader glibc compatibility.smartdiff_nuitka_macos.pybuilds the macOS.appbundle indist/nuitka_macosfor Apple Silicon.smartdiff_nuitka_macos_x86.pybuilds the Intelx86_64variant indist/nuitka_macos_x86. Release builds targetmacOS >= 11.0.
A C compiler is required; on Windows, Visual Studio 2022 Build Tools is the safest choice. On macOS, use the system Clang compiler from Xcode.
GitHub Actions builds release artifacts on tag pushes matching v*. You can also
run the SmartDiff Nuitka workflow manually for build verification.
For local macOS release-compatible builds, set MACOSX_DEPLOYMENT_TARGET=11.0
before running Nuitka.
The project is pinned to PySide6==6.7.3 because newer PyPI wheels such as
6.11.1 target newer macOS versions and break macOS 11.0 compatibility for
release builds.
- Compare two directories or two files.
- Hide equal files by default with the
Only changescheckbox. - Double-click a changed file to open a side-by-side diff window.
- Line-level and inline changed-text highlighting.
- Find, Find Next, Find Previous in the selected side.
- Editable diff panes with built-in undo/redo from
QPlainTextEdit. - Save changes only when
File -> Saveis used. - Unsaved-change prompt on close.
- Ignore whitespace, ignore case, and light/dark theme options.
- Binary files and text files over 10 MB are compared by size, timestamp, and SHA-256 without text diff.
- Recursive directory scans skip known generated/service directories such as
.git,.venv,__pycache__, andnode_modules. File -> Preferences...edits binary extensions, ignored directories, and max text diff size in~/.smartdiff/settings.json.
Licensed under the Apache License 2.0. See LICENSE.

