Switching From Nextcloud to Syncthing

The SyncThing logo.
BlogLink to blog
Blog
6 min read

I recently migrated from Nextcloud to SyncThing, a decentralized file synchronization application. Here's what my experience has been like so far. Image is the SyncThing logo.


Contents


Introduction 

For a long time, I used Nextcloud 🔗 as my main alternative to Google Drive, iCloud, Dropbox, and similar commercial file synchronization programs. It’s open source, I could host it myself, and once I got it up and going, it was fairly easy to maintain. However, it had some limitations and annoyances that got to me over time:

And the biggest issue:

For these reasons, I decided to switch to SyncThing 🔗, an app that does one thing and does it well: file synchronization between more than one device. Here’s my experience making the switch, the challenges I ran into when moving away from Nextcloud, and how I overcame them.

Why choose SyncThing? 

There are a lot of free and open source file synchronization apps 🔗 out there, so why did I choose SyncThing?

I’d heard of SyncThing years ago back when it first started (2013 according to Wikipedia), but never gave it much thought because I was already using Nextcloud (ownCloud at the time). I forgot about it all the way up until this year, when I was reading a Reddit thread about people’s favorite Linux applications 🔗. This comment specifically 🔗 got me to try it.

How does SyncThing work? 

SyncThing is decentralized, meaning it doesn’t require centralized servers to function. It does use a relay-based system to discover systems to sync with, but you can run your own relay server or connect your systems directly by IP address or hostname. The way you set it up is pretty straightfoward:

  1. Install SyncThing onto the devices you want to sync. Each device gets a unique ID.
  2. On one device, enter the ID of the other device. You can give it a name, decide how to handle shares from that device, and set some additional options. You can even choose whether to encrypt data before sending it to the device, in case you don’t fully trust the device accessing your data.
  3. Once the remote device is added, add a folder to sync. You can choose any folder that your user has access to, add filters, set up file versioning and retention policies, and add filters. You can also choose whether to only send changes, only receive changes from the remote system, or do both. Your device will send a request to the remote device, asking if it’s ok to start sending files.
  4. On the remote system, open up SyncThing and accept the request. You can choose where to store the incoming folder, or you can configure SyncThing to auto-accept incoming requests and place them in a default directory.
  5. Once you accept the request, both devices will start synchronizing.

I’ve had SyncThing running for a little over two weeks, and besides a handful of synchronization conflicts, it’s been flawless.

How I’m using SyncThing 

My main use for SyncThing is sending personal files between my personal and work laptops, my home server, and my phone. Things like pictures, documents, music, etc.

My home server has become my centralized SyncThing server. Everything flows through it, and at the same time, it backs everything up off-site, so I always have backups of all my files. On my laptops, I’m able to back up my entire user directory, since SyncThing handles dotfiles (e.g. hidden files) just as well as regular files. This is something Nextcloud struggled with, and it’s a huge relief knowing that I can restore my laptop just by copying a folder from my server.

You can of course sync sub-directories from folders. So while I have my laptop sending my entire /home/ directory, my phone only needs to sync the Documents and Pictures directories. I also have a sub-directory of DocumentsDocuments/Notes—syncing to my work laptop. This way, nothing sensitive gets sent to the wrong device, and everything is working off the same source of truth. Since it’s very unlikely I’ll be using the same files from two different devices at the same time, I’m not too worried about sync conflicts.

All of this is built on a set of filters that excludes sending redundant or unnecessary data to a device, so if I wanted to send just my personal files to another device like a backup laptop, I could filter out all of my dotfiles.

Challenges 

SyncThing does have more of a learning curve than Nextcloud. There are some quirks, especially when trying to sync your /home/ folder. Since SyncThing creates its own dotfiles, you have to be very careful about sending and receiving files to certain folders, or you could overwrite a critical configuration file. Fortunately SyncThing is smart enough to detect this in most cases, and will pop up a warning message in the UI.

Another thing to be careful of is file permissions. SyncThing lets you sync file ownership metadata, but it’s disabled by default. There’s a chance your files could change ownership while syncing, which wouldn’t be disastrous, but could be very confiusing for a new user.

Also, just the general process of connecting devices and approving sync folders isn’t as straightforward for a non-technical user, especially someone coming from Drive or iCloud where everythign is automated. Like many powerful open-source programs, SyncThing assumes you have enough technical know-how to read the docs, research questions, and work with the tool to get it working right. Newbies beware.

The features lost in the move from Nextcloud 

I also want to mention the elephant in the room, which is: Nextcloud does way more than just file synchronization. It supports multiple users, has a very powerful file browser with built-in editing and permissions management, it does encryption, it supports plugins, it supports passwords and MFA, you can synchronize calendars and address books, and so much more.

These features obviously weren’t deal-breakers, but they were nice-to-haves, especially synchronized calendars, contacts, and tasks. But I did manage to overcome them, at least for now.

For on-the-fly note taking and task tracking, I’ve moved to Logseq . The Android app works pretty great (if clunky to use), and SyncThing’s continuous background work means I’m always working on the latest version of my notes.

For calendar, contacts, and task sync, I’m using DecSync 🔗, which stores these in a local directory instead of a WebDav server. Again, since SyncThing keeps all my devices up-to-date, my calendar is also always up-to-date. And because it’s all stored locally, I don’t really need to worry about security. Plus, nothing I do is interesting enough for anyone to break into, anyway. DecSync supports tasks, but I’m mostly using Logseq for those anyway.

For other things, like plugins and sharing files with links, those are nice-to-haves, but not necessities. I’m fine with handling those issues as they arise.

Closing thoughts 

All in all, I’m very happy with SyncThing. I’ll give it some more time, see if my workload requires any changes, and make adjustments if needed. In the meantime, I highly recommend checking it out if you’re looking for fast, consistent file synchronization without relying on Google or Apple.

Previous: "Logseq: The note-taking app that thinks like you do"Next: "Why Obsidian is now my preferred PKM tool"
atmospheric breaks breakbeat buddhism chicago code disco fiction funk furry house house music kubernetes lgbt linux logseq mastodon mental health movies music nixos obsidian personal philosophy pkm poetry prompt second life social software soul technology writing