Jean-Luc Makiola 85ebbc9952 Show what a setting does, not just what it's called
The settings hub sorted the options into places you'd look for them; this
gives the pickers themselves something to say. Three rungs, cheapest first:

- Per-option summaries where the label names something it doesn't spell out:
  each agenda range resolves to real dates (so "This week" and "Next 7 days"
  stop being the same words), all-day reminders name the hour they actually
  fire at, time formats render a sample, "follow the system" says which way
  it currently falls, visibility says what other people see, widget sizes
  give their text scale, recurrence presets list their next three dates.
- Live previews where the effect is visual and no words carry it: past
  events (show/dim/hide, drawn with the agenda's own rows and filter), week
  start (the real month grid in the user's own style), and a font specimen
  set in the role each picker governs. These apply on tap and stay open —
  closing would hide the thing the screen exists to show.
- Everything else left as plain rows.

Recurrence gets a proper expansion (domain/RecurrenceOccurrences.kt) rather
than a guess: monthly on the 31st skips short months, 29 February yearly
only lands in leap years, weekly blocks count from Monday (the WKST that
applies, since toRRule writes none), and COUNT counts real occurrences.
Years appear in the list as soon as it leaves its starting year. JVM-tested.

Alongside, in the hub itself: source, licence and privacy move out of the
About card into rows at the foot of the page; support becomes the closing
row of the card's own group instead of a button inside it; category chips
cycle their accents so no group is a single colour; and section headers now
share the cards' left margin (they sat 8dp to the right of everything else).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-30 21:12:59 +02:00

Calendula icon

Calendula

A modern Material 3 Expressive calendar for Android.
Reads, writes, and reminds — on top of the system calendar, with zero network access.

CI Android 10+ Kotlin + Compose Material 3 Expressive MIT License

Get it on F-Droid   Support me on Ko-fi

Week view  Month view  Event detail  Event form  Reminder onboarding

Calendula is named after the flower whose name — like the word calendar — comes from the Latin kalendae, the first day of the month. It lives entirely on top of Android's CalendarContract: any calendar synced to your device (CalDAV via DAVx5, Google, local, WebCal subscriptions, …) simply appears, and everything you create or edit syncs back the same way. No own database, no sync stack reinvented.

Features

Calendar

  • Month, week, and day views with a one-tap view switcher
  • Full event details — attendees and their responses, reminders, recurrence (humanized), availability, visibility, foreign time zones
  • Per-calendar visibility toggle, grouped by account

Editing

  • Create, edit, and delete events — including recurring events with scoped writes: only this event, this and all following, or the whole series
  • Recurrence picker with one-tap presets and custom rules (interval, weekday toggles, end conditions); rules it can't express are preserved verbatim
  • Conflict-safe saves: if an event changed elsewhere while you were editing, Calendula asks instead of silently overwriting
  • Read-only calendars (WebCal, birthdays) are detected and respected

Reminders

  • Event reminders delivered by Calendula itself as notifications — essential when it's your only calendar app, since Android delegates reminder delivery to calendar apps
  • Tap a reminder to land on the event

Design & privacy

  • Real Material 3 Expressive throughout — dynamic color (Android 12+), expressive motion and shapes, light/dark theme
  • German and English UI, per-app language setting — and open to community translations
  • Zero telemetry, zero analytics, no internet permission — your data never leaves the device

📦 Install

Calendula is on the official F-Droid repository — just search for Calendula in any F-Droid client, or install it from f-droid.org.

Self-hosted repo (latest builds)

New versions are built, signed, and published to a self-hosted repository the moment each tag lands — usually a few days ahead of the official repo, which rebuilds on F-Droid's own schedule. Add it for the freshest builds:

  1. In your F-Droid client, open Settings → Repositories → Add (or open the link below on your phone):

    https://apps.dev.jeanlucmakiola.de/dev/fdroid/repo?fingerprint=C2C0640402BF458FC0ED957AF0B37AA4C14022E72F89CE90B5965B458CF73425
    

    Repo: https://apps.dev.jeanlucmakiola.de/dev/fdroid/repo · fingerprint (SHA-256): C2C0 6404 02BF 458F C0ED 957A F0B3 7AA4 C140 22E7 2F89 CE90 B596 5B45 8CF7 3425

  2. Refresh, search for Calendula, install.

Both channels share the same signing key, so you can switch between them without reinstalling. Or build from source — see below.

📚 Documentation

🌍 Translations

Calendula ships in German and English, and you're warmly invited to add your language. Translations are managed on a self-hosted Weblate:

Help translate Calendula

No coding needed — register on the Weblate server, pick (or request) a language, and translate the strings in your browser. You can also reach this link in the app from the top of Settings → App language.

📜 License

MIT — Jean-Luc Makiola, 2026

Description
Build infrastructure only — canonical repo: https://codeberg.org/jlmakiola/calendula
Readme MIT 14 MiB
v2.19.3 Latest
2026-08-22 09:30:36 +00:00
Languages
Kotlin 99.2%
Shell 0.4%
Ruby 0.2%
Python 0.2%