Roundcube is my webmail. For a long time it shipped without calendars, tasks and address books. Extensions exist, but many depend on a fixed environment or pull in half a PHP stack. I wrote two plugins that do exactly what I need and nothing beyond it.
Calendar, tasks and contacts from any CalDAV server
roundcube_caldav_suite is a client for CalDAV and CardDAV. It connects to any server that speaks those standards - Radicale, Baïkal, Nextcloud, iCloud, Google - and pulls calendars, task lists and address books from it.


What is in it:
- Calendar: month, week, day and list views, multiple calendars with colours, creating, editing and deleting events, recurrence (RRULE), reminders (VALARM), categories, all-day events and time zones. The list view loads more time ranges as you scroll.
- Tasks: VTODO lists with create, edit, complete and delete, plus priority, due date, start date, progress, categories and recurrence.
- Contacts: the CardDAV address book appears as a Roundcube address book with name parts, several email addresses, phone numbers, addresses and URLs. It also shows up in recipient autocomplete while composing a message.
- Invitations: meeting invitations in mail offer Accept, Tentative and Decline, plus “propose a new time”. Accepting writes the event to the calendar and sends an iTIP reply to the organiser.
- Setup: one server URL is enough; calendars, task lists and address books are discovered.


Two properties mattered to me.
When editing, only the fields I changed are touched. Anything the form does not
know - RRULE, ATTENDEE, ORGANIZER, EXDATE, custom X- properties - is preserved
instead of disappearing on save.
Accessibility is part of the build, not bolted on: keyboard navigation, ARIA labels, semantic HTML, a fully accessible list view, a skip link to the calendar and a loading indicator that gets announced. The calendar and task lists use Roundcube’s native list semantics: select with a click, edit with Enter or a double click.
There is an optional location search with Photon (default, no key), Nominatim or Google Places. With Google the call goes through a server-side proxy, so the key stays on the server.
Requirements are PHP 8.1 or newer and Roundcube 1.6 or newer. The plugin
directory must be named caldav_suite.
Installation - one route is enough:
cd /path/to/roundcube
composer require slohmaier/roundcube_caldav_suite
Alternatively, unpack the release zip or clone the repository. Then add
caldav_suite to $config['plugins'].
Only the mail body, dark
roundcube-mailbody_dark solves a smaller problem: many newsletters are designed light and glare in a dark Roundcube theme. DarkReader in the browser helps, but recolours the whole page.
This plugin loads DarkReader into the message preview frame and enables it there. Only the mail content is themed; the folder list, toolbar and headers keep what the theme gives them.



- A button in the mail toolbar cycles Off, Dark and Light. The choice is remembered per browser and applies to every message you open.
- Under Settings, Mailbox View, “Dark mode for mail content” sits the default mode (Off, Dark, Light, Auto, System) and the fine-tuning: brightness, contrast, grayscale, sepia.
- “System” follows the operating system setting and reacts to it live.
- Tested with Roundcube 1.7.1 and the Elastic skin.

Installation:
composer require slohmaier/mailbody_dark
Then add mailbody_dark to $config['plugins'] and reload Roundcube with a hard
reload (Ctrl+Shift+R) so the new JavaScript is picked up. A moon icon appears in
the toolbar.
DarkReader is bundled, version 4.9.109, MIT-licensed, © Alexander Shutau and contributors.
Licence and where to get them
Both plugins are GPL-3.0-or-later and live on GitHub and Packagist:
Bugs and requests belong in the issues of the respective repository.