Skip to content
Peter Bieringer edited this page Dec 18, 2024 · 7 revisions

Radicale v3

Example for a simple storage layout

  • [d]: directory
  • [f]: file
[d] /var
└─[d] /lib
  └─[d] /radicale
    └─[d] /collections
      └─[d] /collection-root
        ├─[d] /USER1
        │ ├─[d] /mycalendar1 (Collection)
        │ │ ├─[d] /.Radicale.cache (automatic generated)
        │ │ ├─[f] .Radicale.props (set: VEVENT)
        │ │ ├─[f] schedule1.ics
        │ │ ├...
        │ │ └─[f] scheduleX.ics
        │ ├─[d] /myaddressbook1 (Collection)
        │   ├─[d] /.Radicale.cache (automatic generated)
        │   ├─[f] .Radicale.props (set: VJOURNAL)
        │   ├─[f] contact1.vcf
        │   ├...
        │   └─[f] contactX.vcf
        │
        ├─[d] /USER2
        ¦

Collection

Collection on storage is always a directory containing

Files: *.ics / *.vcf

Collection Type Files
VCALENDAR *.ics
VADDRESSBOOK *.vcf

File: .Radicale.props

Property file of collection

Example using jq for pretty-print

Example of a calendar collection

jq . .Radicale.props 
{
  "C:calendar-description": "Schedules",
  "C:supported-calendar-component-set": "VEVENT,VJOURNAL,VTODO",
  "D:displayname": "Schedules",
  "ICAL:calendar-color": "#ffc000ff",
  "tag": "VCALENDAR"
}

Example of a addressbook collection

jq .  .Radicale.props 
{
  "CR:addressbook-description": "AddressBook",
  "D:displayname": "AddressBook",
  "{http://inf-it.com/ns/ab/}addressbook-color": "#758857ff",
  "tag": "VADDRESSBOOK",
}


Directory: .Radicale.cache

[d] /var
└─[d] /lib
  └─[d] /radicale
    └─[d] /collections
      └─[d] /collection-root
        ├─[d] /USER1
        ¦ ├─[d] /mycalendar1 (Collection)
          ¦ ├─[d] /.Radicale.cache (automatic generated)
            ¦ ├─[d] /item (automatic generated)
              ├─[d] /history (automatic generated)
              └─[d] /sync-token (automatic generated)

Directory: .Radicale.cache/item

1:1 reflecting items in a pre-compiled format

Since 3.3.2 the item cache can be located outside by option [storage] use_cache_subfolder_for_item = True

[d] /var
└─[d] /lib
  └─[d] /radicale
    └─[d] /collections
      ├─[d] /collection-cache
      | ├─[d] /USER1 (1:1 related to below)
      | ¦ ├─[d] /mycalendar1 (1:1 related to below)
      |   ¦ ├─[d] /.Radicale.cache (automatic generated)
      |     ¦ └─[d] /item (automatic generated)
      |
      └─[d] /collection-root
        ├─[d] /USER1
        ¦ ├─[d] /mycalendar1 (Collection)
          ¦ ├─[d] /.Radicale.cache (automatic generated)
            ¦ ├─[d] /history (automatic generated)
              └─[d] /sync-token (automatic generated)

Directory: .Radicale.cache/history

historic pre-compiled items

Directory: .Radicale.cache/sync-token

file containing synchronization tokens related to each client serve only changes on request

Example for a simple storage layout

Since 3.3.2 there are even more options to store the whole cache outside the filesystem_folder

This can be used storing item cache local on the system, e.g. /var/cache/radicale/collections/collection-cache while the items, sync-token and history are stored in shared filesystem like NFS or GlusterFS.