|
| 1 | +# KashCal |
| 2 | + |
| 3 | +**Your calendar. Your device. Your rules.** |
| 4 | + |
| 5 | +[](https://github.com/KashCal/KashCal/actions/workflows/build.yml) |
| 6 | +[](https://github.com/KashCal/KashCal/blob/main/LICENSE) |
| 7 | +[](https://developer.android.com/about/versions/oreo) |
| 8 | + |
| 9 | +A privacy-first calendar that works offline and looks beautiful. Connect to iCloud — or don't. Your schedule, your choice. |
| 10 | + |
| 11 | +--- |
| 12 | + |
| 13 | +<table align="center"> |
| 14 | + <tr> |
| 15 | + <td align="center"><img src="https://raw.githubusercontent.com/KashCal/KashCal/main/fastlane/metadata/android/en-US/images/phoneScreenshots/HomePage-with-AboutMe.png" width="180"><br><sub>Home & Agenda</sub></td> |
| 16 | + <td align="center"><img src="https://raw.githubusercontent.com/KashCal/KashCal/main/fastlane/metadata/android/en-US/images/phoneScreenshots/NewEvent.png" width="180"><br><sub>Create Event</sub></td> |
| 17 | + <td align="center"><img src="https://raw.githubusercontent.com/KashCal/KashCal/main/fastlane/metadata/android/en-US/images/phoneScreenshots/NewEvent-Date-Time-Picker.png" width="180"><br><sub>Date & Time Picker</sub></td> |
| 18 | + <td align="center"><img src="https://raw.githubusercontent.com/KashCal/KashCal/main/fastlane/metadata/android/en-US/images/phoneScreenshots/Settings.png" width="180"><br><sub>Settings</sub></td> |
| 19 | + </tr> |
| 20 | + <tr> |
| 21 | + <td align="center"><img src="https://raw.githubusercontent.com/KashCal/KashCal/main/fastlane/metadata/android/en-US/images/phoneScreenshots/Apple-Calendar-Connect.png" width="180"><br><sub>iCloud Connect</sub></td> |
| 22 | + <td align="center"><img src="https://raw.githubusercontent.com/KashCal/KashCal/main/fastlane/metadata/android/en-US/images/phoneScreenshots/Sync-with-iCloud.png" width="180"><br><sub>iCloud Sync</sub></td> |
| 23 | + <td align="center"><img src="https://raw.githubusercontent.com/KashCal/KashCal/main/fastlane/metadata/android/en-US/images/phoneScreenshots/ICS-Subscription.png" width="180"><br><sub>ICS Subscriptions</sub></td> |
| 24 | + <td></td> |
| 25 | + </tr> |
| 26 | +</table> |
| 27 | + |
| 28 | +--- |
| 29 | + |
| 30 | +## Why KashCal? |
| 31 | + |
| 32 | +| | KashCal | Others | |
| 33 | +|---|---------|--------| |
| 34 | +| Analytics | None | Often | |
| 35 | +| Account Required | No | Usually | |
| 36 | +| Works Offline | Full | Limited | |
| 37 | +| Open Source | Yes | Rarely | |
| 38 | +| iCloud on Android | Yes | Rare | |
| 39 | + |
| 40 | +## Features |
| 41 | + |
| 42 | +- **Privacy-First** — Zero analytics, zero tracking. Your schedule stays private. |
| 43 | +- **Offline-First** — Works without internet. Sync when you want, not when the app wants. |
| 44 | +- **iCloud Sync** — Native CalDAV support for Apple Calendar on Android. |
| 45 | +- **Material You** — Beautiful, modern design with dynamic theming. |
| 46 | +- **Home Widget** — Today's agenda at a glance. |
| 47 | +- **Recurring Events** — Full RFC 5545 RRULE support with exceptions. |
| 48 | +- **Progressive Sync** — Events appear in 2-5 seconds, not 30. |
| 49 | +- **Search** — Full-text search across all your events. |
| 50 | +- **Timezone Support** — Per-event timezone with smart display. |
| 51 | + |
| 52 | +## How It Works |
| 53 | + |
| 54 | +``` |
| 55 | +User Action → Local DB (instant) → Background Sync (only if using iCloud) |
| 56 | +``` |
| 57 | + |
| 58 | +All operations save locally first. Sync happens in the background — your calendar works even without internet or any external calendar service. |
| 59 | + |
| 60 | +## Security & Privacy |
| 61 | + |
| 62 | +### Your Data Stays Yours |
| 63 | +- **No Analytics** — Zero tracking, telemetry, or data collection |
| 64 | +- **No Accounts** — No KashCal account required |
| 65 | +- **Local-First** — Calendar data stored on your device |
| 66 | +- **Open Source** — Fully auditable codebase |
| 67 | + |
| 68 | +### Secure by Design |
| 69 | +- **Encrypted Credentials** — AES-256-GCM via Android Keystore |
| 70 | +- **HTTPS Only** — Cleartext traffic blocked |
| 71 | +- **No WebViews** — Native UI only, no embedded browsers |
| 72 | +- **Minimal Permissions** — Only what's necessary |
| 73 | + |
| 74 | +## Download |
| 75 | + |
| 76 | +**[GitHub Releases](https://github.com/KashCal/KashCal/releases)** — Download the latest APK |
| 77 | + |
| 78 | +**F-Droid** — Coming soon |
| 79 | + |
| 80 | +**IzzyOnDroid** — Coming soon |
| 81 | + |
| 82 | +## iCloud Setup |
| 83 | + |
| 84 | +1. Go to [appleid.apple.com](https://appleid.apple.com) |
| 85 | +2. Sign in → **Sign-In and Security** → **App-Specific Passwords** |
| 86 | +3. Generate a password named "KashCal" |
| 87 | +4. In KashCal: **Settings** → **iCloud Account** → Enter email and app-specific password |
| 88 | + |
| 89 | +## Tech Stack |
| 90 | + |
| 91 | +- **UI**: Jetpack Compose + Material 3 |
| 92 | +- **Widget**: Jetpack Glance |
| 93 | +- **DI**: Hilt |
| 94 | +- **Database**: Room |
| 95 | +- **Async**: Kotlin Coroutines + Flow |
| 96 | +- **Background**: WorkManager |
| 97 | +- **Network**: OkHttp |
| 98 | +- **iCal**: ical4j + lib-recur |
| 99 | + |
| 100 | +## Contributing |
| 101 | + |
| 102 | +See [CONTRIBUTING.md](https://github.com/KashCal/KashCal/blob/main/CONTRIBUTING.md) for guidelines. |
| 103 | + |
| 104 | +## License |
| 105 | + |
| 106 | +Apache License 2.0 — see [LICENSE](https://github.com/KashCal/KashCal/blob/main/LICENSE) |
| 107 | + |
| 108 | +--- |
| 109 | + |
| 110 | +<p align="center"> |
| 111 | + <b>KashCal</b><br> |
| 112 | + Your calendar. Your privacy. Your control. |
| 113 | +</p> |
0 commit comments