Migration from 1.x.x to 2.x.x

Why a Migration?

Radicale 2.x.x is different from 1.x.x, here’s everything you need to know about this! Please read this page carefully if you want to update Radicale.

You’ll also find extra information in issue #372.

Python 3 Only

Radicale 2.x.x works with Python >= 3.3, and doesn’t work anymore with Python 2.

(No, Python 3.3 is not new, it’s been released more than 4 years ago. Debian stable provides Python 3.4.)


Radicale now depends on VObject, a “full-featured Python package for parsing and creating iCalendar and vCard files”. That’s the price to pay to correctly read crazy iCalendar files and support date-based filters, even on recurring events.


Calendars and address books are stored in a different way between 1.x.x and 2.x.x versions. Launching 2.x.x without migrating your collections first will not work, Radicale won’t be able to read your previous data.

There’s now only one way to store data in Radicale: collections are stored as folders and events / contacts are stored in files. This new storage is close to the multifilesystem, but it’s now thread-safe, with atomic writes and file locks. Other storage types can be used by creating plugins.

To migrate data to Radicale 2.x.x the command line argument --export-storage was added to Radicale 1.1.x. Start Radicale 1.x.x as you would normally do, but add the argument --export-storage path/to/empty/folder. Radicale will export the storage into the specified folder. This folder can be directly used with the default storage backend of Radicale 2.x.x.

If you import big calendars or address books into Radicale 2.x.x the first request might take a long time, because it has to initialize its internal caches. Clients can time out, subsequent requests will be much faster.

You can check the imported storage for errors by starting Radicale >= 2.1.5 with the --verify-storage argument.

You can install version 1.1.6 with:

$ python3 -m pip install --upgrade radicale==1.1.6


Radicale 2.x.x only provides htpasswd authentication out-of-the-box. Other authentication methods can be added by creating or using plugins.


In Radicale 2.x.x, rights are managed using regex-based rules based on the login of the authenticated user and the URL of the resource. Default configurations are built in for common cases, you’ll find more about this on the Authentication & Rights page.

Other rights managers can be added by creating plugins.


Support for versioning with git was removed from Radicale 2.x.x. Instead, the configuration option hook in the storage section was added, the Collection Versioning page explains its usage for version control.