+++
title = "Moving away from Nextcloud"
date = 2024-08-05T01:33:59-05:00
draft = true
+++

## Nextcloud

While Nextcloud had a lot of features and provides a nice web interface,
(I got a lot of use out of Nextcloud's caldav server)
I kept running into problems and limitations with it.
One thing is maintenance. Of my entire homelab,
I easily spent the most time troubleshooting and fixing Nextcloud,
sometimes having to reboot the VM multiple times per week.
Additionally, I've ran into a few annoying limitations,
such as the sever crashing if you view a folder with too many files in the web interface or apps.
Nextcloud does a lot of things, and does things very well,
but I would not describe it as a rock solid piece of software.

Due to this, during our [move to germany](../moving-to-germany) and the resuling reorganization of the homelab,
I decided to *finally* ditch Nextcloud, after talking about it for months.

## Syncthing

[Syncthing](https://syncthing.net/) is one of the best file syncing tools in existence,
and I don't say that lightly.
Syncthing is a distributed, peer to peer file syncing service.
This means that it doesn't rely on a central, always online server ran by you or someone else,
but that your devices directly send files between themselves whenever they are online at the same time.
I used Syncthing to replace Nextclouds file syncing.

### Syncthing vs Nextcloud

Unlike Nextcloud, Syncthing has no web file manager,
does not do caldav or any of the other million things you can do with Nextcloud apps,
and requires setup on both ends to setup a syncing connection.
In short, Syncthing does only one thing.
But boy does it do that thing well.
During the time I've used Syncthing,
I've never seen it crash, hang, or corrupt a file.
Even with a device like my phone,
constantly loosing and regaining network access,
files have synced perfectly, every time.

### Distributed?

With Dropbox or Google drive, files are not sent directly between your devices,
but are sent from one device to the server,
then from the server to other devices.
This also applies to Nextcloud,
the only difference being who runs and controls the server.
With Syncthing, there is no central, authoritative server storing the 'master copy' of your files that other devices download from.
Instead, devices all connect to each other, sending changes made on one device to all other devices they share that file with.
This makes all of your devices into a cluster, where no device has to always be online,
but any devices that happen to be online at the same time synchronize while they can.

### Introducers

If you have a lot of devices, making sure every device is connected to every other device can become a hassle.
Thankfully, Syncthing has the concept of 'introducer' devices.
In short, With an introducer, you only need to connect your devices to the introducer,
and the introducer will make connections between any devices that share the same folder with the introducer.
This is very useful, for example, to enable for a always online storage server,
and it is the architecture that I used to fully replace nextcloud.

## File Manager

While Syncthing is great for file syncing between devices,
we also wanted to be able to acess a web interface to upload, download, and view files on devices not in our Syncthing network.

TODO

## Radicale

The final function my family and I used nextcloud for was calander and todo list syncing.
This was done over Nextclouds CalDav server,
using DavX^5 as a mobile client, and Thunderbirds Lightning plugin as a desktop client.
This was almost a more important function than filesyncing, as my wife and I use it to organize our calanders,
Keep shopping lists, chore lists, lists of movies to watch, lists of long term projects, etc.
(we *really* used the hell out of todo lists.)

For this, we used [Radicale](https://radicale.org/v3.html). Radicale *only* does CalDav and CardDav syncing, nothing else,
but between Syncthing and FileManager, thats all we needed it to do to complete the nextcloud replacement.
Installation was incredibly simple, thanks to the existence of a prebuilt NixOs module for it.
After about an hour of research and work, I had a Radicale server up and running on my Hetzner node,
and had exported all of our calanders from Nextcloud and imported them into Radicale.
