Skip to content

Self-host Syncthing

updated Sep 2026prices checked · Jul 2026Install verified on Ubuntu 26.04 · Sep 2026 · how we test
We earn commissions when you shop through the links below. Full disclosure →

Continuous, peer-to-peer file synchronization with no central server and no cloud — your files sync directly between your devices, end-to-end encrypted in transit.

Key facts

LicenseMPL-2.0
StackGo
Min RAM256 MB
Official imageyes
Measured idle RAM18 MB
Difficulty
Our recommendation

Pick Syncthing when you want your own devices to sync directly with each other and no server in the middle: MPL-2.0, one Go binary, TLS between devices, device IDs as the only authentication, and global/local discovery plus public relays to get through NAT. There is nothing to host except the copy on each machine, which makes a VPS node a full peer rather than a hub. It is not a backup tool by its own FAQ and offers no share links, web file browser or user accounts — for those, Nextcloud or Seafile are the server-centric picks in this catalog.

What you need

  • Any VPS with at least 256 MB of RAM
  • A domain you control — most self-hosted setups need HTTPS in front of them
  • Under an hour if you've used Docker before
Where to host itaffiliate disclosure
Hetzner Cloudrun it on
From $23.59/mo · 2 vCPU / 4 GB / 80 GB · EU + US
Get Hetzner Cloud (opens in new tab)
Kamaterafree trial
From $4/mo · 1 vCPU / 1 GB / 20 GB · US + EU + Asia
Start free on Kamatera → (opens in new tab)
DigitalOceanalso works on
From $6/mo · 1 vCPU / 1 GB / 25 GB · US + EU + Asia
Deploy on DigitalOcean → (opens in new tab)

Paid link — we earn a commission if you shop through it.

Install

Run these commands on your server:

# Syncthing — official README-Docker example: host networking (bridge mode breaks LAN discovery),
# and STGUIADDRESS= unset so the GUI listens on 127.0.0.1:8384 instead of every interface with no auth
docker run -d --name syncthing --network=host -e STGUIADDRESS= \
    -v /wherever/st-sync:/var/syncthing \
    syncthing/syncthing:latest
# admin UI: from your machine  ssh -L 8384:127.0.0.1:8384 user@SERVER_IP  then open http://localhost:8384;
# if you expose the GUI instead, set a username/password and enable TLS in its settings first

What you take on

Syncthing's docs are explicit about what it is not, and the Docker image has one sharp default:

non-negotiable"By default Syncthing inside the Docker image listens on 0.0.0.0:8384", and our snippet publishes that port with no GUI user, password or HTTPS set — anyone who can reach SERVER_IP:8384 gets the admin UI. Set a username, password and TLS in the GUI settings straight away (the README: "If you configure your GUI to be externally reachable, make sure you set up authentication and enable TLS"), or keep STGUIADDRESS= unset and reach it over ssh -L 9090:127.0.0.1:8384 user@host.
non-negotiableUnder Docker's default bridge network "Syncthing can only see the internal IP address of the container on the 172.17.0.0/16 subnet", so LAN discovery fails; the README runs with --network=host. Our snippet uses bridge networking and publishes 22000 tcp/udp but not the 21027/udp discovery port, so expect connections to go through relays or need addresses entered by hand — the firewall page notes relaying "will perform poorly in comparison to a direct connection".
non-negotiableThe FAQ's answer to "Is Syncthing my ideal backup application?" is no: "all changes to your files (modifications, deletions, etc.) will be propagated to all your devices." File versioning "defaults to 'no file versioning'", and when enabled it only keeps copies of changes received from other devices, in .stversions. Run a real backup alongside it.
non-negotiable2.0.0 switched the database from LevelDB to SQLite with "a migration on first launch which can be lengthy for larger setups"; it also forgets deleted items after six months, drops single-dash long options (-home → --home) and stopped shipping binaries for some platforms. Our snippet pulls untagged, which as of September 2026 is the 2.1.x line — read the 2.0 notes before upgrading a 1.x node.
non-negotiableThe container runs as UID/GID 1000 (PUID/PGID to change) and /var/syncthing holds both config and the synced files. The 256 MB floor is our estimate; the FAQ explains CPU use (SHA-256 hashing of every file on first scan) but publishes no RAM requirement.

An alternative to

Head-to-head

More in File sync & storage

We use analytics cookies (Google Analytics, PostHog) to see which guides are useful. No ad networks, no cross-site tracking. See our privacy policy.