Why there is nothing to set up
A widget that shows your self-hosted calendar sounds like it needs an account, a server URL and a sync interval. This one needs none of those, because it isn't the thing doing the syncing.
On Android, calendars live in a system-wide store, the CalendarContract provider. A sync adapter such as DAVx⁵ puts your CalDAV calendars into it; Calendula reads out of it. The widget is a view onto that store, which is why it shows Nextcloud events, Google events, birthdays and a subscribed ICS feed side by side without knowing what any of them are, and why it keeps working when the app is closed and when you're on a train with no signal.
It also means the widget respects the calendars you switched off. It goes through the same query every in-app view does, so whatever you hide (in the calendar list or in the filter sheet) is hidden on the home screen too, without a widget-side list to keep in step.
What a calendar widget gets wrong
Two things, usually, and they're both invisible until they bite.
It doesn't notice the day changed. A widget that says "today" has to redraw at local midnight. The obvious mechanism, listening for the system's date-changed broadcast, has not worked for a manifest-declared receiver since Android 8, which leaves the throttled half-hourly update as the only thing that reliably moves the date. That's how you get a home screen still showing yesterday at nine in the morning. Calendula holds its own alarm for the next local midnight and re-arms it on each firing, so the rollover happens on the boundary rather than whenever the system gets round to it.
It doesn't look like the rest of the phone. The widgets are written in Jetpack Glance, and every colour except the events' own comes from a Material 3 role rather than a widget palette of mine, so they follow the system palette on Android 12 and up and track light and dark on their own. Below Android 12 they fall back to the same hand-tuned schemes the app uses, so an older phone gets a widget that matches its app rather than a grey rectangle.
A third, smaller problem is a month grid that shows dots. A dot tells you something is on that day, which you could have guessed. Calendula's month widget draws the events themselves: a coloured bar per event carrying as much of the title as fits, a multi-day event as one bar running across the days it spans in that week, and a +2 on a day with more than the three lanes allow. Tapping a bar opens that event.
Writing them in Compose is not free, and what Glance compiles down to is its own story: RemoteViews, with all the old constraints still underneath.
The other two surfaces
Both do the same small thing: open the create-event form on today, without a trip through the app's main screen.
- A quick-settings tile. Pull down the shade, tap "New event". It waits for the device to be unlocked first, since creating an event behind the keyguard is not a thing that makes sense.
- A launcher shortcut. Long-press the app icon, "New event".
What these widgets are not
- There is no per-widget configuration screen. Agenda range and text size are global settings, so every agenda widget you place looks the same.
- There is no week widget, and no task widget; tasks are Agendula's job. Its 1.0 is out on Codeberg with a widget of its own; the F-Droid listing is still pending.
- There is no widget-specific theming. No colour pickers, no transparency slider, no font choice.
- If heavy configurability is what you want, the dedicated widget apps are better at it. Calendula even accepts being launched by one of them to create an event.
Frequently asked
Will the widget show my Nextcloud or CalDAV calendar?
Yes, with no setup in the widget itself. Calendula reads Android’s system calendar store, so whatever DAVx⁵ (or Google, or Exchange, or a WebCal subscription) has synced onto the device is already there. The widget shows the calendars you have switched on in the app, and nothing else.
Does the widget need internet access?
It has none to need. Calendula ships without android.permission.INTERNET, so the widget draws from the on-device calendar store and nothing more. Whatever syncs that store keeps doing so in the background, widget or no widget.
Does it follow my wallpaper colours?
On Android 12 and up, yes. The widgets draw from Material You dynamic colour, so they match the home screen. They take that palette from the system directly, so the app’s own dynamic-colour and light/dark overrides do not reach them. Below Android 12 they fall back to Calendula’s own light and dark schemes, the same ones the app surfaces use.
Can I configure each widget separately?
Not yet. The agenda range and text size are app-wide settings under Settings, so two agenda widgets on the same home screen look the same. If you want per-instance configuration, a colour picker and a dozen layout switches, a dedicated widget app will serve you better than this will.
Why does the widget say it needs calendar access?
A widget cannot ask for a runtime permission itself. If Calendula has not been granted calendar access yet, the widget says so, and its header opens the app, where the grant happens.
Long-press an empty spot on the home screen, pick Widgets, find Calendula. If it isn't installed yet, the install page covers the five ways to get it, or read what the app actually is first.