KashCal
kashcal.onekash.orgAndroidOffline-first Android calendar that syncs with iCloud, CalDAV and device calendars. No account, no telemetry; credentials are stored in the Android Keystore. Events are not end-to-end encrypted, so sync security depends on your provider.
- Homepage:kashcal.onekash.org
- GitHub:github.com/KashCal/KashCal
- Android App:play.google.com/.../org.onekash.kashcal
- Web info:web-check.xyz/check/kashcal.onekash.org
KashCal Source Code
Author
Description
All your calendars in one Android app. Sync iCloud, Nextcloud, Fastmail, and more CalDAV servers, plus your device's Google and Outlook calendars. Private by default: no ads, no trackers, no account.
Homepage
https://kashcal.onekash.orgRepository
- LicenseOther
- Created12 Jan 26
- Primary languageKotlin
- Size221,366 KB
- Stars377
- Forks23
- Watchers377
Top Contributors
@one-kash (179)
@langfeld (2)
@az0ran (1)
@mariano-dagostino (1)
@Onxr (1)
@remi-espie (1)
Recent Commits
one-kash(19 Aug 26)
Release v2026.08.19
one-kash(17 Aug 26)
Release v2026.08.17
langfeld(16 Aug 26)
Month widget: show event titles instead of dots (#336) Adds a month-widget mode that renders event titles and connected multi-day bars (adapting row count to widget height via LocalSize) as an opt-in Appearance setting, plus a 10s bound on widget data fetches so a stalled query can't freeze nav actions. Author: langfeld
one-kash(14 Aug 26)
Release v2026.08.14
one-kash(09 Aug 26)
Release v2026.08.09 - 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 - Fixed contact sync skipping past a contact it could not read and never coming back to it
one-kash(08 Aug 26)
Release v2026.08.08
one-kash(08 Aug 26)
Enlarge week-view day-header letter and date number The 7-day week header rendered the day letter at 11sp and the date number at 12sp, noticeably smaller than the 3-day header's 14sp. Match both to bodyMedium so the two views read consistently. The cell is already pinned to a 48dp min height and the narrow columns hold only a single letter plus a 1-2 digit number, so the larger text neither wraps nor grows the header row.
one-kash(08 Aug 26)
Fix drill-in back-restore navigating to a stale week The day-header drill-in snapshotted uiState.selectedDate to restore on back press, but the week/3-day grid tracks its position in weekViewPagerPosition, not selectedDate. Only month-view taps write selectedDate, so after swiping the week pager a back press restored a stale date (jumping to an unrelated week) or, at cold start where selectedDate is still 0L, skipped the date restore and landed on today's week instead of the week the user drilled from. Derive the snapshot date from weekViewPagerPosition instead, mode-aware (WEEK uses week pages, 3-day uses day pages), so back returns to the exact week or 3-day span the user was viewing.
one-kash(08 Aug 26)
Shorten all-day overflow badge to +N with a larger tap target The all-day strip in Week and 3-Day view showed a '+N more' overflow badge, but the narrow day columns leave little room for the word. Show just '+N' instead, and wrap it in a min-sized clickable box so the tap target to open the overflow sheet stays comfortable even though the glyph is small. The count is still localized by the number formatter; only the template '+%1$d' has no words, so it needs no translation. The shared status_more_events string (month grid, week widget, timed overflow) is unchanged and still reads '+N more'. Co-authored-by: Wqrld <[email protected]>
one-kash(08 Aug 26)
Drill into Day view by tapping a day-column header Tapping a per-day header in Week or 3-Day view now opens that day in Day view. The switch is transient (persist=false on setViewMode) so drilling in never overwrites the configured startup default view. A back press after drilling in restores the Week/3-Day view and date the user came from, reusing the same snapshot mechanism as Jump to date (a single-shot BackHandler). Without it, back would have exited the app since Day view installs no back handler of its own. The header tap target is padded to the 48dp WCAG/Material minimum and exposes a Button role for screen readers, matching the all-day toggle in the same view. Co-authored-by: Wqrld <[email protected]>
one-kash(08 Aug 26)
Overlay the all-day strip so the timed grid keeps constant height The all-day strip used to be a sibling row above the timed grid, so a week with more all-day events grew the strip and pushed the grid down. Swiping between weeks with different all-day counts made the grid lurch vertically. Wrap the grid in a Box and overlay the strip (aligned to the top, with a shadow) instead: the grid keeps a constant height and scrolls beneath the opaque strip, matching the behavior of other calendar apps. Because the strip now floats over the grid's full-column tap targets, a tap on the strip's own empty areas would otherwise fall through and open event creation at the top-scrolled hour. A no-op tap consumer on the strip makes it touch-opaque so those taps are swallowed. Co-authored-by: Wqrld <[email protected]>
one-kash(08 Aug 26)
Use icons for Quick View action buttons Replace text labels on Edit, Delete, Duplicate, and Share with their Material icons (pencil, trash, copy, share). Reuses the existing action strings as content descriptions, so screen readers still announce the same words in every language and no new strings are introduced. Icons never wrap, unlike the text labels in longer locales. Co-authored-by: Wqrld <[email protected]>
one-kash(07 Aug 26)
Release v2026.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.
one-kash(03 Aug 26)
Release v2026.08.03 Widgets can now carry their own light/dark theme and accent color, independent of the app's appearance (contribution from langfeld, #315). Also in this release: - Fixed a SOGo account syncing without error but showing almost none of your events; the calendar query now sends an open-ended future cutoff so servers with 32-bit time limits stop silently dropping events (#326) - Fixed monthly and yearly repeat rules with an ordinal BYDAY - Fixed a single edited occurrence of a recurring event drifting by a timezone offset - Added the local-network permission needed for LAN CalDAV on Android 17 - Localized the new strings across all supported languages
one-kash(03 Aug 26)
i18n: translate widget appearance strings into all locales Fills in the 5 widget-appearance strings (settings_widgets_section, settings_widget_theme, settings_widget_accent_color, settings_widget_color_follow_app, settings_widget_color_follow_app_desc) for the 66 locales that had only the English source. German was already translated. Locales normalized to base document order.
Kash(03 Aug 26)
Merge pull request #315 from langfeld/feature/widget-appearance Widget appearance: independent accent color and light/dark mode for w…
langfeld(30 Jul 26)
Widget appearance: independent accent color and light/dark mode for widgets
one-kash(03 Aug 26)
test: deflake ShareAvailabilityViewModel onDaysChange snapshot check The verify used a count-based coVerify(atLeast = 2) with a 2-arg matcher against getOccurrencesForRange, whose real signature takes 3 args (the zone is defaulted). The bare call count coupled the assertion to the init recompute ordering, so it passed in isolation but flaked under the full suite's class-load ordering. Verify the specific new 5-day range with the full 3-arg signature instead: the post-change recompute is the only call that can query today..today+5, so this is both deterministic and a stronger assertion than a call count.
one-kash(02 Aug 26)
Release v2026.08.02 - Fixed deleting a server-hosted event (Fastmail, iCloud) failing and freezing the event's link when the server had changed it since the last sync; the delete now refetches and retries once (addresses the delete half of #311) - Changed the automatic title emoji to never decorate sensitive titles (funeral, memorial, hospice, surgery, biopsy, chemo, divorce, custody, hearing, layoff) - Fixed the automatic emoji matching whole words only, so a word inside an unrelated title no longer picks up a stray emoji - Fixed an already-emoji title getting a second emoji stacked in front, and text-style symbols being mistaken for emoji - Fixed the all-day label overflowing its column in the day, 3-day, and week views - Fixed a drag or tap in the week view acting on the wrong event after a reschedule
one-kash(31 Jul 26)
Release v2026.07.31 Tags became yours to manage and take with you: a manager reached from your account with per-tag color, rename, and delete; rename propagates across your KashCal and CalDAV events and syncs the new name to your other devices; and device-calendar events can carry tags now too. Also: a configurable all-day row count in the day, 3-day, and week views (#204); Quick Add opens from the new-event button in those views when Smart event add is on (#320); the monochrome themed launcher icon carries the calendar glyph (#317); and the account hub drops its redundant Insights row.
one-kash(29 Jul 26)
Release v2026.07.29
one-kash(27 Jul 26)
Release v2026.07.26 Two fixes: importing an .ics file no longer creates duplicate events when the Import button is tapped more than once during a slow import (#309), and the widget header no longer renders as a bright pastel bar on dark themes.
one-kash(25 Jul 26)
Release v2026.07.25 Every KashCal widget has to sell itself from behind glass, and until now all five auditioned in the same blank placeholder. Now each widget previews as itself in the system widget picker (Android 15+), drawn from the same code the live widget runs, with localized sample content. The month widget gained single-letter day names, an optional week-number column, and a solid filled accent circle marking today that grows with font scale. It now applies first-day-of-week and week-number changes without a restart. Widget headers match heights with a readable "+" and larger touch targets, and the widget body lets the accent color tint through. The view menu now runs from a single day up through the full year (thanks to a pull request from @az0ran), and Settings and the profile hub animate between each other.
Kash(24 Jul 26)
Merge pull request #307 from az0ran/main Update view options order
Az0R(24 Jul 26)
Update view options order Rearranged view options to more intuitive order (from one day to full year)
one-kash(23 Jul 26)
Release v2026.07.22
one-kash(19 Jul 26)
Release v2026.07.19 Quick Add understands far more natural language, monthly repeats gain an ordinal-weekday picker (1st-4th and Last), the agenda shows relative day headers with a foldable week bar, and the top-bar menu became a full-screen avatar hub for accounts, settings, and personalization.
one-kash(17 Jul 26)
Release v2026.07.18 New deck-of-cards app icon, top-bar logo, and supporter icon. Empty days show gentler, rotating copy. Targets Android 17 (API 37) with an inline local-network permission ask for CalDAV servers on your home network. Tidied translations across all 67 languages.
one-kash(17 Jul 26)
Release v2026.07.17
one-kash(16 Jul 26)
Release v2026.07.15 Event tags: add colored #tags to events across the day, week, and agenda views, from the event form or Quick Add. Event-form layout tidy-up. Fixes for self-hosted LAN/VPN sync hangs, expired-sync notification spam, zero-duration and short events vanishing in the time-grid views, emoji in synced descriptions, and duration-overflow edge cases.
KashCal Website
Website
A private calendar for Android with iCloud and CalDAV sync | KashCal
Free, open-source calendar for Android. Sync iCloud, CalDAV, holidays, and birthdays. Smart event add, Insights, widgets. Private by default, no account required.
Redirects
Does not redirect
Security Checks
All 65 security checks passed
Server Details
- IP Address185.199.109.153
- Hostnamecdn-185-199-109-153.github.com
- LocationFrancisco,Indiana,United States of America,NA
- ISPGitHub Inc.
- ASNAS54113
Associated Countries
US
Safety Score
Website marked as safe
100%
Blacklist Check
kashcal.onekash.org was found on 0 blacklists
- AntiSocial Blacklist
- Artists Against 419
- Badbitcoin
- Bambenek Consulting
- CERT Polska
- CoinBlockerLists
- CRDF
- CryptoScamDB
- EtherAddressLookup
- EtherScamDB
- Fake Website Buster
- MetaMask EthPhishing
- NABP Not Recommended Sites
- OpenPhish
- PetScams
- PhishFeed
- PhishFort
- Phishing.Database
- PhishStats
- PhishTank
- Phishunt
- RPiList Not Serious
- Scam.Directory
- SecureReload Phishing List
- Spam404
- StopGunScams
- Suspicious Hosting IP
- ThreatFox
- ThreatLog
- TweetFeed
- URLhaus
- ViriBack C2 Tracker
Website Preview
KashCal Android App
APK Info
- AppKashCal
- Creation Date23 Apr 26
- Last Updated23 Apr 26
- Current Version23.5.3
- Privacy ReportView on Exodus →
De-Googled Compatibility
Trackers
No trackers found
Permissions
- Access Network State
- Foreground Service
- Foreground Service Data Sync
- Internet
- Post Notifications
- Read Calendar
- Read Contacts
- Read Sync Settings
- Receive Boot Completed
- Use Exact Alarm
- Vibrate
- Wake Lock
- Write Calendar
- Write Sync Settings
- Dynamic Receiver Not Exported Permission
KashCal Reviews
More Calendar
Fossify Calendar from the family of forked FOSS apps from the discontinued SimpleMobileTools. Simple, customizable, includes widgets. Note that CalDAV support is currently limited (see #921
Calendar app for the self-hosted Nextcloud platform. Uses CalDAV for sync across devices. No E2E encryption support.
The calendar app from the Proton suite. End-to-end encrypted. Supports ICS (not encrypted), colours, recurring events, mail integration, notifications and multiple time zones.
About the Data: KashCal
Change History
- Added #754
Edit KashCal Data
You can edit KashCal's entry in this section of awesome-privacy.yml by submitting a PR to our GitHub repo.
Note that some of the information shown above has been aggregated from external
sources, a list of these can be found data documentation.
Origin Data
Modify Data
API
You can access KashCal's data programmatically via our API. Simply make a GET request to:
https://api.awesome-privacy.xyz/v1/services/kashcalThe REST API is free, no-auth and CORS-enabled. To learn more, view the API Docs or read the API Usage Guide.
Share KashCal
Help your friends compare Calendar, and pick privacy-respecting software and services.
Share KashCal and Awesome Privacy with your network!
