I've used Radicale for a long time. It works well. I recently moved to next cloud, only because my shared host is handling the deployment, and it comes with an integrated web UI, which is much less hassle to setup.
However, at least in my case selfhosted version is rather slow even with enough hardware and recommended tuning.