KashCal

org.onekash.kashcal
by Zapstore _@zapstore.dev

Republished from GitHub / F-Droid by the Zapstore main account.

First release: Feb 14, 2026, 74 total releases.

Most recent release: Sep 27, 2026.

Repo

Appears in 0 app stacks.

0 sats / 0 zaps received in the past year.

Sats Received

Underlying data available via MCP: app_zaps, app_releases.

Zap Count

Underlying data available via MCP: app_zaps, app_releases.

Releases

  • Sep 27, 2026 2026.09.27
    ### Everything in this release - Added calendar colors to the Insights day bars, so each day shows how its hours split across your calendars - Changed the app icon and store art to an aubergine background - Improved sync reliability: an edit that meets a change made elsewhere now merges instead of overwriting it, a redirected or unreadable server reply can no longer lose edits or delete events, and a flaky network or a calendar the server briefly stops listing no longer removes calendars - Changed sign-in and calendar discovery to refuse a server that redirects to an unencrypted address or loops, before your password is sent - Fixed edits, invite replies and drag-to-reschedule on repeating events losing changed occurrences, the repeat rule, the time zone, or details KashCal doesn't display - Fixed a set of device-calendar edits (this and future, all events, dragging to another day, making one occurrence all-day) leaving old occurrences behind or dropping guests, organizer, tags, reminders or color - Fixed reminders on very busy calendars, which could be lost or stop KashCal from opening at Android's alarm limit, and reminders firing late on Android 12 - Fixed events created in KashCal on Stalwart not being readable, movable or deletable
    More…
    - Fixed narrowing the sync lookback removing local events - Fixed the month home-screen widget failing on busy months, #373, and TalkBack reading each widget day twice
  • Sep 20, 2026 2026.09.19
    ### Everything in this release - Changed the new-event form to open full-screen with the title focused and the keyboard ready to type - Added a setting to show multi-day timed events in the week-view all-day strip, #367 - Fixed the month home-screen widget showing "Can't show content" on dense months, #373 - Changed the navigation drawer to a tighter calendar-list spacing
  • Sep 12, 2026 2026.09.12
    KashCal is stubborn about exactly one thing: it answers to the person holding the phone and nobody else. Not advertisers, not an engagement dashboard, not whoever hands out design awards. It shows you your day and then gets out of your way. That is, in our unabashedly biased opinion, why nothing else on Android feels quite like it. We make the case in full [over here](https://kashcal.onekash.org/features/beautiful-calendar-android). This release aims the same stubbornness at a new audience: the people who want to help build the thing. Opening the KashCal codebase for the first time used to be a bit like being handed a city with no map. Now there is one, a [browsable guide to how the app fits together](https://deepwiki.com/KashCal/KashCal) you can actually ask questions of, alongside a [recommended workflow](https://github.com/KashZod/devloop) for anyone building a change with an AI in the passenger seat, so contributions turn up tested and reviewed rather than merely well-intentioned. The calendar you rely on improves fastest when its would-be improvers are not lost on arrival. ### Everything in this release - Fixed the account bottom sheets jittering while you dragged them; they now sit still like well-behaved furniture, #369 - Added a browsable architecture overview via [DeepWiki](https://deepwiki.com/KashCal/KashCal), so new contributors can learn how the app fits together, and interrogate it, before touching a line - Added a recommended test-driven, review-gated workflow, [devloop](https://github.com/KashZod/devloop), for AI-assisted contributions, plus a clearer pull-request checklist
  • Sep 5, 2026 2026.09.05
    ### Everything in this release - Fixed an event with two reminders showing both notifications at once; the newer one now replaces the older one, and both still ring, #362 - Fixed events vanishing on the next sync after you moved them out of a CalDAV calendar, including the edited occurrences of a repeating event, #365
  • Sep 4, 2026 2026.09.04
    We put KashCal on [Google Play](https://googleplay.onekash.org). Yes, the open source calendar that runs no ads and phones no one home is now stocked in a store built by an advertising company. Make of that what you will. It is the same build that ships on F-Droid, so install it from whichever store you distrust less. Contacts get an experiment this release: two-way CardDAV sync, marked beta because it is. Edit or delete a contact and it now travels back up to your server instead of sulking on your phone. ### Everything in this release - Added a [Google Play listing](https://googleplay.onekash.org) as another way to install KashCal and get updates, alongside F-Droid - Added two-way CardDAV contact sync as a beta: local contact edits, deletes, and photos now push to the server - Changed the top-bar today button to an outline calendar icon showing the date, with the numeral at full emphasis and the outline dimmed - Changed the home-screen date widget to be resizable, starting as a 1x1 icon and growing into a full date card
    More…
    - Added a two-tap discard confirmation to the event form: Cancel and the system back button now ask "Discard?" before throwing away an in-progress event - Fixed duplicated events losing their tags, so a duplicate now carries the original's categories, #363 - Fixed duplicating a device-calendar event switching to the default calendar; the copy now defaults to its source device calendar - Fixed account-hub row labels being truncated when the value beside them was long
  • Aug 30, 2026 2026.08.29
    ### Everything in this release - Fixed a pull-to-refresh spinner that stayed stuck at the top of the calendar for anyone with no CalDAV or iCloud account set up, such as a device-calendar-only user; it no longer appears without an account and no longer survives restarting the app or rebooting the phone, #356 - Fixed app-open and app-resume sync so it stays genuinely silent after the app's process is recreated, instead of a queued background sync resurfacing the spinner on the next cold start, #356 - Changed the colored sync status strip so a silent startup sync that fails or stays queued while offline no longer forces it open on a normal app open; a force sync and the first sync after adding an account still show it, #356 - Fixed the "Syncing…" system notification so ordinary background syncs on app open no longer post one; only a user-started force full sync shows it now, #356
  • Aug 25, 2026 2026.08.25
    ### Everything in this release - Fixed a subscribed calendar (`.ics`/webcal) feed's chosen refresh interval not taking effect; background refresh worked, but setting a feed to refresh more often, such as every hour, kept using the default schedule instead, #351 - Changed the month home-screen widget to keep the full month name on a single line instead of wrapping or clipping it on narrow widgets and in languages with long month names
  • Aug 22, 2026 2026.08.22
    This release of KashCal has a name instead of a changelog: Thank You for Supporting Us. KashCal spends its whole life fussing over recurring events. Today we are celebrating our favorite one: the people who keep KashCal free and open. Here is a look back at what a year of your support built. **We got out more.** KashCal started life fluent in exactly one server, iCloud, and nothing else. It now holds a conversation with Nextcloud, Fastmail, Radicale, Baikal, SOGo, Zoho, and most of the rest. Bring your calendar from wherever it lives; we have learned the local dialect. **We stopped talking to ourselves.** A calendar you keep only for yourself is a diary with ambitions. So KashCal learned invitations and replies: the plan now reaches the people in it, and they can say yes before you have booked the room. **We learned to read your handwriting.** "Lunch with Sam Friday at 1 at the usual place" used to be a sentence you then had to retype into a form. Now you write it the way you would say it, and KashCal sorts out the when, the where, and the what.
    More…
    None of that built itself. Every server we learned to speak to, someone asked for first. Every rough edge we filed down, someone reported. Some of you sent code, some sent translations, some sent one well-timed bug report that saved everyone else the trouble. If you have ever opened an issue, requested a feature, or fixed a clumsy translation in your language, this thank-you has your name on it too. You spent this summer on the good things: the trips, the dinners, the plans worth keeping, and KashCal kept every one of them straight. If you want to make it a summer to remember, here is one more date worth marking: a little support to keep this going. https://kashcal.onekash.org/donate/
  • Aug 20, 2026 2026.08.20
    ### Everything in this release - Fixed a certificate-validation weakness on the subscribed-calendar fetch path: when an `.ics` feed's server offered an incomplete certificate chain, the fallback that retrieves the missing certificate could accept one that did not chain to a trusted root; the fetched certificate is now validated against the system trust store before it is trusted, and the fetch itself is restricted to public addresses and a bounded response size, GHSA-53rw-qfc6-v32g - Added tapping an event in the month home-screen widget to open its quick view: in titles mode an event's title opens that event, and in dots mode the day's first event opens, while the rest of a day cell still opens the day - Fixed the month widget's week-number gutter collapsing or clipping the day grid to fewer rows when titles and week numbers were both shown, so turning on week numbers no longer distorts the month layout - Improved the month widget in titles mode to stretch every week row to an even height with each cell's content aligned to the top
  • Aug 19, 2026 2026.08.19
    ### Everything in this release - Fixed subscribed calendar feeds that showed events in the preview but none after refreshing, when the feed defined its own time zone under a non-standard name; the real zone is now taken from the feed's `X-LIC-LOCATION` hint and any that still cannot be resolved fall back to a floating time instead of dropping every event, #346 - Changed the month home-screen widget to show event titles at its normal placed size and across more sizes, instead of only when stretched much larger, so a freshly placed widget shows titles and only the smallest sizes fall back to dots - Improved month-widget titles to fill each day cell's width without a trailing ellipsis, with a day-of-month number sized to match the in-app month view, so more of each title is readable - Changed the month widget's minimum resize size so it can be shrunk smaller on the home screen
  • Aug 17, 2026 2026.08.17
    A colored dot can tell you that a day is busy. It can't tell you with what. The month widget now can. Give the widget a little height and its day cells stop hinting and start naming: a timed event shows as a color stripe with its title, an all-day event as a filled chip, reading the way the month view inside the app already does. There is no switch to hunt for. The widget measures the room you have given it and decides for itself, dots when it is slim, titles the moment a title will actually fit, so a narrow strip stays clean and a tall square earns its space. The idea came from the community, contributed by langfeld; the version shipping here grew a sense of its own size, so it needs no setting at all. Drag a corner and watch it change its mind. ### Everything in this release
    More…
    - Added event titles to the month home-screen widget: day cells can show a timed event as a color stripe with its title and an all-day event as a filled chip, mirroring the in-app month view, and the widget switches between dots and titles on its own based on how tall you size it, with no setting to manage, contributed by langfeld in #336 - Added tapping the `+n` overflow marker in a month-widget day cell to open that day - Added pull-to-refresh to the full-height Month view - Fixed calendar invitations not being emailed for events created on servers such as Nextcloud; the organizer was written as an internal server path instead of an email address, so the server rejected it as an invalid calendar user and sent nothing, #340 - Fixed the current-time line jumping away from the real time when you pinch-zoom the week grid, #339 - Fixed the quick-view sheet still showing an event's old title and details right after you edited it, #338 - Fixed calendar views not updating immediately after you add, edit, or delete an event on a device calendar from inside KashCal - Changed the current-time indicator to size itself in density-independent units so it looks consistent across screen densities - Added an info tooltip to the Contacts sync toggle in each account's settings, explaining what read-only contact sync does - Localized the ICS subscription sync-interval labels and the default subscribed-calendar name, so both appear in your language
  • Aug 14, 2026 2026.08.14
    ### Everything in this release - Fixed CardDAV contacts failing to sync on accounts whose server hands back a broken auto-discovery response, such as a server running behind a reverse proxy on a non-standard port, or one that rejects the discovery probe outright; contact sync now reuses the connection details the account already worked out when you set up its calendar, so contacts come through on servers where before only the calendars synced - Fixed a rare case where all of an account's synced contacts could be wiped from the phone when contact discovery momentarily returned no address books; an empty discovery is now treated as no signal rather than a reason to remove contacts already synced - Added a Beta badge to the Contacts toggle in each account's settings, marking read-only contact sync as still stabilizing - Improved the change-password field so it uses a password keyboard and lets your credential manager offer to fill and save the new password, matching the sign-in fields
  • Aug 9, 2026 2026.08.09
    ### Everything in this release - Fixed a deleted event not disappearing from KashCal after another client removed it on the server; when the server echoes the event's address with the `@` in its filename written as `%40`, the deletion is now matched and applied instead of silently skipped, #333 - Changed pull-to-refresh to sync CardDAV contacts as well as calendar events, so a swipe-down picks up contacts added on the server right away instead of waiting for the next periodic sync - Fixed contact sync skipping past a contact it could not read and never coming back to it; a contact whose card failed to parse no longer gets stranded, and the next sync retries it
  • Aug 8, 2026 2026.08.08
    ### Everything in this release - Fixed CardDAV contact sync bringing over almost no contacts and no photos once installed; every vCard was silently failing to parse on release builds, so an account that looked fine in testing landed a nearly empty address book on the phone, #10 - Fixed real calendars and address books being hidden when their path or account name merely contained a word like inbox, outbox, or tasks; only genuine scheduling and task collections are skipped now - Added drilling into Day view by tapping a day-column header in Week or 3-Day view, with a back press returning to the exact week or span you came from, contributed by @Wqrld - Changed the Quick View buttons for Edit, Delete, Duplicate, and Share to icons so they no longer wrap in longer languages, contributed by @Wqrld - Shortened the all-day overflow badge in Week and 3-Day view to +N with a larger tap target, contributed by @Wqrld - Enlarged the week-view day-header letter and date number to match the 3-day header - Changed the delete-confirmation buttons to a single centered line and relabeled the editor's "Confirm Delete" to "Confirm" to match Quick View
  • Aug 7, 2026 2026.08.07
    Your calendar account has always known your contacts existed. Now it can bring them with it. Turn on the new Contacts switch for a CardDAV account and the contacts living on your server land on your phone: names, numbers, emails, photos, the phonetic spellings and job titles and custom labels you filed them under. They show up in your phone's own address book, next to everyone else, and they keep themselves current every time the account syncs. To switch it on, open the account from your settings and look under the calendar sync toggle for a Contacts row (it appears for accounts that carry contacts, like iCloud and Nextcloud). Flip it, grant the contacts permission when asked, and the first sync fills in the rest. Flip it back off and those contacts leave your phone as cleanly as they arrived. One direction only, for now. This first phase is a mirror: it reads your server and writes to your phone, never the reverse, so nothing you do on the device reaches back and rewrites the contacts on your account. Two-way editing is coming in a later release; read-only is the safe half to ship first, and the half worth having on day one. ### Everything in this release
    More…
    - Added read-only contact sync for CardDAV accounts: a Contacts toggle in each account's settings (shown for contact-carrying providers) mirrors that account's server contacts onto your phone as a one-way, read-only sync for now, and removes them when you turn it off - Added contact detail to the mirror: names with phonetics and multiple values, phone numbers and emails with their custom labels, job title and role, categories, and contact photos fetched from the server - Added an app permissions screen, reached from your account, listing every permission KashCal uses with a direct link to each one's system settings - Fixed a pure-black or pure-white widget accent seed rendering as a muddy gray; it now paints a crisp black panel with white text, or white panel with black text, in both light and dark mode, while event colors and the dimming of past events stay intact - Fixed exported `.ics` files and share-card filenames dropping non-ASCII characters from the event title; accented and non-Latin names are kept - Fixed exported `.ics` files not escaping carriage returns and reminder text, so events with multi-line notes or alarms round-trip correctly per the calendar spec - Localized all of the above into every supported language
  • Aug 3, 2026 2026.08.03
    Your widgets used to borrow the app's whole look whether you liked it or not. Now they have a say of their own. Open your account settings and scroll to Make it yours: alongside the app's own theme and accent, there are now two rows for your widgets. Leave them on Follow app and nothing changes; each widget keeps wearing whatever the app wears, down to the light or dark face and the accent you picked. But pin the widget theme to Light or Dark and it holds that face on your home screen no matter what the app or the phone is doing, and give it an accent of its own and it carries that color while the app keeps its. A calendar on your wall can finally read differently from the one in your hand. This one came from the community: the independent widget appearance landed as a contribution from langfeld (#315). The rest of the release is quieter work on the parts you don't see until they bite: a whole calendar all but vanishing after a sync that reported no error, oddly-numbered repeat rules that used to fail outright, and local-network calendar feeds asking permission the way Android 17 now expects. ### Everything in this release - Added independent light/dark theming for home-screen widgets, in account settings under Make it yours, with a Theme row offering Follow app, Light, or Dark; Follow app tracks the app's own face, and a fixed choice holds regardless of the app or device setting, contributed by langfeld in #315 - Added an independent accent color for widgets, so a widget can carry its own color while the app keeps its; the accent's follow-the-app option now reads "Follow app"
    More…
    - Changed the widget personalization rows to read simply "Theme" and "Accent" - Fixed a SOGo account syncing without any error but showing almost none of your events, often just a single recurring one; the calendar query sent a far-future cutoff that servers with 32-bit time limits silently choke on, which dropped everything else, so the query is now open-ended and your events come back, #326 - Fixed monthly and yearly repeat rules with a two-digit or signed week number failing to expand instead of showing their events - Fixed a single edited occurrence of a repeating event occasionally attaching to the wrong day when its date carried a time zone offset - Added the local-network permission Android 17 requires for calendar feeds on your home network, requested through an inline banner on the subscription screen rather than a blocking dialog - Localized all of the above into every supported language
  • Aug 2, 2026 2026.08.02
    ### Everything in this release - Fixed deleting a server-hosted event (one carrying an organizer, as Fastmail and iCloud events do) failing and freezing the event's link when the server had quietly changed the event since your last sync; the delete now refetches the current version and retries once instead of getting stuck, addressing the delete half of #311 - Changed the automatic title emoji to never decorate sensitive events: titles mentioning a funeral, memorial, hospice, surgery, biopsy, chemo, divorce, custody, a hearing, or a layoff are left plain - Fixed the automatic emoji matching whole words only, so a word like "test" or "bar" sitting inside an unrelated title no longer picks up a stray emoji; "bar exam" now reads as books rather than beer - Fixed a synced event that already carries its own emoji getting a second one stacked in front; a title that already contains an emoji is left as is, and ordinary non-Latin text is no longer mistaken for one - Fixed text-style symbols like `™`, `✓`, and `➡` being treated as emoji, so a title using them still gets a matching emoji - Fixed the all-day label in the day, 3-day, and week views overflowing its column; it now shrinks to fit - Fixed a drag or tap in the week view acting on the wrong event after you reschedule one, so the gesture stays bound to the event you touched
  • Jul 31, 2026 2026.07.31
    You could already tag an event. Now the tag is yours to keep. Until now a tag was a word you sprinkled on with a #hashtag and mostly forgot. You could see it, but you couldn't manage it: no way to recolor it, no way to fix a typo across every event at once, no way to retire one you'd stopped using. And it lived only in KashCal, so the same event pulled from the calendar already on your phone sat there bare. This release gives tags a home. There's a manager now, reached from your account, where each tag has a color you pick, a name you can change, and a delete when you're done with it. Rename one and it doesn't just fix the label on your screen; it rewrites the tag across your events and pushes the new name up to your CalDAV account, so your other devices catch up instead of drifting. Removing a tag from the manager only clears the label from the list, never the events themselves, and the screen says so if you ask. The reach grew too. Events from your device calendar can carry tags now, the same as any other: add and remove them in the editor, see them as chips on the card and in the quick view, with the same colors and suggestions as the rest. A label you can't recolor, rename, or take with you isn't really yours. This one is.
    More…
    ### Everything in this release - Added a tag manager, reached from your account, where each tag has a color you choose, a name you can change, and a delete; renaming a tag onto a name that already exists merges the two - Changed a tag rename to propagate: renaming updates your KashCal and CalDAV events carrying the tag and re-uploads them to your CalDAV account, so the new name reaches your other devices instead of staying only on this one - Added tags to device-calendar events: add and remove them in the editor, see read-only chips in the quick-view sheet and on cards, with tag colors and suggestions shared with your other events and a round-trip through the standard categories field - Added a configurable all-day row count in the day, 3-day, and week views: a chevron expands the all-day strip to show every event instead of one-plus-a-count, and the choice persists across restarts and travels in a settings backup (#204) - Fixed the new-event button opening the full form instead of Quick Add in the day, 3-day, and week views when Smart event add is on (#320) - Fixed the monochrome themed launcher icon showing a blank shape; it now carries the calendar glyph, scaled to sit inside the adaptive-icon safe zone, so it matches the main icon on themed home screens (#317) - Removed the Insights row from the account hub, since it is already reachable from the navigation drawer
  • Jul 29, 2026 2026.07.29
    > **Announcement:** Get early access to KashCal on the Google Play store. Details: https://github.com/KashCal/KashCal/issues/32 Your widgets have been speaking in shorthand. A list widget only gets so many pixels, so every event on it had learned to say everything on one line: a color, a start time, a title, and then it ran out of room. Which is fine until the thing you actually wanted to know was when it ends. A block that starts at nine could wrap up at nine-thirty or swallow the whole afternoon, and the widget wasn't telling. You opened the app to find out. Now the row can stretch its legs. A new **Detailed widget rows** switch, sitting in Settings next to the widget event limit, gives each event two lines instead of one: the title on top with the whole width to itself, and underneath it the full span, nine-thirty to ten-thirty, so the shape of your day is legible from the home screen. All-day events say so. An event that started yesterday and is still going shows where it lands, with the date when the finish line is another day off. The time reads in whatever clock you set inside KashCal, twelve or twenty-four, not whatever the phone happens to prefer. Leave the switch off and nothing changes: rows stay compact and single-line, the way they were, so a packed calendar still fits. It applies to the agenda, the week, and the upcoming list alike, and the detailed row sits right at a comfortable tap size.
    More…
    Two lines, when one was never quite enough. ### Everything in this release - Added a **Detailed widget rows** toggle in Settings that switches the agenda, week, and upcoming list widgets between a compact single-line row and a detailed two-line row showing each event's start and end time - Changed the detailed row's time to follow the in-app 12/24-hour setting rather than only the device clock, so it matches the rest of the app - Fixed the widgets not honoring genuine Material You colors in automatic mode; they now render on the device's real dynamic palette instead of a reseeded tinted scheme, matching the launcher and system UI - Fixed the Quick Add dialog letting the keyboard and system bars overlap its card in landscape or at large font scales; the card now clears the insets and scrolls so Save stays reachable
  • Jul 27, 2026 2026.07.26
    Two fixes this release, both for things that talked over you. Import a big .ics file and the old Import button gave no sign of life. So you tapped it again, the way anyone leans on an elevator button that won't admit it heard you. It heard you the first time. It heard you all three times, and it imported your two hundred events once per tap, until your calendar read like a stutter and every dentist appointment came in triplicate. Now only the first tap counts. The button turns into a spinner and says Importing while it works, and the rest of your taps hit a closed door. The Settings importer and the share-to-KashCal path both learned to say when they're busy. The other fix was in the dark. A widget header, on a dark theme, glowed like a bright pastel bar someone forgot to turn off, the one thing in the room still wide awake. It sleeps now. The header settled into a dark tinted tone that matches the body, so the widget is one calm panel again, and the text stays readable against any accent you pick. ### Everything in this release - Fixed importing an `.ics` file creating duplicate events when the Import button was tapped more than once during a slow import; the button now latches on the first tap and shows an `Importing…` spinner (#309) - Changed the import flow so both the Settings importer and the share-to-KashCal path share the single-tap behavior
    More…
    - Fixed a widget header rendering as a bright pastel bar on dark themes, so it now uses a dark tinted tone that matches the widget body while keeping header text legible
  • Jul 25, 2026 2026.07.25
    Every KashCal widget has to sell itself from behind glass. Before you add one, you meet it in the system's widget picker, that showroom of previews. Until now, KashCal sent all five of its widgets to the audition in the same outfit: a blank panel, a spinner, and the app name. The agenda, the month, the week, the date, the upcoming list, five siblings in one gray coat, none willing to say which one they were. Picking a widget meant adding it, squinting, guessing wrong, removing it, and going again. They introduce themselves now. Each widget previews as what it is: the agenda shows a day with a couple of events on it, the month shows a grid, the week its strip, the date its day, the upcoming its list. The previews run the same code the live widget runs, so the model in the showroom is the one that gets delivered, and the sample text is translated like everything else. The month widget changed the most. It wears single-letter day names across the top, an optional week-number column down the side, and marks today with a solid filled circle instead of a faint tint. The circle grows with your font size, so it stays round from default text up to the largest. And it listens: change your first day of the week or turn week numbers on, and it updates without a restart. The headers match heights now, the plus sign reads clearly and is easy to hit, and the body lets your accent color tint through instead of sitting on flat gray. Two smaller things. The view menu runs shortest to longest now, a single day up through the whole year, thanks to a pull request from [@az0ran](https://github.com/az0ran). And Settings and the profile hub slide between each other instead of cutting.
    More…
    Five widgets that answer the door when you knock. ### Everything in this release - Added per-widget previews in the system widget picker on Android 15 and up, so the agenda, month, week, date, and upcoming widgets each preview as themselves instead of an identical placeholder - Added localized sample content to those previews, drawn from the same composables the live widgets use so a preview matches the real widget - Added single-letter day-of-week names across the top of the month widget - Added an optional week-number column to the month widget - Changed the month widget to mark today with a solid filled accent circle around the date, and gave the agenda, week, and upcoming widgets a uniform day-header color - Fixed the month widget's today marker to grow with the system font scale so it stays round at large text sizes - Fixed the month widget to apply first-day-of-week and week-number changes immediately instead of only after a restart - Fixed multi-day events spilling outside the month widget's visible range by clamping them to the shown window (#306) - Added header refresh buttons to the agenda, week, and upcoming widgets - Improved widget headers with matching heights, a plain readable "+", and larger touch targets, with spacing so a month-navigation tap can't land on the add button - Improved the event-row tap target in the list widgets to 40dp - Changed the widget body to let the accent color tint through instead of showing flat gray - Changed the view menu to run shortest span first, from a single day up through the full year, via a pull request from [@az0ran](https://github.com/az0ran) - Added an animated transition when moving between Settings sub-screens and the profile hub
  • Jul 23, 2026 2026.07.22
    Every family has the sibling who peaked early and the one who spent the summer reinventing themselves. In KashCal, those siblings are the account hub and Settings. The hub is the one that showed up recently in a full-screen makeover, all round avatar and tidy sections, and collected the compliments. Settings, meanwhile, had been wearing the same nested-menus-and-dropdowns outfit since roughly the invention of the dropdown, and it had feelings about the attention. So this release, Settings went for it. Every row now wears its current value on the right, so you read your whole setup at a glance instead of opening each one to check. Tap a row and a picker slides up from the bottom instead of a menu unfolding on top of everything. The section headers learned to search, so "which screen was the widget limit on again" is a question you type, not a scavenger hunt. Default alerts split into one for timed events and one for all-day, because "remind me 10 minutes before" and "remind me the morning of" were never the same wish. Sync frequency, which used to hide, now sits out in the open as its own row. And the custom-alert wheel stopped dismissing itself mid-spin, waiting politely for you to say Done. Not to be upstaged, the hub tailored its own outfit. The Accounts entry wears a proper button now so adding or managing an account is easy to find, external links speak up for screen readers, and the small things got straightened out, a clipped pencil badge and an avatar that used to vanish on pale themes. We will let you decide which sibling looks better. We are not picking sides at family dinner. While the two of them fussed over mirrors, the quieter work happened in the plumbing, and it matters more than any button. Edit a single occurrence of a repeating event and it stays a single edit, instead of quietly multiplying into duplicate or brand-new events on the next sync. When your server drops an exception from a recurring series, KashCal prunes its local copy to match instead of keeping a ghost. Import an .ics file full of a repeating event and it arrives as one linked series, and events that came with no unique ID no longer collide and overwrite each other.
    More…
    Two siblings, one fresh coat of paint each, and a calendar underneath that finally keeps repeating events straight. ### Everything in this release - Added a current-value display on the right of every Settings row, with the search match highlighted - Changed Settings rows to open a bottom-sheet picker instead of a dropdown menu - Added searchable Settings section headers that surface the whole group on a match - Split the default alert into separate timed-event and all-day defaults, with an all-day 9 AM hint - Added sync frequency as a visible Settings row instead of a hidden control - Fixed the custom-alert wheel to commit only on `Done`, stop dismissing the sheet mid-scroll, and preserve off-grid or unchanged alert values - Improved Settings layout: inlined the emoji and app-lock toggles, clearer labels, tighter grouping, and consistent row units - Changed the backup, restore, and widget-limit rows to use distinct icons - Added screen-reader announcements for Settings picker selection state and for external links that open in the browser - Changed the account hub's Accounts entry to a clearly outlined button that is easier to find - Fixed a clipped pencil badge and added an outline to the hub avatar and Accounts pill so they stay visible on pale accent themes - Fixed the "today" highlight to stay visible on pale accent colors by outlining it - Added translation of the built-in "Local" calendar name in each language - Fixed editing a single occurrence of a recurring event multiplying into duplicate or new events on sync - Fixed local exceptions lingering after the server dropped them from a recurring series; they are now pruned to match - Fixed importing an `.ics` recurring event with changed occurrences so it arrives as one linked series - Fixed imported events with a blank or missing UID colliding and overwriting each other - Localized the import and calendar-permission messages
  • Jul 19, 2026 2026.07.19
    This release of KashCal is about being understood. It is the thing everyone claims to want and almost no one delivers. Couples pay a therapist by the hour to translate "I'm fine" into its actual meaning. Ask any marriage that lasted forty years for the secret and you never hear "love" or "patience," you hear some version of the same quiet miracle: one person knowing what the other meant without being told twice. Being understood is the whole ballgame. Most software is not even parked outside the stadium. So we taught Quick Add to listen. We were going to tell you we made it "better." Scratch that. "Better" is what you call a slightly bigger button. This is Quick Add finally understanding what you meant. Type "lunch every 2nd Tuesday" and the right monthly repeat is just there, no dialog, no wheel-picker archaeology. Write "rent last day of the month" and it lands on the last day, every month, without you counting on your fingers. "Gym weekday at 7" already knows you mean Monday through Friday. Trail a thought after a " //" and everything past it slips quietly into the note. The box stretched to several lines with a character count, because sometimes the event is short and the story is not. And when you would rather point than type, a picker now lets you choose a "2nd Tuesday" or a "last Thursday" yourself. KashCal listens to [the whole sentence](https://kashcal.onekash.org/features/natural-language-add-event-calendar) and never once asks how that makes you feel. The rest of the app got easier to read while we were in there. The agenda greets you with "Today" and "Tomorrow" instead of bare dates, folds its week strip away when you want the room, and now reads those week cells aloud to screen readers. The old three-dots menu became a round avatar: tap it for a full-screen hub where you set your two initials, reach Accounts & Settings, jump to a date, share your availability, and pick your theme, accent color, and app icon, all in one place.
    More…
    We can't save your marriage. We can, at last, get "every 2nd Tuesday" right the first time. ### Everything in this release - Quick Add: natural-language recurrence, weekend, and time parsing - Quick Add: multi-line notes field with a 500-character cap and counter - Quick Add: capture an inline note with a " //" delimiter - Quick Add: "…of this month" phrases resolve to a one-off date in the current month - Quick Add: "last day of the/every month" parses as the last day of the month - Quick Add: monthly recurrence anchors its start to the first occurrence - Recurrence: choose an ordinal weekday for monthly rules (1st–4th or Last), e.g. "2nd Tuesday" or "last Thursday" (#193) - Agenda: relative day headers ("Today"/"Tomorrow") and a collapsible week bar - Agenda: week-bar cell colors match the date picker, and week snapping is fixed - Accessibility: agenda week-bar cells are described to screen readers - The top-bar menu is now a circular avatar that opens a full-screen hub (Invites, Go to date, Share availability, Insights, Settings, About, Privacy & Security) - Set your own two-letter initials on the avatar; a neutral person glyph shows until you do - Theme, accent color, and app icon now live in a "Make it yours" section in the hub - An "Accounts & Settings" button at the top of the hub makes adding or managing an account easy to find - Settings backup now includes the agenda week-bar expanded/collapsed choice
  • Jul 17, 2026 2026.07.18
    New app icon. The old one was three calendar cards in a loose pile, like they had just been dealt. Now they are a proper deck, squared up and stacked, matching the cards KashCal has always drawn on your share images. The top-bar logo got the same tidy-up and still counts off today's date; the supporter icon kept its gold card and its heart. While we were in there: empty days now say something kinder than "touch grass" and vary the line so it never nags, and CalDAV servers on your own home network are reachable on Android 17 with a quick permission ask instead of a mystery error. ### Everything in this release - New deck-of-cards app icon, top-bar logo, and supporter icon - Empty days show gentler, rotating copy instead of one fixed line - Target Android 17 (API 37), with an inline local-network permission ask for CalDAV servers on your home network - Tidied translations across all 67 languages for consistent ordering and calendar wording
  • Jul 17, 2026 2026.07.17
    A calendar is for scheduling things. So naturally, we asked our marketing team to sit with that idea for an afternoon and write up this release. Several donut holes past the point of good judgment, they came back not with scheduled thoughts but with a whole feed of ["unscheduled thoughts"](https://kashcal.onekash.org/unscheduled-thoughts): a steady drip of tiny, mostly kind notes like "You are not behind, time is just ambitious," which is, for the marketing arm of a scheduling company, either a resignation letter or a mission statement. We could not decide which, so we shipped it as a calendar you can subscribe to. It never blocks your day, it means well mostly, and yes, the "webcal://" fix in this very release is what lets you add it in one tap. Subscribe, and let a donut-addled marketing team quietly improve your week. With them safely occupied, we wrote the actual notes. A calendar has exactly one job: to tell you, without drama, what is on and what is not. So it was philosophically upsetting to find the week and 3-day views treating that as optional. Delete an event and it lingered; add one and it refused to show; the only way to force the matter was to look away, drift over to the month view, and come back, at which point the event would resolve into existence as though it had been waiting for an audience. We turned it into a small thought exercise. An event you have created but the screen will not confirm: is it scheduled, or not? For a while, in those two views, the honest answer was both, right up until you observed it. Charming for a cat in a box. Unhelpful for a Tuesday. This release collapses the waveform. Add, edit, or delete anything in day, week, or 3-day and it appears the instant you act, sync included, no detour required. Agenda and month, already well behaved, now share the same plumbing. The + button also stopped freelancing: in a time-grid view it starts a new event today at the next hour rather than some wrong day at an odd time. And that "webcal://" subscribe link, which KashCal used to answer with a network error while privately knowing exactly what it meant, now simply works, with a message in your own language on the rare feed that will not load. Everything scheduled, nothing left in the box. ### Everything in this release
    More…
    - Fixed the week and 3-day views not showing added, edited, or deleted events until you switched views and back (#297) - The + button in day, week, and 3-day views now starts a new event today at the next hour, instead of the wrong day or a default hour - Accept webcal:// links in the "Fetch Calendar" subscription preview instead of failing with a network error - Localized the ICS subscription fetch error messages
  • Jul 16, 2026 2026.07.15
    Since the beginning of time, or at least of KashCal, your events have been sorted the way a coat check sorts coats: by which calendar they were flung into, and not one thought more. This release lets you label them yourself. Meet tags. Type one in the event form, or fling a #dentist straight into Quick Add and watch it land as a smug little colored chip that then follows the event around the day, week, and agenda views like it owns the place. Tap the event open and the tags are right there in quick view, quietly confirming that yes, this is a #focus block, and no, it is not the third #standup of the day you had every right to skip. Start typing and KashCal hands back the tags you already use, which is the only known cure for "Errands" fracturing into "errands," "ERRANDS," and one deeply confident "Errnads" by Thursday. And should you decide tags belong above your notes rather than below, the row's little ⋮ menu will move it, and we will pretend that was our idea all along. While the tags moved in, the rest of the event form had a tidy-up. The location field came up to sit under the title where you reach for it first, free and busy moved to the bottom where it belongs, and a small army of stray dividers and uneven margins were shown the door. Nothing you can name, everything you can feel. Two quieter fixes matter more than they look. If you run your own server on a LAN or a VPN, sync no longer hangs forever on "Preparing to sync" because Android could not phone home to the public internet first. Reachable is now enough. And the thirty-day "your changes could not sync" warning has stopped buzzing you over and over for the same events, and now names every calendar involved instead of shrugging. Now the fine print, delivered upfront because we have no interest in being that app. Tags currently work on the events KashCal syncs itself, your iCloud and other CalDAV calendars. The device's own calendars, the Google, Samsung, and Exchange ones Android politely shoves through the door, are still tag-free for a release or two while we teach them manners. Rather than pretend otherwise and let your tags quietly vanish into the void, we simply hid the tag row on those events, which we feel is the mature response. More tags, more places, more tricks are queued up. This is version one of roughly several, and we are only telling you that so nobody accuses us of overselling a chip. A few more papercuts, since we had the tweezers out. Events with no length, the ones you pin to a single moment, used to disappear entirely in the day and week views; they now show up as the small blocks they always meant to be. Emoji in a synced description arrive as the emoji you sent instead of a puzzled little box. And a garbled duration from some other app can no longer bend an event's end time back to before it started.
    More…
    Small labels, better plumbing, fewer papercuts. Tag it and move on. ### Everything in this release - Event tags (first release): colored chips on events, shown in day, week, and agenda views and the quick view, on iCloud and CalDAV events for now - Create tags from the event form with usage-ranked suggestions and inline # autocomplete in the title - Add tags from Quick Add by typing #tag, persisting across create and all edit scopes - Reorder the form tag row above or below notes from its ⋮ menu - Moved the location field up under the title in the event form - Moved free/busy to the last row of the event form - Tidied the event-form layout: consistent divider spacing, aligned row icons, and tighter all-day and title rows - Shortened the location placeholder to "Address or link" - Fixed self-hosted CalDAV/ICS sync hanging on "Preparing to sync" over LAN or VPN networks (#296) - Fixed the expired-sync notification repeatedly alerting, and it now names every affected calendar - Localized the agenda card date labels ("All day", "Day X of Y", "Starts", "Ends") - Fixed zero-duration and very short events disappearing or overlapping in the day, 3-day, and week views - Fixed emoji and other extended characters in synced event descriptions rendering as a stray box or wrong character - Fixed a malformed event duration producing an end time before the start - Sharpened the widget header contrast for pure white and pure black accent colors
  • Jul 13, 2026 2026.07.13
    Your agenda finally learned to read the room. For years its top bar proudly announced "Agenda," heroically confirming that the agenda screen was, against all odds, the agenda screen. Thank you, brave label. It has now been reassigned to showing the month you are actually looking at, keeping pace as you scroll, so August becomes September without you wondering where the summer went. And there is more of it: ninety days ahead instead of thirty, because your future has a way of arriving whether we render it or not. The day timeline has also been persuaded to stop having amnesia. Pinch to zoom the hours in or out, and it now stays exactly where you left it after you close the app, rather than resetting to default overnight and pretending the two of you never met. The month view, meanwhile, had a charming habit of opening in December 1969 if you hadn't tapped a day first. Lovely for nostalgia, useless for dentist appointments. It now opens in the current month, having been gently reminded which decade we are all living in. KashCal has now retired from its brief career impersonating a relic from 1969 and checked in to 2026, where the rest of us have been waiting. ### Everything in this release
    More…
    - Agenda now shows the next 90 days of events instead of 30 - The agenda top bar shows the current month and updates as you scroll, replacing the static "Agenda" title - Fixed the month and full-month views opening on December 1969 when no day was selected yet - The day timeline remembers your pinch-to-zoom hour height across app restart
  • Jul 11, 2026 2026.07.11
    Last release we gave you KashCal Teal and were very pleased with ourselves. Then someone pointed out the obvious: we had spent a whole update letting you choose your color, and then chose it for you. A calendar telling you your favorite color is teal is a bit like a waiter ordering for the table. Bold. Rarely correct. So this release we got out of the way. Pick your accent from all 92 colors, and it runs through the entire app and, for the first time, out onto your home screen widgets too. The agenda, week, month, and date widgets all wear it, down to a proper raised add button. Want the old magic where the color follows your wallpaper? "Automatic" keeps your Material You colors exactly as they were. Our marketing team, several donuts deep by mid-afternoon, has decided to call this "Calendar You." We did the math on 92 colors, one calendar, and infinite you, and we could not find the flaw, so it is approved. Please clap. While we were in a generous mood: the week and 3-day views now remember where you were looking and put you back there when you reopen the app, instead of scrolling you off to some default hour like nothing happened. And moving an event to another calendar no longer quietly eats a title or note you edited in the same breath. Ninety-two colors. Still one calendar. Now unmistakably yours.
    More…
    ### Everything in this release - Accent color picker: theme the whole app and all home-screen widgets with any of 92 colors, defaulting to KashCal Teal (#293) - "Automatic" accent keeps your Material You / wallpaper colors - Agenda, week, month, and date widgets recolor to your accent, with a raised add button - Week and 3-day views restore your last scroll position across app restart (#224) - Moving an event to another calendar preserves title/note edits made in the same save (#292)
  • Jul 6, 2026 2026.07.06
    This release is about making KashCal yours. Two new choices, both in Settings, one for how the app looks and one for how it shows up on your home screen. First, color. KashCal now has a proper theme picker. Stay on System, pin Light or Dark, or switch on KashCal Teal, our own palette that follows your phone's light and dark setting while keeping the brand green front and center. It runs through the whole app, contrast-checked so text stays readable on every surface, light or dark. Second, the icon on your home screen. If you've chipped in to keep KashCal free and ad-free ([or you'd like to](https://kashcal.onekash.org/donate)), you can now wear it: a gold Supporter icon with a little heart on the calendar card. Pick it under Settings then App Icon in whichever flavor you like. Keep the KashCal name, or go incognito with the same icon labeled simply "Calendar." Whether you're already a supporter or about to become one, here's a thank you from us. KashCal, the calendar you already love, now in your colors and wearing your badge. ### Everything in this release
    More…
    - New theme picker in Settings: System, Light, Dark, or KashCal Teal - KashCal Teal palette follows your phone's light/dark setting and is applied app-wide, with WCAG-checked contrast - New supporter app icon: a gold card with a heart, chosen under Settings then App Icon - Two supporter variants, sharing one icon: one keeps the "KashCal" name, one shows a discreet "Calendar" name on the home screen
  • Jul 5, 2026 2026.07.05
    For a while now, KashCal has had a quiet flaw: you could only use it by looking at it. It worked beautifully with your eyes, and went silent as a stone the moment you turned on a screen reader. A calendar that only works when you're watching it is, on reflection, a poster. So this release taught it to talk. With TalkBack on, you can now move through KashCal by ear. Jump between headings, hear sync and offline status the moment it changes, and get told when a sign-in or a save fails instead of wondering why nothing happened. Events announce what they are, so a cancelled event says "cancelled" out loud rather than just looking faintly sad about it (it wears a line through it now, for the sighted crowd too). Bottom sheets say their name as they open, the drawer tells you which view you're in, and a subscription can finally be deleted with a real action instead of a swipe nobody could find. While we were teaching it manners, we sent the languages out to live where they belong. KashCal now advertises all 67 of them to Android, so on Android 13 and up you pick the app's language in system settings alongside everything else, instead of spelunking through ours. Two smaller dignities came along for the ride. Rotating your phone in the middle of an event no longer throws the whole thing away, and typing a title now capitalizes the first letter like a grown-up. Same calendar. Now it works with the screen off, the phone sideways, and your eyes shut.
  • Jul 3, 2026 2026.07.02
    Dispatch from [OneKash Labs](https://onekash.org/), best known (of all things) for a calendar: We keep meaning to invent something important. Then July 22 rolls around, the lab throws its annual Pi Approximation Day party (the one where 22/7 gets to cosplay as π and nobody files a complaint), someone gets ideas, and we end up improving the calendar again. Here is what escaped this time. Exhibit one: precise numbers. The 5-minute time wheel is lovely right up until you need "3:47," at which point it just shrugs. So there is now a keyboard button on the time picker: tap it, type any minute you please. Events already sitting on an odd minute show the exact time as tappable text instead of quietly rounding themselves to the nearest five while you looked away. Your 8:52 standup stays 8:52. Exhibit two: in honor of 22/7 being a wonderfully compact stand-in for something infinite, we went hunting for fat to trim and found the app hauling a crate of packing peanuts. We cleaned house. KashCal is now roughly a third smaller to download and install. Same calendar, less luggage. Still just a calendar. Now a slightly better one. Happy (approximately) Pi Day.
  • Jul 2, 2026 2026.07.01
    - Spent way too long shaving pixels off the widgets so you don't have to think about them: slimmer event rows, a skinnier color bar, and spacing that finally lines up. More of your day, less of the chrome. - The time column no longer eats your PMs. 12-hour times fit on one line like they always should have.
  • Jun 30, 2026 2026.06.30
    • New documentation site: https://kashcal.onekash.org/docs/ • Widget times no longer clip or wrap. 12-hour times now fit on one line. • Fixed CalDAV sync with Xandikos servers being treated as read-only.
  • Jun 28, 2026 2026.06.28
    Widget improvements - Bigger, more consistent text across all widgets (agenda, week, upcoming, month, date), with bolder month day numbers for readability. - The calendar color now appears as a slim pill on the left in the agenda, week, and upcoming widgets, matching the common calendar layout. - The Upcoming widget's day headers now show the date next to Today and Tomorrow, for example "Today (Tue, Apr 28)". - The month grid no longer crops its bottom week row when resized small, and the upcoming and week widgets can be resized smaller than before. - Translated into all supported languages.
  • Jun 28, 2026 2026.06.27
    **New: Scheduling on device calendars** Add people to events in your phone's calendars (Google, Outlook, and others), RSVP, and add or remove guests. Like CalDAV, KashCal doesn't email anyone directly. It hands the invitation to the calendar account on your phone, and that account's sync sends it. So invitations only go out if that account supports scheduling, which is how Google and Outlook calendars already send invites. **New: App lock** Keep your calendar private behind your fingerprint, face, or screen lock. Opening KashCal asks to unlock, and turning the lock back off asks too, so an unlocked phone left lying around stays protected. Off by default; turn it on in Settings.
    More…
    **Fixed** - ICS import now shows all your calendars, with scrolling when the list is long (#269) - Date picker now highlights today, separate from the day you select (#268) - Fixed a flicker when you tap two dates at once in month view (#267)
  • Jun 26, 2026 2026.06.26
    Versions are now named by date (year.month.day) instead of the old numbering. **New: Attendees and invitations for CalDAV calendars (beta)** Add people to your events, RSVP, and invite or uninvite guests on recurring events. KashCal doesn't email anyone directly. It hands the invitation to your calendar server, and the server sends it. So invitations only go out if your server supports scheduling. It works two ways, picked automatically: - **Server sends it** (iCloud, Fastmail, and similar): you save the event, the server invites everyone. - **KashCal sends it** (Zoho and similar): for servers that take the event but won't invite anyone, KashCal posts each invitation to the server's outbox.
    More…
    > ⚠️ **If your server doesn't support scheduling, no invitations are sent.** Attendees are saved on the event, so you'll need to send the invite yourself. **Fixed** - Some events couldn't be saved after editing, like a recurring event with a changed end date (#274) - Tapping an event link now opens the actual event, not just the app (#266) - Deleting one occurrence of a recurring event on iCloud **Plus** Sync and recurring-event fixes, a cleaner event form, attendee picker, and sharing, and you can now open device events and shared .ics files from other apps.
  • Jun 4, 2026 23.7.88
    **New: Take the KashCal Challenge** Your calendar can do things most can't. Show off the one you like best, tag it #KashCal, and dare a friend to match it. [See the challenge](https://kashcal.onekash.org/features/my-calendar-can-do-this-can-yours/) **New: Add events from Quick Settings** Drop a KashCal tile into your Quick Settings panel, next to your flashlight and Wi-Fi toggles. Pull down, tap, and you are typing a new event, even over another app. Fixes: - Defensive hardening to keep startup smooth and steady
    More…
    Plus other bug fixes and improvements.
  • Jun 1, 2026 23.7.78
    A new way to share events. Previously: a typed-out chat message, a screenshot the recipient has to retype, or a calendar invite that drags in email accounts you didn't want involved. Now: one tap, a designed card, and a tap-to-add file alongside it. The card lands in any messenger like a regular image. The file opens whichever calendar app your friend uses, ready to add the event with one tap. Two styles to pick from: Standard for the things on your week, Celebration for the things you actually want to talk about. Learn more: https://kashcal.onekash.org/features/share-event-as-card-android/
  • May 28, 2026 23.7.53
    Join the conversation on Signal: https://signal-kashcal.onekash.org Sync • Preserve local ctag across discovery refresh • Pull events from servers that store hrefs without .ics extension Recurrence picker • Modernized 3+3 chip layout with a Custom rule builder • Preserves INTERVAL, BY*-extras, WKST, and weekday/monthly patterns across edits
    More…
    • Handles ordinal-less monthly BYDAY and date-value UNTIL Share availability • Redesigned sheet with bubble preview and day-strip slider • Done button alongside Share • Honors RFC 5545 TRANSP and device AVAILABILITY • Renamed toggle to "All-day events as busy"
  • May 22, 2026 23.7.37
    - Time and date pickers now save the value visually centered when you tap Done mid-fling, instead of the value before the spin
  • May 21, 2026 23.7.36
    - New logo - App UI polish
  • May 20, 2026 23.7.31
    CalDAV RSVP Accept, Tentative, or Decline invitations directly from an event. Get notified when new invitations arrive. Decline events stay hidden and reminders are suppressed. Invitation inbox Pending invitations show a badge in the top bar. Tap to open a dedicated inbox sheet. Right navigation rail
    More…
    Replaces the old overflow menu with a side rail showing Invitations, Date jump-to picker, Insights, and Settings. Day view New single-day time grid with overlap handling. Polish Unified top bar, tighter month header, refined icon sizing. Insights now has a proper back stack. Device Calendars screen for managing visibility. Quick Add carries the selected date when no time is parsed. The home view snaps to today after the calendar day rolls over.
  • May 18, 2026 23.7.18
    Feature: Every event now shows attendee chips with name, RSVP status, organizer crown, and tap actions for email, copy, and send, plus an off-list pill that expands to the full list. Fixes: iCloud organizer chip rendering, Google ICS feed import gaps, multi-alias day-card count, and widget sizing.
  • May 11, 2026 23.7.5
    - Fix biweekly recurrences with Sunday in the day set producing wrong occurrences when start date is Sunday (#214) - Fix RFC 5545 ICS export: emit CRLF line endings and stop double-decoding TEXT escapes - Add RFC 5545 compliance audit covering producer + consumer paths - Fix widget day-header tints to meet WCAG-AA contrast and slim the upcoming header - Fix monthly view: refresh past-event dimming on app resume
  • May 9, 2026 23.7.4
    • Multi-day events that end at midnight now show on the correct last day • Event descriptions render HTML formatting (links, line breaks) • Deleting an event from a device calendar now clears its reminders
  • May 5, 2026 23.7.2
    • Color, name, and read-only changes made on your CalDAV or iCloud server now reach KashCal on the next sync, instead of staying stale until a manual rediscovery. Works with iCloud, Nextcloud, Baikal, Radicale, Zoho, Fastmail, SoGo, Stalwart, and other RFC 7986 servers. • "Discover new calendars" now picks up server-side color changes for calendars that already exist locally. • Device calendar events can be exported as .ics files through the share sheet. • Updated to Android Gradle Plugin 9, Kotlin 2.3, and newer Hilt, Compose, and Room versions.
  • May 3, 2026 23.6.29
    • Per-event colors render more faithfully and stand apart from calendar colors • Top bar: lighter app-name weight to match Material 3 default
  • May 3, 2026 23.6.25
    • Week view: swipes now feel instant — less tap latency, smoother page changes • Consistent spacing between the top bar and the day-of-week headers across calendar views
  • May 1, 2026 23.6.22
    - Birthday/anniversary reminder changes now take effect immediately - Bug fixes and performance improvements
  • Apr 28, 2026 23.6.18
    New Upcoming Events widget, bug fixes and performance improvements
  • Apr 27, 2026 23.6.13
    - Week and 3-day views now open at 6 AM on cold launch instead of midnight; "+" FAB follows the same default. (#188) - Widgets showing "today" now roll over at midnight reliably, even when the device is in Doze / low-power idle.
  • Apr 24, 2026 23.6.7
    bug fixes and performance improvements
  • Apr 23, 2026 23.6.4
    - New event color picker with grid and color-wheel browser for all 92 CSS3 colors - Autocomplete event titles from your past events (#125) - Week view no longer hides events as "+N more" when a slot is available (#175) - Autocomplete no longer suggests old imported events or duplicate entries from the same event on multiple accounts - Recurrence picker padding fix
  • Apr 20, 2026 23.5.3
    - Insights analytics now includes events from all calendar sources - Improved period selector design
  • Apr 19, 2026 23.5.0
    Quick Add: just type "Coffee with Kash tomorrow at 3pm" and KashCal gets it. Handles dates, times, recurrence, and locations. Now available in 67 languages.
  • Apr 17, 2026 23.4.28
    ### What's new - Drag-to-reschedule events in week and 3-day views - Pinch-to-zoom hour rows with haptic feedback - Tap empty space to create event at that time - Tappable event locations open in maps - Text selection in event quick view sheets
  • Apr 16, 2026 23.4.23
    - Navigation drawer with view switching and calendar visibility - Adaptive landscape layout for month view - Haptic feedback and rich snackbar on event save - Quick Add dialog UI polish - Fix landscape flicker on orientation change - Fix event dots missing in landscape calendar grid - Tablet-aware compact mode - Enable text selection in event quick view sheets - Device calendar visibility toggle updates views instantly
  • Apr 15, 2026 23.4.19
    - Animated sync banner with state-aware icons - Consistent Beta badge across settings and Quick Add - Preserve event duration when start date/time changes - ICS import supports device calendars - Fix past occurrence extension for far-past recurring events
  • Apr 14, 2026 23.4.18
    Quick Event Add (beta), visual polish, performance improvements, bug fixes.
  • Apr 12, 2026 23.4.12
    - Month widget: abbreviated headers, adjacent-month dates, Material You theming (#100) - Show series start date in recurring event quick view (#124) - Pull-to-refresh snackbar and stuck spinner for device-calendar-only users (#143)
  • Apr 6, 2026 23.4.0
    ## Custom Reminders (#47) Replace the fixed 2-slot dropdown reminder picker with a dynamic list of up to 5 reminders, each configurable via an inline three-wheel duration picker (days/hours/minutes) with quick preset chips. ### What's new - **Up to 5 reminders** per event (was 2) - **Inline wheel picker** for custom durations — days, hours, and minutes - **Quick preset chips** — 15m, 30m, 1h, 1d (timed) / 9AM, 1d, 2d, 1w (all-day) - Reminders deduplicated and sorted on save - Device calendar events with >5 reminders show truncation warning
    More…
    - All-day toggle preserves custom reminder values ### Other improvements - Performance improvements and bug fixes
  • Mar 30, 2026 23.3.6
    - Use PROPFIND Depth:1 for etag listing on servers without sync-token - Replace two-tap discard flow with explicit Cancel/Done buttons - Block gestural dismiss on EventFormSheet and DateTimeSheet
  • Mar 27, 2026 23.3.5
    ## What's new - **Monthly view widget** — full month calendar grid with event indicator dots, day navigation, and month forward/backward arrows - **Settings** — tap version footer to see app info - **Intent filters** — moved APP_CALENDAR to ACTION_MAIN for better Android integration - **Widget touch targets** — increased to 48dp for reliable tapping - **Arrow navigation fix** — reactive Glance state for responsive month switching
  • Mar 23, 2026 23.3.2
    ### Bug Fixes - **Search "all" date filter not showing old entries (#123)** — Search now respects syncPastDays setting instead of hardcoded 1-year lookback. "Any time" filter auto-enables "Include past" toggle. - **All-day recurring events use date-only UNTIL format** — Fixes RFC 5545 compliance for all-day RRULE serialization. ### Enhancements - **Widget event limit is now configurable** — Each widget can display 3–10 events (default: 5).
  • Mar 11, 2026 23.3.0
    • Year view with 12 mini-month grid and event dots • Full-height month view with event snippets • 7-day week view with full 24-hour grid
  • Mar 8, 2026 23.2.1
    ## Features - **Device calendars**: see your phone's built-in calendar events alongside KashCal events - **Device calendar reminders** with quick view and edit support - **Widget "+" button** to create events directly from home screen - **Week widget** compact layout with full day names and date range header ## Bug Fixes - Fix events disappearing after creation on basic CalDAV servers (e.g., Purelymail) - Fix CalDAV sync on Android 10-11 - Fix device calendar recurring event exception handling
    More…
    - Fix widget tap on all-day device events in negative UTC offsets ## Docs - Add Obtainium install badge (#104) - Add Purelymail to tested CalDAV providers (#102)
  • Mar 5, 2026 23.1.16
    ## Fixes - Show all-day events first in widgets (#85) - Respect time format preference for reminder labels (#96) - Timezone picker: globe aligned with time picker center (#88) - Improve time picker layout for small screens (#88) - Multi-day timed event share text now includes end date (#89) - extendPastOccurrences respects sync lookback setting ## Features - Apply default reminders to new events synced without VALARM
  • Mar 3, 2026 23.1.9
    New Features: • Contact anniversaries: automatically sync anniversaries from your contacts with customizable reminders • Configurable sync lookback: choose how far back to sync events (90 days, 6 months, 1 year, 2 years, or all) • Week numbers: optional week numbers in the month calendar grid
  • Feb 20, 2026 23.1.2
    - Fix XML entity decoding in calendar display names - Add configurable week numbers to month calendar grid - Week numbers respect "Start Week On" preference
  • Feb 20, 2026 23.1.1
    RFC compliance and other fixes
  • Feb 17, 2026 23.0.0
    ## What's New - **Device Calendar Integration**: See your phone's calendar in KashCal alongside iCloud, CalDAV, and ICS - **Zoho CalDAV**: Zoho calendar verified working - **Multi-Home-Set**: Support for CalDAV servers with multiple calendar-home-set URLs Plus many bug fixes and performance improvements.
  • Feb 15, 2026 22.5.15
    ## Fix: False parse-failure counting for VTODO/VJOURNAL CalDAV `sync-collection` returns hrefs for all resource types (VEVENT, VTODO, VJOURNAL), but KashCal only syncs VEVENTs. Non-event resources were falsely counted as parse errors, causing: - Sync token held for 3 retry cycles (wasted bandwidth) - Session status showed PARTIAL instead of SUCCESS - "⚠ N failed to parse" warnings in Sync History - Resources permanently "abandoned" after max retries **Fix:** Detect VTODO/VJOURNAL/VFREEBUSY resources before counting parse errors. Non-event resources are now silently skipped.
    More…
    **Affected servers:** Nextcloud, SOGo (any server with mixed VEVENT+VTODO calendars). iCloud unaffected (separates Reminders into filtered VTODO-only calendar).
  • Feb 14, 2026 22.5.14
    ## Changes ### Features - Support multiple calendar-home-set URLs per RFC 4791 (#70) - Handle CalendarContract VIEW/EDIT intents for launcher compatibility ### Fixes - Stop applying default reminders to CalDAV-synced events (#74) - Default "Start Week On" to system locale instead of Sunday
    More…
    ### Tests - Add coverage for birthday sync, RRULE edge cases, ICS export, and location suggestions - Add coverage for first day of week system default (#71) - Add edge case coverage for CalendarContract intent parsing
  • Feb 14, 2026 22.5.13
    Batched concurrent multiget for large calendar sync Zoho CalDAV compatibility fixes Fix trimIndent() XML corruption in fetchEventsByHref (iCloud 400, Nextcloud 500) Fix CalDAV sync trigger for non-iCloud accounts Tests: 133+ new unit tests, Docker server integration tests, diagnostic tests