Skip to main content

Syncthing vs Rsync vs Rclone

Linux systems engineers have three primary tools for moving files between machines: syncthing, rsync, and rclone. Choosing the right tool depends entirely on your architecture and goals.

Learning Focus

Understand that rsync is for one-way CLI automation, rclone is for cloud providers, and syncthing is for continuous decentralized mesh sync.

Tooling Overview

Rsync

The classic UNIX utility for syncing files and directories. Uses the Delta Transfer algorithm over SSH.

  • Execution: Triggered manually or via cron/systemd timers.
  • Direction: Usually one-way (Source to Destination).
  • Network: Requires SSH access directly between nodes.
  • State: Stateless (calculates differences by comparing timestamps and block hashes on the fly).

Rclone

"The Swiss army knife of cloud storage."

  • Execution: Triggered manually or via cron/systemd timers.
  • Direction: Usually one-way (Local to Cloud, or Cloud to Cloud).
  • Network: Communicates with API endpoints (AWS S3, Google Drive, Backblaze B2).
  • State: Stateless (compares file sizes and mod-times/hashes with the provider's API).

Syncthing

The continuous decentralized sync daemon.

  • Execution: Runs continuously in the background as a system service.
  • Direction: Continuous bi-directional or multi-directional mesh.
  • Network: Decentralized P2P over TLS. Uses relays if firewalls block direct connection.
  • State: Stateful (maintains a local database of all file states on all nodes).

Feature Matrix

Featurersyncrclonesyncthing
Primary Use CaseOne-way server mirroringCloud object storage syncMulti-device active sync
Execution StyleBatch/ScheduledBatch/ScheduledContinuous (Event-driven)
TopologyPoint-to-Point (Client/Server)Point-to-CloudMesh (Peer-to-Peer)
State awarenessNone (calculates on run)None (queries on run)Local database index
Connection ProtocolSSHHTTPS (REST API)BEP over TLS
Handles NAT/FirewallsPoor (requires port forwards)Good (outbound to API only)Excellent (relays & discovery)
Web GUINoneLimited / WebGUI modeExcellent built-in GUI

Decision Tree

When to use Rsync

  • You are deploying code from a CI/CD runner to a web server.
  • You are backing up /etc and /var locally or over a fast, reliable SSH link.
  • You are writing bash scripts for server migration.

When to use Rclone

  • You need to sync backups to AWS S3, Backblaze B2, or Cloudflare R2.
  • You want to mount a Google Drive as a local folder.
  • You need client-side encryption (crypt remote) before data hits the cloud.

When to use Syncthing

  • You want your ~/Documents folder kept identically updated across your laptop, desktop, and phone without using Dropbox.
  • You manage a cluster of 4 web servers and need uploads to /var/www/uploads to replicate to the other 3 servers instantly.
  • You want to sync data continuously between devices that don't have static IPs and live behind restrictive firewalls.

Hybrid Workflow Example (The Ultimate Setup)

Professional setups often combine these tools, rather than choosing just one.

flowchart TD
LAP["Developer Laptop\n(Dynamic IP, NAT)"] <-->|Syncthing\nContinuous Sync| PROD["Production Server\n/var/data/uploads"]
PROD -->|Restic\nHourly Snapshots| REPO["Local Restic Repo\n/mnt/backups"]
REPO -->|Rclone Sync\nNightly| S3[("S3 Object Storage\nOffsite")]
  1. Syncthing guarantees the laptop and production server share the same active dataset seamlessly despite NAT and dynamic IPs.
  2. Restic takes hourly snapshots on the server to protect against accidental deletions propagating from the laptop.
  3. Rclone pushes the encrypted Restic repository to S3 every night for disaster recovery.

What's Next