Cross-platform file/folder diff and merge tool with GUI, CLI, archive browsing, and 3-way merge.
Project description
Synk — Cross-Platform Diff & Merge Tool
A personal file/folder comparison utility for Linux, inspired by Beyond Compare.
Status: Prototype. Core features working: side-by-side panes, hash comparison, diff dialog, file operations, settings persistence, session save/load, context menus, drag-and-drop, archive browsing, SFTP remote, CLI mode.
Quick Start
GUI (requires X11/Wayland)
uv sync
uv run python -m src.main
CLI (headless)
uv run python -m src.cli diff file1.txt file2.txt
uv run python -m src.cli diff dir1/ dir2/
uv run python -m src.cli hash file1.txt file2.txt
Stack
- Python 3.12+ / PySide6 (Qt6)
- diff-match-patch (Myers diff algorithm)
- xxHash (content hashing for fast file matching)
- tomli-w (TOML config writes)
- paramiko (SFTP remote connections)
Testing
uv run pytest # headless unit tests
uv run pytest -m gui # GUI tests (needs X11/Wayland)
uv run pytest -v # verbose
Project Structure
src/
├── main.py # Entry point
├── core/
│ ├── hasher.py # xxHash content hashing (multi-algo)
│ ├── worker.py # Background comparison worker (QRunnable)
│ ├── archive.py # ZIP/TAR archive browsing + extraction
│ └── remote.py # SFTP connection + remote file ops
├── ui/
│ ├── main_window.py # Main window / toolbar / menu
│ ├── file_pane.py # Side-by-side file display + DnD + context menu
│ ├── diff_dialog.py # Inline diff view
│ ├── settings_dialog.py # Settings (hash algo, theme, ignore patterns)
│ └── sftp_connect_dialog.py # SFTP connection dialog
└── utils/
├── config.py # TOML config load/save (~/.config/beyondcomp/)
└── session.py # Session load/save (.bc-session files)
tests/
├── test_hasher.py # Unit tests (headless)
├── test_archive.py # Archive module tests (headless)
├── test_remote.py # Remote module tests (headless)
└── test_prototype.py # GUI integration tests (needs display)
Features
- Side-by-side directory comparison with color-coded status
- Content hashing (xxh3_64, xxh64, md5, sha1, sha256)
- Inline diff dialog for text files (Myers algorithm)
- Toolbar: Compare, Copy L↔R, Delete, New Folder, Open With, Settings
- Context menu: Open, Copy to Other Side, Delete, Rename, Properties
- Drag-and-drop between panes
- Settings dialog with persistent config (
~/.config/beyondcomp/config.toml) - Session save/load (
File → Save/Load Session, auto-restore on startup) - Ignore patterns (glob) to filter out files
- Archive browsing — double-click a .zip/.tar.gz to navigate inside like a folder
- SFTP remote panel — Connect SFTP button or type sftp://user@host:port/path
Roadmap
- Basic Qt UI with split panes
- File diff dialog
- Content hashing (xxh3_64 default, multiple algorithms)
- Toolbar actions (copy, delete, new folder, open with)
- Context menu (right-click: open, copy, delete, rename, properties)
- Drag-and-drop between panes
- Settings dialog with config persistence (TOML)
- Session save/load with auto-restore
- Ignore patterns support
- pytest setup with gui/headless markers
- Archive support (ZIP, TAR, GZ, BZ2, XZ) — browse inside archives
- SFTP/remote comparison (browse remote server via SFTP)
- CLI for headless diff
- CI
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file synk_diff-0.2.0-py3-none-any.whl.
File metadata
- Download URL: synk_diff-0.2.0-py3-none-any.whl
- Upload date:
- Size: 34.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.15 {"installer":{"name":"uv","version":"0.11.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dce6433725cf9aab045b3adade2921b524958e43844dfb2e882035ea2498e9b6
|
|
| MD5 |
fcb3c5fa1fadcf4213120f6140eca34b
|
|
| BLAKE2b-256 |
d76b7715d57da3163d03f7bc824c1e366a5cbe2e705ce26e990c196e0ace44d9
|