-
-
Notifications
You must be signed in to change notification settings - Fork 15
FAQ
I created KashCal for personal use with iCloud calendar when moving from iPhone to Android. At some point we thought there might be other folks with a similar need and decided to open source it along with a few distribution channels. Since then we have expanded to several CalDAV servers and Device Calendar as well.
Yes. KashCal is a fully featured personal calendar available for free via several distribution channels including F-Droid. The code is open source under Apache License 2.0.
If you find KashCal beneficial, you can donate here.
There are several ways: helping with documentation, reviewing language translations, or filing PRs for issues and feature requests. See the Code of Conduct and Contribution guidelines.
Please open an issue here with detailed notes.
Yes. Also see our note on feature requests.
Use GitHub Discussions for things that are not bug reports or feature requests.
Please use GitHub Security Advisories to report vulnerabilities privately. Review our security policy.
You can always implement new features and open a pull request. Start a discussion first before building something major. You are also welcome to fork the repository and customize KashCal for yourself.
Open an issue and we'll add it to the README.
KashCal on GitHub is the official repository. You can download from:
Android 12 (API 31) or later. KashCal targets API 36 and supports adaptive layouts on tablets and foldables.
Not yet. See this note if you'd like to help.
F-Droid signs builds with its own key. GitHub Releases use the upstream key (cert SHA-256 published in the README). The two signatures are not interchangeable, so you cannot install one over the other. To switch sources, uninstall first. Uninstalling removes local-only data, so export your settings and any local events as ICS before switching.
Use AppVerifier or Obtainium with the cert SHA-256 published in the README.
Private by default. Read more here, and see the note about device calendars below.
Events, settings, and ICS subscriptions live in a local Room database on your device. CalDAV and iCloud credentials are encrypted in the Android Keystore (AES-256-GCM). Uninstalling KashCal clears all local data. Events that exist on a CalDAV server or iCloud remain on the server.
- Internet and network state: sync with CalDAV servers and refresh ICS subscriptions
- Read/write calendar: Device Calendar integration (optional)
- Read contacts: birthdays and anniversaries (optional)
- Post notifications, use exact alarm: event reminders
- Foreground service (data sync): background CalDAV sync
- Receive boot completed: reschedule reminders after a reboot
Only for refreshing ICS subscriptions and syncing with CalDAV servers. Local events work fully offline. You can monitor traffic on your device with Rethink.
Any provider that supports CalDAV should work. See the verified list in the README.
No. KashCal is a single app for both UI and CalDAV sync configuration.
Yes. Generate one at appleid.apple.com under Sign-In and Security > App-Specific Passwords. Your main Apple ID password will not work.
Not directly via CalDAV (Google removed third-party CalDAV access). Use the Device Calendar bridge instead: Google Calendar syncs to Android, and KashCal reads and writes those events through the Android Calendar Provider.
Not directly. Outlook.com and Microsoft 365 do not expose CalDAV; they use Exchange ActiveSync or Microsoft Graph. Use the Device Calendar bridge: install the Microsoft Outlook Android app (or add the account via Android system Settings > Accounts), and KashCal will read and write those events through the Android Calendar Provider.
When adding the account, enable Trust insecure connection in the CalDAV sign-in sheet. This accepts self-signed certificates and lets KashCal connect to local HTTP servers (for example Baïkal or Radicale on your LAN). The toggle is per account; iCloud cannot use it. Only enable it for servers you control.
Configurable via Settings > Sync. Background syncs run via WorkManager, and pull-to-refresh triggers an immediate sync. KashCal polls; there is no server push.
Aggressive battery optimizers on Samsung, Xiaomi, Oppo, OnePlus, and others can kill background work. Disable battery optimization for KashCal in Android Settings > Apps > KashCal > Battery. See dontkillmyapp.com for vendor-specific guidance.
Not at the moment. See related issues #67 and #99. You can export KashCal settings (which includes ICS subscriptions) and restore on another device. You can also export local events as ICS to import into KashCal or any other calendar app.
No. KashCal is events-only (VEVENT). Calendars that contain only VTODO or VJOURNAL resources are skipped during sync.
Device calendars are Android's built-in calendars that any app with calendar permission can read or write. Google, Samsung, and Outlook all sync to the Android calendar provider. To see and edit those events in KashCal, enable the Device Calendars feature in Settings. It requires calendar read/write permission, and any other app with calendar access can also read those events. CalDAV calendars added inside KashCal stay private to KashCal.
Yes. Enable Contact Birthdays or Contact Anniversaries in Settings. Requires Contacts permission.
Not at this time. More info here.
Six views: month, agenda, 3-day, week, month-full, and year. Switch via the top-left hamburger menu.
In the app, tap KashCal in the top bar (main event view), or scroll to the bottom of Settings and tap the version. Direct link.
Just type what you want. No specific format is required. Examples:
- Lunch with Sam tomorrow at 1pm
- Dentist next Tuesday 3:30-4:30
- Team standup every Monday at 9am
- Flight to NYC Dec 15 6am at JFK
- Coffee in 2 hours for 30 min
- Gym every weekday 7am
What it understands:
- Dates: tomorrow, next Friday, Dec 15, 12/15, in 3 days
- Times: 3pm, 15:00, 9:30am, noon, midnight
- Ranges: 3-5pm, 9am to 11am
- Durations: for 30 min, for 2 hours
- Recurrence: every Monday, every weekday, daily, weekly
- Location: at the office, in NYC
- Timezones when specified
Anything the parser doesn't claim as a date, time, or location becomes the event title. So Lunch with Sam tomorrow 1pm saves an event titled "Lunch with Sam" for tomorrow at 1:00 PM.
The parser shows a confidence value: HIGH (date and time found), MEDIUM (one of them found), or LOW (neither). An auto-matched emoji may also be added to the title.
Yes. Tap the search icon in the top bar. KashCal uses FTS4 full-text search and supports date-range filters (upcoming, custom range, and presets).
Yes. KashCal ships agenda, date, week, and month widgets, built with Jetpack Glance.
Long-press the KashCal icon for New Event, Today, and Search.
Yes. The event form's color picker offers a 15-color curated palette plus the full CSS3 92-color grid with a color wheel browser. Per-event color follows RFC 7986. Servers without COLOR support keep your locally chosen color on pull.
Yes. Settings > Time Format and Settings > Start Week On.
Yes, on Android 12 and later (which is the minimum supported version).
KashCal asks how to apply the change:
- Just this one or Just this occurrence: modifies a single instance
- This and all future: modifies the current and future occurrences
- All occurrences or All events: modifies the entire series
Drag-to-reschedule offers This event versus All events.
KashCal does not ship a built-in holiday calendar because the variations are too many. Search online for an ICS feed. For example, this gist of Google holiday calendars or moon phases.
Yes. Use Settings > Backup & Restore to export preferences and ICS subscriptions to a JSON file. For local events themselves, export to ICS and import on the new device.
KashCal ships 67 languages. Open an issue, or send a PR against app/src/main/res/values-XX/strings.xml.
KashCal doesn't have built-in logging yet. See related issue #183. In the meantime, you can capture logs with Logcat Reader from F-Droid:
- Open Logcat Reader, then Filter, then set "Tag contains" to
CalProviderRepo OR DisplayEventRepo OR CalProviderManager - Start recording
- Open KashCal and reproduce the issue
- Stop recording, then Save or Share, and attach the file to your issue
Logcat Reader needs a one-time adb shell pm grant com.dp.logcatapp android.permission.READ_LOGS to see KashCal's logs. The app walks you through it.