Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

synk_diff-0.2.0-py3-none-any.whl (34.3 kB view details)

Uploaded Python 3

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

Hashes for synk_diff-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 dce6433725cf9aab045b3adade2921b524958e43844dfb2e882035ea2498e9b6
MD5 fcb3c5fa1fadcf4213120f6140eca34b
BLAKE2b-256 d76b7715d57da3163d03f7bc824c1e366a5cbe2e705ce26e990c196e0ace44d9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page