# KashCal — Full Documentation > One App. All Your Calendars. Source: https://kashcal.onekash.org --- # What is KashCal? Source: https://kashcal.onekash.org/docs # What is KashCal? Your days are scattered across a handful of calendars. Family plans on iCloud, work on a CalDAV server, holidays from a link you subscribed to once, birthdays in your contacts. KashCal puts them on one screen and stays out of your way. It's a free, open-source calendar for Android: fast to open, easy on the eyes, and serious about the small stuff. And it's private by default. There's no account to create, no analytics, no tracking and no KashCal server. KashCal syncs your events only with the calendar accounts *you* connect. See [Privacy & Security](../privacy/overview.md) for everything that leaves your phone. ## What you can do with it - See your schedule seven ways: Agenda, Day, 3 Days, Week, Month, Month (Full) and Year. - Sync with the services you already use: iCloud, Nextcloud, Fastmail, Radicale, Baikal, Zoho, mailbox.org, Stalwart, SOGo, and any standard CalDAV server. - [Show your phone's other calendars](../sync/device-calendars.md), like Google or Outlook, once you turn on Device calendars. - Add events by typing. With Smart event add on, "Coffee with Kash tomorrow 3pm" becomes an event. - Get reminded. Reminders survive a phone restart, and you can snooze or dismiss them. - Subscribe to calendar feeds: holidays, sports schedules and school terms from ICS links. - Show birthdays and anniversaries from contacts as yearly all-day events. - [Sync contacts with your account both ways](../sync/contacts.md), including photos, from iCloud and other CardDAV servers (beta). - [Label events with tags](../events/tags.md) and manage their colors and names in one place. - Put your day on the home screen: agenda, week, month, date and upcoming widgets. - Search titles, locations and notes with full-text search. - See where your time goes with Insights, worked out on your phone. - Use it in your language: 67 languages, following your device setting. ## Who it's for Anyone whose calendars live in more than one place, and anyone who'd rather their calendar app didn't have an account, an ad, or an opinion about their data. ## Requirements KashCal runs on Android 12 and newer. ## Next steps - [Install KashCal](./install.md) - [Add your first calendar account](../sync/index.md) - [Explore the features](../features/index.md) --- # Install KashCal Source: https://kashcal.onekash.org/docs/getting-started/install # Install KashCal You can get KashCal from any of the places below. Pick the one you already use. They all install the same app. ## Google Play KashCal is on the [Google Play Store](https://play.google.com/store/apps/details?id=org.onekash.kashcal). Open Play, search for KashCal, and tap Install. Play then updates it like your other apps. It's the same free, open-source app as everywhere else, with no account, ads or trackers. ## F-Droid [F-Droid](https://f-droid.org/packages/org.onekash.kashcal/) is the open-source app store for Android. It builds KashCal from the public source code. 1. Install the F-Droid app from [f-droid.org](https://f-droid.org). 2. Search for KashCal. 3. Tap Install. ## IzzyOnDroid KashCal is also in the [IzzyOnDroid](https://apt.izzysoft.de/fdroid/index/apk/org.onekash.kashcal) F-Droid repository, which often gets releases a little sooner than F-Droid. Add the IzzyOnDroid repo to your F-Droid client, then search for KashCal. ## Obtainium [Obtainium](https://github.com/ImranR98/Obtainium) installs KashCal from its GitHub releases and tells you when an update is out. Add this repository: ``` https://github.com/KashCal/KashCal ``` ## GitHub Releases Download the APK from the [GitHub Releases page](https://github.com/KashCal/KashCal/releases) and open it to install. If you haven't installed an APK from your browser or file manager before, Android asks you to allow it first. :::note The app's package name is `org.onekash.kashcal`. KashCal is Apache-2.0 licensed, and the source is on [GitHub](https://github.com/KashCal/KashCal). ::: ## After installing KashCal opens with a local calendar you can use right away. It needs no account or sign-up. To bring in your other calendars, see [Sync & Accounts](../sync/index.md). --- # Your first few minutes Source: https://kashcal.onekash.org/docs/getting-started/first-run # Your first few minutes KashCal works the moment you open it. There's no setup and no sign-up. ## You start with a local calendar KashCal comes with a calendar stored on your device. It shows as **Local** in the navigation drawer. You can create events in it without connecting an account. KashCal doesn't sync the local calendar anywhere. If Android backup is on for your phone, Android's backup includes KashCal's data. ## The iCloud prompt When no iCloud or CalDAV account is connected, KashCal opens with a sheet that asks **Apple Calendar?** **We've got you.** It shows on each launch until you answer it. - Tap **Connect** to open Settings with the iCloud sign-in ready. - Tap **Not Now**, or swipe the sheet away, to skip it. Connect, Not Now and swiping all close the sheet for good. Add other servers from **Accounts & Settings**, described next. ## Add a calendar account (optional) To bring in calendars you already have (iCloud, Nextcloud, Fastmail and others), tap the round avatar in the top-right corner, then **Accounts & Settings**. You can also open **Settings** from the navigation drawer. See [Sync & Accounts](../sync/index.md) for step-by-step guides. ## Create your first event Tap the + button and fill in the event form. The button is in every calendar view. Insights doesn't have it. To type an event the way you'd say it, like *"Lunch with Sam Friday 12:30 for 1 hour"*, turn on **Smart event add** in Settings under **Event preferences**. It's off until you turn it on. KashCal then works out the date, time and duration as you type. See [Smart event add](../events/smart-event-add.md). ## Find your way around - Switch views from the navigation drawer. Tap the menu icon or swipe in from the left edge. - Jump to today by tapping the calendar icon showing today's date, next to the menu icon. - Search from the magnifier in the top bar, or long-press the app icon on your home screen and pick **Search**. - Show or hide calendars from the navigation drawer. See [Navigation & shortcuts](../calendar/navigation.md) for the rest. ## Turn on reminders On Android 13 and later, reminders need Android's notification permission. KashCal asks for it the first time you save an event with a reminder from the event form. Smart event add doesn't ask. Android shows its own permission prompt, and the event saves whatever you answer. If you deny it once, KashCal explains why before asking again: > KashCal needs notification permission to remind you about upcoming events. Tap **Enable** to see Android's prompt again, or **Not Now** to skip it. You can change the permission later in your phone's settings, or from **App permissions** in the account hub. Android 12 doesn't ask, because notifications are allowed by default there. ## What's new after an update After an update that comes with release notes, KashCal shows a sheet with those notes. Tap **Later** or swipe it away, and it stays closed until the next release with notes. It doesn't show on first launch. ## Next steps - [Calendar views and gestures](../calendar/views.md) - [Connect your calendars](../sync/index.md) - [Adjust your settings](../features/settings.md): week start, time format, event defaults - [Browse all features](../features/index.md) --- # Calendar views Source: https://kashcal.onekash.org/docs/calendar/views # Calendar views KashCal has seven calendar views. Switch between them in the navigation drawer. Open the drawer with the menu icon at the top left, or swipe in from the left edge. | View | What it shows | |------|---------------| | **Month** | A month grid with dots on days that have events. Tap a day to list its events below the grid. Swipe that list left or right to step one day at a time. Swipe the grid to change months. In landscape the list sits beside the grid, and on a short landscape screen the grid cells get smaller. | | **Agenda** | A list of the next 90 days of events, grouped by date. The headers for today and tomorrow add the word, as in "Today · Monday, September 28". The top bar shows the month you've scrolled to. A week bar sits above the list. Tap the month title to collapse or expand it. KashCal remembers the choice. | | **Day** | One day as an hour-by-hour timeline. Overlapping events sit side by side. A week bar sits above the timeline. Tap the date title to collapse or expand it. It starts expanded, and KashCal remembers the choice. | | **3 Days** | Three days side by side as timelines. Tap a day's header to open that day in Day view. Press back to return to the three days. | | **Week** | A seven-day timeline. The top bar shows the month, and the corner left of the day headers shows the week number. Tap a day's header to open that day in Day view. Press back to return to the week. | | **Month (Full)** | A month grid with event titles stacked inside each day cell, not only dots. Tap a day to open a sheet with its events. | | **Year** | All twelve months. Tap a month to open it in Month view. Tap a year in the strip at the top, or swipe, to change years. Press back to return to Month view. | :::tip The drawer also has **Insights**, which shows how you spend your time. See [Insights](../features/insights.md). ::: ## Gestures The timeline views (Day, 3 Days, Week) respond to these gestures: - Pinch to zoom. Pinch in or out on the timeline to make the hours shorter or taller. KashCal remembers the zoom level. - Drag to reschedule. Press and hold a timed event, then drag it to a new time, or sideways to another day. A short vibration tells you the drag has started. All-day events and read-only events, such as holiday feed events, can't be dragged. When you drop an occurrence of a repeating event, KashCal asks what to move: **This event**, **This and all future**, or **All events**. **This and all future** is greyed out on the first occurrence. Device-calendar events offer only the first two. An occurrence you changed on its own moves without asking. - Tap an empty slot to start a new event there. The start time snaps to the nearest 15 minutes. - Swipe left or right to move through time. In Day and 3 Days a swipe moves one day. In Week it moves a whole week. - Tap a "+N more" badge to see the full list. It shows when more events overlap than fit side by side. - Expand the all-day row. When a day has more all-day events than the strip shows, tap the chevron to see them all. Tap it again to collapse. KashCal remembers the choice. Timed events that run past midnight show in the timed grid on each day they cover. To show those lasting 20 hours or more in the all-day strip instead, turn on **Multi-day events in all-day strip** in [Settings > Appearance](../features/settings.md#appearance). ## Tag chips Events you've labeled with [tags](../events/tags.md) show their colored chips in these places: - Timeline event blocks in Day, 3 Days and Week, when the block is tall enough. Short blocks hide them. - The selected day's event list in Month. - The day sheet in Month (Full). The Agenda list doesn't show tag chips. ## Moving around - Go to today. Tap the calendar icon next to the menu icon. It shows today's date. - Pick a date. Tap the title in the top bar. In Month and Month (Full) it opens **Go to month**. In 3 Days and Week it opens a date picker. In Agenda and Day it collapses or expands the week bar. **Go to date** in the account menu (tap the avatar at the top right) jumps to any date. - Add an event. Tap the + button. In Day, 3 Days and Week the event starts today at the next hour. With [Smart event add](../events/smart-event-add.md) on, the + button opens the typing box instead. Insights has no + button. - Reopen where you left off. KashCal opens in the last view you switched to. On first launch that's Month. Insights, and a day opened from a day header, aren't remembered. The Day, 3 Days and Week timelines reopen at the hour you were looking at. - Pull to refresh. With a connected account and a network connection, pull down on the calendar to sync right away. ## Rotating the phone Month shows the grid and the day's events side by side in landscape. The timeline views show the same number of day columns in any orientation. If you rotate while filling in an event, KashCal keeps what you've typed. ## Related - [Widgets](../features/widgets.md): put your calendar on the home screen - [Search](../features/search.md): find any event fast - [Tags](../events/tags.md): label events with colored chips --- # Navigation & shortcuts Source: https://kashcal.onekash.org/docs/calendar/navigation # Navigation & shortcuts This page covers the navigation drawer, the account hub, home-screen shortcuts, search and syncing on demand. ## The top bar - The menu icon opens the navigation drawer. - The calendar icon showing today's date, next to the menu icon, jumps to today. - The magnifier opens search. - The round avatar opens the account hub. When you're offline and have a synced account, a cloud-off icon shows beside the magnifier. ## The navigation drawer Swipe in from the left edge of the screen, or tap the menu icon, to open the drawer. From here you can: - Switch views: Insights, then Agenda, Day, 3 Days, Week, Month, Month (Full) and Year. - Show or hide calendars. Each calendar has a checkbox and a color dot. Your calendars are grouped by account. **Contacts** (birthdays and anniversaries) and **Device calendars** (calendars from other apps on your phone) have their own sections. The device section appears only after you turn on [device calendars](../sync/device-calendars.md). - **Settings**: opens Settings. - **Help & docs**: opens the Get help section of this site in your browser. ## The account hub Tap the round avatar in the top-right corner of any calendar view to open the account hub. It's a full-screen page for your accounts, the app's look and your privacy settings. At the top is a large avatar. Tap it, or the pencil on it, to set up to two initials. Until you do, it shows a person outline. The hub has these parts: - **Accounts & Settings**, an outlined button under the avatar that opens Settings, where you connect accounts and calendars. - **Make it yours**, where you personalize the app: - **Theme:** **System default** follows your phone. **Light** and **Dark** pin it. - **Accent color:** the color that tints the app and your home-screen widgets. **Automatic** (the default) follows your device's Material You wallpaper colors. You can also pick **KashCal Teal**, KashCal's own color, or one of 11 other swatches. **More colors** opens wheels with 92 named colors. KashCal Teal is also the fallback when Material You isn't available. The hub avatar, the **Accounts & Settings** button and today's date in the calendar grid keep a thin outline, so they stay visible with a pale or dark accent. - **App Icon:** keep **Default**, or switch to the **Supporter** icon, a gold card with a heart, to show you've chipped in (or [would like to](https://kashcal.onekash.org/donate)). One version keeps the KashCal name. The other, **Supporter, labeled Calendar**, shows the name Calendar on your home screen. **Today's date** shows the day of the month on the home-screen icon. KashCal moves it to the current day at midnight, after a clock or time zone change, after the phone restarts, after KashCal updates and a few seconds after you leave KashCal. The move waits while KashCal is on screen or the phone is locked with KashCal open. It also waits while another app's screen you opened from KashCal (a share, for example) is open. If you leave from that screen, the icon moves at the next midnight, clock change, restart or update. If you opened KashCal from its icon and left it in your recent apps, it drops out of recent apps when the icon moves. Themed icons show the plain calendar glyph without the date. Changing the icon can restart the app. Notifications always use the default icon and name. - **Widget theme** and **Widget accent:** your [home-screen widgets](../features/widgets.md) can follow the app or have their own look. Leave both on **Follow app**, or pin the widgets to Light or Dark and give them their own color. See [Widgets](../features/widgets.md#colors-and-theme-together-or-apart). - **Own your calendar**, the things you do with your schedule: - **[Invites](../events/invites.md)**: every invitation waiting on your reply. When one is waiting, a count shows on the row and on the top-bar avatar. - **[Recent changes](../sync/how-sync-works.md#recent-changes)**: what sync changed in your iCloud and CalDAV calendars over the last 7 days. - **Go to date**: jump to any date in the calendar. - **[Share availability](../features/share-availability.md)**: send someone your free times as plain text. - **[Manage tags](../events/tags.md)**: recolor, rename and remove the tags you've used across your events. - **Privacy & Security**, who can see your calendar and what it can reach: - **[App lock](../features/app-lock.md)**: a switch that makes KashCal ask for a strong biometric, such as your fingerprint, or your screen lock before it opens. - **App permissions**: one screen listing every permission KashCal uses, each with the reason it needs it and a link to its system setting. - **How your data stays yours**: opens the [Privacy & Security](../privacy/overview.md) page in your browser. - **About**: the version and app info. ## App shortcuts Long-press the KashCal icon on your home screen to jump to a task: - **New Event** opens the event form, starting at the next hour today. With [Smart event add](../events/smart-event-add.md) on, it opens the Smart event add box instead. - **Today** opens KashCal on today's date. - **Search** opens search. ## Quick Settings tile KashCal has an **Add event** tile for Android's Quick Settings panel. Add it by editing your Quick Settings tiles. Tapping it opens KashCal the same way as the **New Event** shortcut, from any screen. ## Searching Open search from the magnifier in the top bar or the **Search** app shortcut. With no filter chip picked, search shows upcoming events only. Pick **All**, **Week**, **Month** or **Date** (a day or a range) to change that. See [Search](../features/search.md). ## Syncing on demand Pull down on a calendar view to sync your connected accounts right away. This works when you're online and have an iCloud or CalDAV account set up. KashCal also syncs in the background on a schedule you set. See [How sync works](../sync/how-sync-works.md). --- # Smart event add (natural language) Source: https://kashcal.onekash.org/docs/events/smart-event-add # Smart event add Type an event the way you'd say it, and KashCal fills in the details. As you type, a preview shows what it understood: the title, date, time and more. Check it, then save. ## Turn it on Smart event add is off until you turn it on. Tap **Accounts & Settings** in the [account hub](../calendar/navigation.md#the-account-hub), then switch on **Smart event add** under **Event preferences**. With it on, the + button opens the typing box in every calendar view, including the Day, 3 Days and Week timelines. To open the full form at a set time in a timeline, tap an empty slot on the grid. The box shows a random example as its placeholder, such as "Coffee tomorrow at 3pm" or "Standup every weekday at 9am". Here's how KashCal breaks down what you type: ## Other ways in With Smart event add on, these open the typing box too. With it off, they open the full [event form](./event-form.md). - The **Create new event** [app shortcut](../calendar/navigation.md#app-shortcuts) (**New Event** when the launcher shortens it), from a long-press on the KashCal icon. - The **Add event** [Quick Settings tile](../calendar/navigation.md#quick-settings-tile). - The + on the **Today's Agenda**, **Upcoming**, **Week View** or **Month View** [home-screen widget](../features/widgets.md). Sharing text to KashCal from another app opens the typing box with the text filled in, whether or not Smart event add is on. The first link in the text becomes the location, unless the text gives one with `at`. Editing the text drops the link. Text longer than 500 characters opens the full form instead: the first line (up to 80 characters) becomes the title, the first link becomes the location, and the whole text goes in the note. ## What you can type Smart event add reads English words only, whatever language KashCal shows. Numeric dates and times, such as `2027-01-15` and `15:30`, work in any language. Words it doesn't recognize as a date, time, repeat, location, tag or note stay in the title. Combine any of these in one sentence. ### Dates - Relative: `today`, `tomorrow`, `yesterday`, `day after tomorrow` - Weekdays: `Monday`, `next Friday`, `this Wednesday`, `last Tuesday` - Specific dates: `March 15`, `15 January`, `15 of March 2027` - Numeric dates: `3/15/2027`, `2027-01-15` A numeric date such as `5/10/2026`, where either number could be the month, follows your phone's language and region: 5 October where the day comes first, May 10 where the month does. A date with dots, such as `5.10.2026`, is always day first. If you don't type a date, the event goes on the day you have selected. In the Day, 3 Days and Week views, and for text shared from another app, it goes on the current day. ### Times - Exact: `3pm`, `3:30 PM`, `15:30`, `at 10 15` - Ranges: `2pm to 4pm` - Parts of the day: `morning`, `afternoon`, `evening`, `night`, `tonight` - Spoken: `quarter past 10`, `half past 3`, `quarter to 5` ### Duration - `for 30 minutes`, `for 2 hours`, `for 1.5 hours` ### "In" and "ago" offsets - `in 2 hours`, `in 3 days`, `in 1 week` - `2 hours ago`, `3 days ago` ### Recurrence - `daily`, `weekly`, `biweekly`, `monthly`, `yearly` - `every day`, `every 2 weeks`, `every 3 months` - `every Monday`, `every weekday`, `every weekend` - A weekday of the month: `every 2nd Tuesday`, `first Monday of every month`, or `last Friday of the month`, which lands on the last Friday whether that's the 4th or the 5th - The last day of the month: `last day of the month`, `last day of every month` - An end: `until December` or `5 times` `the 2nd Tuesday of this month` (this month, not every month) creates one event on that date, not a repeat. ### Location - Words after `at` that aren't a date or time become the location: `Lunch at Olive Garden`, `Meeting at Conference Room B` ### Tags - Put `#` in front of a word to add it as a tag: `Lunch with Sam #social`, `Deep work #focus`. You can add more than one. The tags don't end up in the title. See [Tags](./tags.md). ### Notes - Everything after a space and `//` becomes the event's note: `Call plumber tomorrow 3pm // ask about the leak under the sink`. KashCal reads only the part before the `//` for the date, time and location, so words in the note don't move your event. Because the space is required, links such as `https://…` stay whole. typed: 'Team lunch 2nd Tuesday of the month 12pm at Nios // bring the quarterly deck', rows: [ {label: 'Title', value: '🍽️ Team lunch'}, {label: 'When', value: 'Next 2nd Tuesday · 12:00 PM'}, {label: 'Where', value: 'Nios'}, {label: 'Repeats', value: 'Monthly on the 2nd Tuesday'}, {label: 'Note', value: 'bring the quarterly deck'}, ], }} /> ## Examples | You type | KashCal creates | |----------|-----------------| | `Coffee with Kash tomorrow 3pm` | "Coffee with Kash", tomorrow at 3:00 PM | | `Standup every weekday at 9am` | "Standup", repeating every weekday at 9:00 AM | | `Lunch with Sam Friday 12:30 for 1 hour` | "Lunch with Sam", this Friday 12:30-1:30 PM | | `Book club every Tuesday until December` | "Book club", weekly on Tuesday, ending in December | | `Dentist in 2 weeks at 10am` | "Dentist", two weeks out at 10:00 AM | | `Deep work 2pm #focus` | "Deep work", 2:00 PM on the selected day, tagged #focus | | `Team sync last Thursday of the month` | "Team sync", the last Thursday of each month | | `Rent last day of every month` | "Rent", on the last day of every month | | `Call Sam 4pm // ask about the invoice` | "Call Sam", 4:00 PM on the selected day, with a note | ## The live preview While you type, the preview shows: - the title, with an emoji in front when KashCal recognizes one and **Event emojis** is on in Settings, - the date (**Today**, **Tomorrow**, **Yesterday**, or the date), - the time range, or **All day** if you didn't give a time, - the location, - the note, - the repeat pattern, and - the tags, as chips. The preview updates as you type. Tap **Save**, or the keyboard's Done key, to create the event. KashCal saves it to your default calendar with your default alert and jumps to its date. If your default calendar is a device calendar, **Save** opens the full form instead. For more control, tap **More options** to open the full [event form](./event-form.md) with what you typed filled in. The box starts as one line and grows to three as you type, then scrolls, so a long note doesn't push the preview off screen. Entries are capped at 500 characters. A counter appears at 450 characters. ## Related - [Creating & editing events](./event-form.md): the full event form - [Settings](../features/settings.md#event-preferences): the default calendar and alerts - [Search](../features/search.md): find an event later --- # Creating & editing events Source: https://kashcal.onekash.org/docs/events/event-form # Creating & editing events The event form sets every detail of an event on one screen. To create an event, tap the + button, or tap an empty slot in a Day, 3 Days or Week timeline. With [Smart event add](./smart-event-add.md) on, the + button opens the typing box instead of the form. The form opens full screen. For a new event with an empty title, the cursor starts in the title with the keyboard up. When you edit an event, or the form opens with a title already filled in, the keyboard stays down. Dragging the form to scroll it closes the keyboard. A drag that starts in the title, location or notes, in a tag name you're typing, or in the **After** count under Repeat leaves it open, so you can select and edit text. ## What you can set - Title. A long title wraps onto up to four lines, then scrolls inside the field. As you type, KashCal suggests titles you've used before (see [Title suggestions](#title-suggestions)). - Location. An address, room, or meeting link. After you type 5 characters, including a letter, KashCal lists up to 5 matching addresses from Android's address lookup. Phones without an address lookup service show no suggestions. - Notes. Free-form details for the event. - Calendar. Which calendar the event belongs to. New events go to your **Default calendar** unless you pick another. - Start and end. Pick the date and time, or switch on **All day**. The time wheel steps in 5-minute increments. To set an exact minute like 3:47, tap the keyboard button and type it. An event on an off-step minute shows its exact time as tappable text. A new event lasts your **Default event length**, 30 minutes unless you change it in [Settings](../features/settings.md#event-preferences). - Time zone. Events use your device time zone unless you set another one. One time zone covers both the start and the end. - Repeat. Make the event recurring. See [Recurring events](./recurring.md). - Event color. Give the event its own color. See [Event colors](./colors.md). - Tags. Label the event with colored chips like `#focus` or `#dentist`, with suggestions from tags you've used before. See [Tags](./tags.md). - Alerts. Add reminders. See [Reminders](./reminders.md). - Availability. Mark the event **Busy** or **Free**. Free events don't count as busy time, for example when you [share your availability](../features/share-availability.md). - Attendees. Invite people. See [Scheduling & invitations](./attendees.md). When you change the start time, the end time moves with it and the event keeps its length. If you set an end time before the start time on the same day, the end time shows this error and the save button stays off until you fix it: > End time must be after start time KashCal doesn't correct the end time for you. ## Title suggestions **Suggest event titles** is on by default. Turn it off in [Settings](../features/settings.md#event-preferences). After you type 3 characters, the title field lists up to 5 titles that start with what you typed and that you've used at least twice between 90 days ago and a week ahead, ranked by how often and how recently you used them. Titles from visible device calendars count too. Tap one to fill in the title. ## Leaving without saving If you've changed anything, the first tap on **Cancel** or back turns the button into **Discard?**. Tap it, or press back again, to throw away your changes. With no changes, the form closes on the first tap. ## All-day events Switch on **All day** for an event with no specific time, such as a birthday, holiday, trip or deadline. All-day events have their own reminder options, like "9 AM day of event" (see [Reminders](./reminders.md)). ## Actions on an event Tap an event to open its details. From there you can: - Tap the edit button (a pencil) to change it. For an event someone else organizes, the same button opens the form, where you can change only your alerts and your reply. - Tap the delete button (a trash can). For a single event, or an occurrence changed on its own, tap **Confirm** to finish. For a repeating series, KashCal asks which occurrences to delete. - Open the three-dot menu for **Duplicate**, **Share as text** and **Export as .ics**. **Duplicate** on a repeating event opens the form on the occurrence you tapped, with **Repeat** filled in from the series, so saving creates a separate series. Occurrences you deleted from the original show again in the copy. An occurrence changed on its own, or a date the series adds outside its repeat rule, duplicates as a single event. - Tap the location to open it in your maps app. If the location contains a link, the tap opens the link. Events in read-only calendars, such as holiday feeds, show only a duplicate button and a share button. On an event from a device calendar, these buttons show words in place of icons: **Edit**, **Delete** and **Share**. ## Editing recurring events When you edit or delete an event that repeats, KashCal asks how much of the series to change: this event only, this and all future events, or all events. See [Recurring events](./recurring.md) for the details. ## Related - [Smart event add](./smart-event-add.md): the faster way to create events - [Recurring events](./recurring.md): make an event repeat - [Reminders](./reminders.md): get alerted before it starts - [Tags](./tags.md): label events with colored chips --- # Recurring events Source: https://kashcal.onekash.org/docs/events/recurring # Recurring events A daily habit, a Friday standup, the second Tuesday of every month: set the pattern once and KashCal fills in every occurrence. ## Set up a repeat In the event form, tap the repeat row. On a new event it reads **Does not repeat**. Pick one of the choices: - **Never**, **Daily**, **Weekly**, **Monthly** or **Yearly**. - **Custom**, for any interval. Set **Repeat every** from 1 to 99, then pick **Day**, **Week**, **Month** or **Year**. Every two weeks is **Custom**, 2, **Week**. For **Weekly** (or a custom interval in weeks), pick the days under **On days**. For **Monthly** (or a custom interval in months), pick a **Pattern**: - "On day" and a number, such as the 15th. - **On last day of month**. - A weekday position, such as "On the 2nd Tuesday". Under **Which**, pick 1st, 2nd, 3rd, 4th or last. Under **Weekday**, pick the day. "Last" covers a meeting on the last Friday, whether that's the 4th or 5th Friday of the month. Under **Ends**, choose when the repeat stops: - **Never** repeats with no end. - **On date** stops after a date you pick. - **After** a number of **occurrences** stops after that many. You can also type a repeating event with [Smart event add](./smart-event-add.md), such as *"Standup every weekday at 9am"*. ## Change or delete one occurrence or the whole series When you save a change to a repeating event, delete one, or drag one to a new time, KashCal asks which occurrences it applies to. The sheet is titled **Save changes to**, **Delete** or **Move**, and offers: - **This event**: only the occurrence you opened. - **This and all future**: this occurrence and every later one. - **All events**: the whole series. On **Delete** it's shown in red. So you can move this week's meeting and leave the rest alone, or change the time of every future meeting at once. A choice that doesn't apply stays on the sheet, greyed out: - On the first occurrence, **This and all future** is greyed out, because it would mean the same as **All events**. - On an occurrence you've already changed on its own, only **This event** is available. - If you changed the repeat rule, **This event** is greyed out, because a single occurrence can't carry a rule. **All events** is also greyed out unless you're editing the first occurrence. To change the pattern from a later occurrence onward, use **This and all future**. When you drag an occurrence of an event from a [device calendar](../sync/device-calendars.md), the **Move** sheet leaves out **All events**. :::note[How a single-occurrence change is stored] When you change one occurrence of a repeating event, KashCal stores it as an exception linked to the series. The rest of the series stays as it was and keeps syncing. The change stays a single change. KashCal sends it to your server as a change to that one occurrence, tagged with the date and time of the occurrence it replaces. It doesn't turn into a duplicate or a separate event on the next sync. The reverse works too. If you delete that changed occurrence from another app or device, the next sync removes KashCal's copy, once the server marks the occurrence as excluded from the series. ::: ## Related - [Creating & editing events](./event-form.md): the full event form - [Reminders](./reminders.md): reminders on repeating events --- # Reminders Source: https://kashcal.onekash.org/docs/events/reminders # Reminders A reminder is an Android notification that tells you an event is coming up. ## Add a reminder In the event form, tap the alerts row (the bell). It lists the event's alerts, or **None**. Each event can have up to five alerts. 1. Tap **Add Alert**. KashCal adds an alert and opens a picker for it. 2. Tap a preset chip. The picker closes with that lead time set. 3. Or turn the **days**, **hrs** and **min** wheels to set any lead time, then tap **Done**. The minute wheel moves in 5-minute steps. On a timed event, the new alert starts at 15 minutes before, and the chips are 15m, 30m, 1h and 1d. Set all wheels to 0 for an alert at the start time. All-day events have no start time, so their chips fire at 9 AM: - 9AM: 9 AM on the day of the event - 1d: 9 AM the day before - 2d: 9 AM two days before - 1w: 9 AM a week before Tap an alert to change it. Tap the ✕ on its row to remove it. **Add Alert** disappears once an event has five. An event synced from another app can carry more than five alerts. The form shows the first five, and a line under them says how many aren't shown. ## Alerts on invitations On an event you were invited to, you can't change the details, but you can set your own alerts. They stay on this phone and aren't sent to the organizer or your server. ## When a reminder fires The notification shows the event title, its time, and its location if it has one. For an all-day event it shows Today, Tomorrow or "In 3 days" in place of a time. Tap it to open the event. It has two actions: - **Snooze** reminds you again in 15 minutes. - **Dismiss** clears it. You can't change the 15-minute snooze. If you turn on notification snoozing in Android's notification settings, Android adds its own snooze with other lengths. KashCal schedules your reminders again after the phone restarts and after the app updates. A reminder that fired before a restart is gone: Android clears notifications when the phone restarts, and KashCal doesn't show a fired reminder again. To be reminded more than once, add more alerts to the event. ## Default reminders Each event you create starts with a default alert. **Timed event alert** sets it for events with a start time (15 minutes before, unless you change it). **All-day event alert** sets it for all-day events (9 AM the day before, unless you change it). Both are in Settings under **Event preferences**; see [Settings](../features/settings.md#event-preferences). Each setting holds one alert. You can change or remove the alert on any single event, or add more. ## Notification permission On Android 13 and later, reminders need notification permission. When you save an event with an alert from the event form and the permission isn't granted, Android asks for it. If you said no once before, KashCal shows this first: > KashCal needs notification permission to remind you about upcoming events. To grant it later, open the [account hub](../calendar/navigation.md#the-account-hub), then **App permissions**. KashCal schedules reminders as exact alarms, so they arrive on the minute. Android grants this when you install KashCal. On Android 12 and 12L you can turn it off under "Alarms & reminders" in Android's app settings; KashCal then uses inexact alarms, which Android can deliver a few minutes late. ## Device calendar reminders If you show calendars from other apps on your phone (see [Device calendars](../sync/device-calendars.md)), KashCal also sends reminders for their events. To turn this off, open Settings, tap **Device calendars**, and turn off **Reminders**. It's on by default. ## Related - [Creating & editing events](./event-form.md): set a reminder while you edit - [Settings](../features/settings.md#event-preferences): the default reminders for new events --- # Event colors Source: https://kashcal.onekash.org/docs/events/colors # Event colors An event takes its calendar's color unless you give it its own. Use colors to sort your week by type, for example blue for work, green for personal and red for deadlines. ## Choosing a color In the event form, tap the **Event color** row. A grid opens: - The first swatch is the calendar default. Pick it to make the event follow its calendar's color. - The other 11 swatches cover red, orange, yellow, two greens, teal, two blues, purple, pink and gray. - Tap a swatch to apply it. The grid closes. For more choices, tap **More colors**. It opens a browser of 92 named colors on two wheels: turn the left wheel to pick a color family and the right wheel to pick a color. The top shows a preview with the color's name and hex code. Tap **Done** to apply it, or **Back** to return to the grid. The row then shows the color's name for a grid color or **Saddle Brown**, **Custom** for any other color, or **Event color** when the event uses the calendar default. You can't change the color of an event someone else organizes and invited you to. ## Calendar colors iCloud and CalDAV calendars use the color set on the server and pick up changes when they sync. Device calendars use the color their sync app sets. The Local calendar is gray. To recolor one of these calendars, do it on the server or in the app that owns it. You set the colors of [calendar feeds](../sync/ics-subscriptions.md) and [contact birthdays](../features/birthdays.md#color-and-reminders) in KashCal. ## How colors sync KashCal sends an event's color to your CalDAV server as a standard web color name, or as a hex code for a color outside the 92. It reads the same values back from the server. If the server doesn't store event colors, KashCal keeps the color you set on your phone. ## Related - [Creating & editing events](./event-form.md): set a color while you edit - [Calendar views](../calendar/views.md): where colors show up --- # Tags Source: https://kashcal.onekash.org/docs/events/tags # Tags Calendars group your events by where they're stored. Tags label them by what they are: `#focus`, `#dentist`, `#standup`, `#travel`. A tag shows as a small colored chip on the event, so you can pick out one kind of event across your week. ## Adding tags You can add a tag three ways: - In the [event form](./event-form.md): tap **New tag** (or the + after your tags), then type a name or pick one from the list. The list shows your 20 most recently used tags, newest first. Typing filters it, and the last row, Create "…", adds the name you typed. - In the title field: type `#` at the end of the title and KashCal suggests your existing tags, plus a Create "…" row for a name you haven't used. Pick one and it moves out of the title into the event's tags. - In [Smart event add](./smart-event-add.md): put `#` in front of a word, like `Lunch with Sam #social`. KashCal takes `#social` as a tag and the rest becomes the event. You can add more than one tag, and a tags-only entry like `#work` works too. A Smart event add tag is one word of letters, digits, `-` or `_`, and it has to come before any `//` note. ## Where tags show up An event's tags show as chips in the quick view when you tap the event, and in the tag row of the event form. For the calendar views that show chips, see [Tag chips](../calendar/views.md#tag-chips). The tag row sits below the notes in the form. To move it above the notes, tap the ⋮ at the end of the row and choose **Move above notes**. KashCal keeps that choice for every event. ## Managing your tags Open **Manage tags** from the [account hub](../calendar/navigation.md#the-account-hub) to see every tag you've used. Each tag has these actions: - **Change color:** pick the chip color. - **Rename:** change the tag's name on every event in KashCal's own calendars that carries it. On iCloud and CalDAV accounts, KashCal uploads the changed events so your other devices get the new name. Renaming a tag to a name that already exists merges the two into one tag. - **Delete:** removes the tag from this list only, and its custom color goes with it. Your events keep the tag. An **Undo** button appears for a moment after you delete. Renaming doesn't change tags on device-calendar events. ## Tags on device-calendar events Events in your [device calendars](../sync/device-calendars.md) can carry tags too. Add and remove them in the event form, and see them as chips on the event and in the quick view. KashCal stores these tags in a field of the Android calendar that CalDAV sync apps on your phone read as the event's categories. On a calendar synced by such an app, the tags reach your server. Other device calendars, such as Google calendars, keep the tags on your phone only, and some don't keep them at all. A tag on a device-calendar event joins **Manage tags** only when you add it in KashCal and save the event. Tags that arrive from another app or your server show on their events but aren't listed. KashCal reads device calendars from the phone's calendar storage and keeps no copy of their events. If the account offers CalDAV, connect it [directly](../sync/providers/caldav.md). Then the tags on its synced events are listed in **Manage tags**, and you can rename and merge them. ## How tags are matched and stored - Case doesn't matter. `Work` and `work` are the same tag. KashCal keeps the spelling you used first, so your list doesn't fill up with near-duplicates. - Length and characters. A tag can be up to 64 characters and can't contain a comma. - Standard format. On iCloud and CalDAV accounts, tags are stored as the event's calendar categories, so they sync with the event. ## Related - [Creating & editing events](./event-form.md): the full event form - [Smart event add](./smart-event-add.md): type `#tag` inline - [Calendar views](../calendar/views.md#tag-chips): the views that show chips --- # Scheduling & invitations Source: https://kashcal.onekash.org/docs/events/attendees # Scheduling & invitations You can invite people to your events, and KashCal sends the invitations through your own calendar account. You can also reply to invitations other people send you. ## Inviting people In the event form, tap **Add attendees**. In the search box you can: - Type a name to pick from your contacts. This needs Contacts permission. While KashCal can still ask for it, a banner reads **Suggest people from your contacts**, with **No thanks** and **Allow**. - Type an email address, then tap the Add row that shows it, or the keyboard's done key. Until the text in the box is a full email address, the box shows this, even while you type a contact's name: > Enter a full email address Each guest shows as a chip with an ✕. Tap the chip to remove that guest. When you save, your calendar server sends the invitations. ## Save & notify When you edit an event, the save button reads **Save & notify** if saving will send guests an update. That happens when you: - change the title, location, time or repeat rule of an event with guests - add a guest - remove a guest (the removed guest gets a cancellation) If you change only the notes or the color, the label doesn't change. New events and device-calendar events never show **Save & notify**. Saving a new event with guests still sends the invitations. ## Seeing who's coming The guest list groups people by their response: - **Going:** accepted - **Maybe:** tentative - **Pending:** hasn't responded yet - **Declined:** said no - **Delegated:** passed it to someone else ## Responding to invitations When someone invites you, the event asks **Going?** and you reply **Yes**, **Maybe**, or **No**. For a repeating event, your reply applies to the whole series: > Your reply applies to the whole series. If an occurrence was changed on its own, your reply on it applies to that occurrence only. You can reply on the event itself, or from [Invites](./invites.md), which lists every invitation still waiting for your reply. ## When invitations aren't available KashCal needs an email address for your account to send invitations as the organizer. When the account has none, the guest row reads: > Inviting people isn't available on this account A device calendar with no sync account behind it keeps its data only on your phone. You can add guests there, but nobody is notified, and the form says so: > This calendar can't send invitations. Guests are saved but won't be notified. See [Known limitations](../help/known-limitations.md) for more on which accounts support invitations. ## Related - [Invites](./invites.md): invitations waiting on your reply - [Creating & editing events](./event-form.md): where you add people - [Known limitations](../help/known-limitations.md): what scheduling can and can't do --- # Invites Source: https://kashcal.onekash.org/docs/events/invites # Invites Invitations arrive in different places: one by email, one you saw in the week view and meant to answer, one you forgot. **Invites** puts every invitation still waiting on your reply into one list. Tap the avatar in the top-right corner to open the [account hub](../calendar/navigation.md#the-account-hub), then tap **Invites**. When an invitation is waiting, a count shows on the row and on the avatar. Above 99 it reads 99+. ## What shows up An event is on the list when all of these are true: - You're a guest and haven't replied yet. - The event has an occurrence in the future. When the last one has passed, the invitation leaves the list. - You're not the organizer. Your own events don't ask you to reply. With more than one account connected, each invitation is checked against the account whose calendar holds it. An invitation in your work calendar counts as a work invitation, even if the same address is also on your personal account. ## Get notified When a sync brings in an invitation you haven't answered, KashCal posts a notification with the event title and "From" the organizer, followed by "Tap to respond". Tap it to open the event and reply there. The notification clears when you reply. These notifications use their own Android channel, **Event Invitations**. Turn that channel off in Android's notification settings to stop them without muting reminders. ## Reply Each card shows the date and time, the event title, who invited you, and the location if there is one. A colored dot marks the calendar it's in. For events today or tomorrow, the card shows **Today** or **Tomorrow** in place of the date. Tap **Yes**, **Maybe** or **No**. KashCal records your answer and the card leaves the list. KashCal then starts a sync, which sends the reply to your calendar server. For a repeating event, your reply covers the whole series. Tapping **No** also cancels the event's reminders, so a meeting you declined won't alert you later. When nothing is left, the list shows: > All caught up Tap that message to close the list. ## Related - [Scheduling & invitations](./attendees.md): invite people to your own events - [Reminders](./reminders.md): alerts for the events you accept - [Known limitations](../help/known-limitations.md): which accounts support scheduling --- # Sync & accounts Source: https://kashcal.onekash.org/docs/sync # Sync & Accounts KashCal connects to the calendar servers you already use and shows their calendars on one screen. It speaks CalDAV, the open standard behind iCloud, Nextcloud, Fastmail and other calendar services. ## Ways to bring in calendars - iCloud: connect your Apple calendars. See [iCloud setup](./providers/icloud.md). - Any CalDAV server: Nextcloud, Fastmail, Radicale, Baikal, Zoho, mailbox.org, Stalwart, SOGo, Infomaniak, Davis, Purelymail and others. See [CalDAV setup](./providers/caldav.md). - Contacts (CardDAV, beta): sync the contacts on your iCloud or CalDAV account with your phone, both ways. See [Contact sync](./contacts.md). - Calendar feeds (ICS): subscribe to holiday, sports or school calendars. See [Calendar feeds](./ics-subscriptions.md). - Device calendars: show calendars from other apps on your phone. See [Device calendars](./device-calendars.md). - Import/export files: bring in or save out `.ics` files. See [Import & export](./import-export.md). ## Before you start - KashCal is offline-first. You can use it fully before you connect anything. - Your password is encrypted on your device and never sent to KashCal. There are no KashCal servers. See [Privacy & Security](../privacy/overview.md). - For a CalDAV account you enter a server address, username and password. KashCal finds the calendars on the server itself. See [CalDAV setup](./providers/caldav.md). ## Managing your accounts Tap the avatar in the top-right corner, then **Accounts & Settings**, then **Calendar accounts**. The navigation drawer has a **Settings** entry too. Each account row shows how many calendars it syncs and flags sync trouble. Tap an account to open its sheet: - To rename the account, tap its name at the top of the sheet. The **Rename Account** sheet opens. - To turn calendar sync off or on, use the **Calendar** switch ("Sync this account's calendars"). - To sync contacts, use the **Contacts** switch. See [Contact sync](./contacts.md). - To sync right away, tap **Sync Now**. While a sync runs, the sheet shows **Syncing…**. - To pick up calendars you added on the server, tap **Discover New Calendars**. If it finds any, the calendar count shows how many are new. - To update your password, tap **Change Password**. - To remove the account, tap **Sign Out**. KashCal asks first, because signing out removes that account's synced calendars from this device. Your events on the server stay there, and events in your local calendar stay on the device. After a failed sync, the sheet shows how many attempts failed and when the last successful sync was, or "Never synced". Two more settings live outside the account sheet: - To choose where new events go, open Settings, and under **Event preferences** tap **Default calendar**. - To show or hide a calendar, turn it on or off in the navigation drawer, where calendars are grouped by account. How far back sync downloads events, and how often it runs, apply to all accounts together. Both are in **Settings**, under **Sync** (**Sync lookback** and **Sync frequency**). See [Settings](../features/settings.md#sync) and [How sync works](./how-sync-works.md). ## Quick links - [Settings](../features/settings.md): default calendar, sync lookback, appearance - [How sync works](./how-sync-works.md): what offline-first means and when sync happens - [Supported servers](./supported-servers.md): the full compatibility list and what each needs - [Sync troubleshooting](../help/troubleshooting.md): if something isn't syncing --- # iCloud Source: https://kashcal.onekash.org/docs/sync/providers/icloud # Connecting iCloud KashCal connects to iCloud's calendar server directly. You don't need a bridge app. ## You need an app-specific password iCloud doesn't accept your normal Apple ID password in third-party apps. You need an app-specific password, which Apple creates for you. If the Apple ID or password is wrong, sign-in fails with this message: > Invalid Apple ID or app-specific password. Please check your credentials. An app-specific password lets you sign in without sharing your main Apple ID password. You can revoke it at any time without changing your main password. ## Create an app-specific password 1. Go to [account.apple.com](https://account.apple.com) and sign in with your Apple ID. 2. Open Sign-In and Security. 3. Choose [App-Specific Passwords](https://support.apple.com/102654). 4. Click Generate, then copy the password. The password has 16 characters, shown as `xxxx-xxxx-xxxx-xxxx`. You can paste it with or without the dashes. The sign-in screen has steps for this too, under **What's an app-specific password?** ## Add the account in KashCal 1. Open **Settings**, tap **Calendar accounts**, then tap **Add iCloud**. 2. Enter your **Apple ID** email address. 3. Paste the app-specific password into **App-Specific Password**. 4. Tap **Sign In**. KashCal finds all your calendars, including calendars others share with you, and starts the first sync. A calendar shared with you as view-only is read-only in KashCal. You can connect one iCloud account. Once it's connected, **Add iCloud** no longer shows. Apple assigns each account to a regional server. KashCal stores the main iCloud address, so sync keeps working when Apple moves your account to another server. You never enter a server address. ## Managing or removing the account Tap the account under **Settings** → **Calendar accounts** to open its sheet. It has rename, the **Calendar** and **Contacts** switches, **Sync Now**, **Discover New Calendars**, **Change Password** and **Sign Out**. See [Managing your accounts](../index.md#managing-your-accounts). Contact sync has [its own page](../contacts.md). Use **Change Password** to enter a new app-specific password. Signing out removes the account's synced calendars from this device. Your events stay in iCloud. ## Trouble signing in? - Use an app-specific password, not your Apple ID password. - Enter the full email address of your Apple ID. - Changing your Apple ID password revokes your app-specific passwords. Create a new one, then use **Change Password**. - See [Sync troubleshooting](../../help/troubleshooting.md). --- # How sync works Source: https://kashcal.onekash.org/docs/sync/how-sync-works # How sync works KashCal is offline-first. Every change saves on your phone at once, and KashCal sends it to your server in the background. ## What works offline With no connection, you can: - View your events, as of the last sync - Create, edit and delete events - Change settings KashCal saves each change on your phone and queues it. When you're back online, it sends the queue to your server. If you pull down to refresh while offline, KashCal shows: > You're offline. Changes will sync when you're back online. ## When sync happens - When you open KashCal, and each time you come back to it from another app. - After every change to an event in an iCloud or CalDAV calendar. KashCal sends the change right away, or as soon as you're back online. - When you pull to refresh: pull down on any calendar view. - From a widget: tap the refresh button on the Today's Agenda, Week View or Upcoming widget. - In the background, on the **Sync frequency** schedule in [Settings](../features/settings.md#sync). With **Manual only**, background sync stops. Servers don't push changes to KashCal. A change made elsewhere appears at the next of these syncs. Sync on open runs quietly. Pull to refresh shows a spinner. The status strip at the top of the calendar ("Syncing calendars…") appears for the first sync of a new account and for a Force Full Sync, and ends with "Sync complete" or "Sync failed" and the reason. If any sync started while KashCal is open finishes but some calendars fail, the strip shows "Sync complete with errors", even for a quiet sync. ## What changed When a sync records changes in [Recent changes](#recent-changes), a message at the bottom of the screen sums them up, for example "New event: Team lunch", "3 events updated", "1 occurrence cancelled" or "5 calendar updates". Tap **View** to open **Recent changes**. ### Recent changes **Recent changes** lists what sync brought in from your iCloud and CalDAV calendars over the last 7 days: changes made outside KashCal on this phone, for example on another device, by someone you share a calendar with, or in an invitation an organizer sends or updates. Open it from the [account hub](../calendar/navigation.md#the-account-hub), or tap **View** on the sync message. Device calendars and ICS subscriptions aren't in it. - Rows are grouped by the day the change arrived: **Today**, **Yesterday**, then the date, newest first. - Each row shows the event's title, when it takes place, a dot in its calendar's color, and what changed: "Moved from" and the old time, **Time changed**, **Location changed**, **Title changed** or **Repeat changed**. A change to anything else, such as the notes, shows the row with no detail. One date of a repeating event that was deleted shows as **Cancelled**. - Tap a row to open the event's details. A repeating event's row opens its next occurrence, or the series start when none is left. A row for one changed date opens that date. Removed events, cancelled dates and events deleted since don't open. - Swipe a row to the left to dismiss it (to the right in right-to-left languages). A single row has no undo. - **Clear all** hides every row shown. Tap **Undo** in the row under the title to bring them back. The row goes after 4 seconds, or longer if you've asked Android for more time to take action, and closing the sheet ends it too. - A later change to an event updates its row, moves it under the day that change arrived and starts its 7 days again. A row you dismissed comes back this way. Not listed: a calendar's first sync, events that a full sync from Force Full Sync or from widening Sync lookback downloads for the first time, and changes only to an event's alarms, busy status or guests. ## Incremental and full sync To save battery and data, KashCal fetches only what changed since the last sync. When a server can't answer that, KashCal compares the whole calendar with the server on its own. To force a full download, open the [Advanced options](../help/advanced-options.md) menu (long-press the version number at the bottom of Settings) and tap **Force Full Sync**. KashCal asks first: > This will re-download all calendar data from the server. Local changes will be > preserved. Tap **Sync Now** to start. When the sync ends, a notification reports the result. The same menu has **Sync History**, which lists the sync sessions of the last 48 hours. ## How far KashCal syncs KashCal downloads all future events, up to the year 2100. For the past, it keeps one year by default. Set this with **Sync lookback** in [Settings](../features/settings.md#sync). Widening the lookback starts a full sync to fetch the older events. Narrowing it removes one-time events from your accounts and calendar feeds that ended before the new lookback. Repeating events and their changed occurrences stay, as do events with changes not yet sent, events in local calendars, and birthdays and anniversaries. The server keeps its copies. A feed that lists changed occurrences without their repeating event is the exception: those occurrences go when the earliest original date among them is before the new lookback. A calendar feed adds its older events back the next time it downloads a changed feed, and an account adds an older event back if it changes on the server. ## When your change and the server's copy differ If the event changed on the server after your last sync, the server refuses your change. KashCal then fetches the server's copy and applies your changes to it: each detail you changed (the time, the title, a guest you added or removed) takes your value, and everything else keeps the server's, such as a guest's reply or an edit made on another device. If the server refuses that version too, KashCal replaces your change with the server's version. If the event was deleted on the server, KashCal deletes it on your phone too. If KashCal can't get the server's version for three syncs, it drops your change and shows a notification. When one event is affected, the notification names it: > Local changes to "Team lunch" were lost due to sync conflict. Server version will be > used. A change that can't reach the server for 30 days is dropped the same way, and a notification tells you. ## If something goes wrong KashCal retries a failed sync on its own and waits longer between each try. If some events can't be read from the server, a notification says "Some events couldn't be synced" and names the calendar. For a connection that won't sync, see [Sync troubleshooting](../help/troubleshooting.md). --- # CalDAV (Nextcloud, Fastmail & more) Source: https://kashcal.onekash.org/docs/sync/providers/caldav # Connecting a CalDAV server Use this path for any CalDAV calendar service other than iCloud. That includes Nextcloud, Fastmail, Radicale, Baikal, Zoho, mailbox.org, Stalwart, SOGo, Infomaniak, Davis and Purelymail. For iCloud, see [Connecting iCloud](./icloud.md). ## Add the account 1. Open **Settings**, tap **Calendar accounts**, then tap **Add CalDAV**. 2. Fill in the fields: - **Server URL**: for example, `nextcloud.example.com`. Without a scheme, KashCal uses `https://`. - **Username**: your username for that service. - **Password**: your password, or an app password if the service offers one (see below). - **Display Name**: the name shown in Settings. KashCal fills it in from your username and server, such as `anna@Fastmail`. You can change it. It can't be blank, and no two accounts can share a name. 3. Tap **Connect**. KashCal finds your calendars and adds all of them. To hide a calendar you don't want to see, turn it off in the navigation drawer. ## Use an app password where the service offers one Nextcloud and Fastmail let you create an app password for connecting other apps. Use one instead of your main password. You can revoke it without changing your main password. Look in your provider's security settings to create one. ## How KashCal finds your calendars Enter the main server address. KashCal asks the server for its CalDAV location at the standard `.well-known/caldav` address. If that doesn't lead to your account, it tries the paths that Nextcloud, Baikal, Zoho, mailbox.org, Stalwart, Davis and other servers use. If your provider gives you a full CalDAV URL, you can enter that instead. ## Self-hosted servers (HTTP or self-signed certificates) - Plain HTTP: type `http://` at the start of the **Server URL**. Without it, KashCal connects over `https://`. - Self-signed certificate: turn on **Trust insecure connection** ("For self-signed certificates or local HTTP servers"). KashCal then accepts any certificate from that server. Use these only for servers you run yourself. For public services, keep `https://` and leave **Trust insecure connection** off. ### Servers on your home network Android 17 and later block apps from reaching devices on your local network until you allow it. When the **Server URL** is a private IP address such as `192.168.1.10` or a `.local` name, the sign-in screen shows a banner: > This server looks like it's on your local network. Allow local network access so > KashCal can connect to it. Tap **Allow access** to grant it, or **Not now** to hide the banner. The banner doesn't block the form. If you enter a hostname that points to your local network, the banner appears after a failed connection instead. ## Provider tips - Nextcloud: create an app password under *Settings → Security → Devices & sessions*. The server address is your Nextcloud domain. - Fastmail: create an app password with CalDAV access in your Fastmail settings. - Baikal and Radicale: for a self-hosted server on plain HTTP or with a self-signed certificate, see [Self-hosted servers](#self-hosted-servers-http-or-self-signed-certificates). Baikal servers that use Digest authentication work too. - Zoho, mailbox.org, Stalwart and SOGo: enter the server address and your username and password. KashCal tries the usual CalDAV paths of Zoho, mailbox.org and Stalwart, and works around known quirks of all four. ## Managing or removing the account Tap the account under **Settings** → **Calendar accounts** to open its sheet. It has rename, the **Calendar** and **Contacts** switches, **Sync Now**, **Discover New Calendars**, **Change Password** and **Sign Out**. See [Managing your accounts](../index.md#managing-your-accounts). Contact sync has [its own page](../contacts.md). Use **Change Password** after you change your password or create a new app password. Signing out removes the account's synced calendars from this device. Your events on the server stay there. ## Trouble connecting? - Check that the server address is correct and your phone can reach it. - If your provider offers app passwords, use one. - For a self-signed certificate, turn on **Trust insecure connection**. - If KashCal says "The server redirected the connection somewhere KashCal won't follow", the server sent KashCal from `https://` to a plain `http://` address, or through more than five redirects in a row. KashCal stops before sending your password. The message shows at sign-in, on **Change Password** and on **Discover New Calendars**. Check the **Server URL**. KashCal uses plain HTTP only for an account whose address starts with `http://`. - On Android 17 and later, for a server on your home network, allow local network access. - See [Sync troubleshooting](../../help/troubleshooting.md). --- # Supported servers Source: https://kashcal.onekash.org/docs/sync/supported-servers # Supported servers KashCal connects to calendar services that speak CalDAV, the open calendar standard. iCloud has its own sign-in screen. Every other CalDAV service connects through the [CalDAV setup](./providers/caldav.md), which tries the usual paths of common servers. ## Compatibility at a glance | Service | How to connect | What you'll need | |---------|----------------|------------------| | iCloud | [iCloud guide](./providers/icloud.md) | Apple ID and an app-specific password (not your Apple ID password) | | Nextcloud | [CalDAV guide](./providers/caldav.md) | Server address, username and an app password | | Fastmail | [CalDAV guide](./providers/caldav.md) | Server address, username and an app password | | Radicale | [CalDAV guide](./providers/caldav.md) | Server address, username, password | | Baikal | [CalDAV guide](./providers/caldav.md) | Server address, username, password (Digest authentication supported) | | Zoho | [CalDAV guide](./providers/caldav.md) | Server address, username, password | | mailbox.org | [CalDAV guide](./providers/caldav.md) | Server address, username, password | | Posteo | [CalDAV guide](./providers/caldav.md) | Server address, username, password | | Stalwart | [CalDAV guide](./providers/caldav.md) | Server address, username, password | | SOGo | [CalDAV guide](./providers/caldav.md) | Server address, username, password | | Infomaniak | [CalDAV guide](./providers/caldav.md) | Server address, username, password | | Davis | [CalDAV guide](./providers/caldav.md) | Server address, username, password | | Purelymail | [CalDAV guide](./providers/caldav.md) | Server address, username, password | | Any other CalDAV server | [CalDAV guide](./providers/caldav.md) | Server address, username, password | :::tip[Automatic discovery] For most servers, enter the main server address, like `nextcloud.example.com`, and KashCal finds your calendars. If it doesn't, enter the full CalDAV URL from your provider. If your service offers app passwords, use one instead of your main password. You can revoke it without changing your main password. ::: ## Google and Outlook KashCal doesn't sign in to Google or Outlook accounts. If the Google or Outlook app on your phone syncs those calendars, KashCal shows them next to your other calendars through [Device calendars](./device-calendars.md). Device calendars are off until you turn them on. You don't sign in again. ## Meeting invitations Sending and receiving meeting invitations depends on your server. Local calendars can't send invitations. Some servers, SOGo and mailbox.org among them, save your guests without sending them the invitation. See [Known limitations](../help/known-limitations.md#invitations-depend-on-your-calendar-account) before you rely on invitations for an important meeting. ## Self-hosted and local servers For a server you run yourself, such as Baikal or Radicale, type `http://` in the server address to use plain HTTP. For a self-signed certificate, turn on **Trust insecure connection** for that account. On Android 17 and later, a server on your home network also needs local network access. See the [CalDAV setup guide](./providers/caldav.md#self-hosted-servers-http-or-self-signed-certificates). ## Don't see your service? If your provider supports CalDAV, connect it through the [CalDAV setup](./providers/caldav.md). If it doesn't work, check [Sync troubleshooting](../help/troubleshooting.md), then [report it](../help/report-a-bug.md). --- # Contact sync (CardDAV) Source: https://kashcal.onekash.org/docs/sync/contacts # Contact sync If your calendar account also keeps your contacts, KashCal can sync them with your phone's address book, in both directions. This works with accounts that serve contacts over CardDAV, the contacts counterpart to CalDAV. iCloud offers it, and so do CalDAV servers such as Nextcloud. ## Turning it on 1. Open **Settings**, tap **Calendar accounts**, then tap the account. 2. In the sync section, below the **Calendar** switch, find the **Contacts** row ("Sync this account's contacts") with its **Beta** badge. It shows on every iCloud and CalDAV account, whether or not the server offers CardDAV. 3. Switch it on. The first time, Android asks for permission to read and write your contacts. Contact sync needs both. If you don't grant both, the switch stays off. 4. KashCal starts the first sync right away and shows "Syncing contacts for _account_" in the account sheet. The contacts go into your phone's own address book. They show up in your Contacts app, in the dialer and in other apps that read contacts, not only inside KashCal. ## What comes across Contact sync carries these parts of a contact: - Names, including phonetic spellings, nicknames, prefixes and suffixes - Phone numbers and email addresses, each with its label (home, work, mobile, or a custom one) - Postal addresses - Job title, role, company and department - Instant-messaging handles - Related people, such as a spouse, parent or friend - Websites, notes and the groups a contact belongs to - Birthdays and anniversaries - Contact photos ## Two-way sync (beta) Contact sync runs both ways and is marked **Beta** in the app. On your phone, edit a synced contact, delete one or change its photo, and KashCal sends the change to your server at the next sync. Changes made on the server, or in another app signed in to the same account, come down to your phone at the next sync. If an edit lands wrong on the server, [report it](../help/report-a-bug.md). ## When contacts sync - On the same schedule as calendar sync, set by **Sync frequency** in [Settings](../features/settings.md#sync). With **Manual only**, contacts sync only when you ask. - When you pull down to refresh on a calendar view. - When you tap **Sync Now** in the account sheet. ## If the permission is turned off If you turn off KashCal's Contacts permission in Android settings while contact sync is on, contacts stop syncing. After the next contact sync, or when you tap **Sync Now**, the account sheet shows "Contacts permission is off. Grant access to keep contacts syncing." with a **Grant access** button. Tap it to grant the permission again. ## Turning it off Switch the **Contacts** row off and KashCal removes that account's contacts from your phone. The account sheet tells you what happened: - Removed: "Device contacts for _account_ removed" - Kept because another login shares them: if another login for the same address still syncs those contacts, KashCal leaves them in place: "Contact sync off for _account_. Contacts stay because another login still syncs them." - Permission missing: if the Contacts permission is off, KashCal can't confirm the removal: "Contact sync off for _account_, but some device contacts may remain. Check the Contacts permission." ## Related - [How sync works](./how-sync-works.md): offline-first, and when sync happens - [Birthdays](../features/birthdays.md): show contact birthdays as calendar events - [Privacy & Security](../privacy/overview.md): what leaves your phone --- # Calendar feeds (ICS subscriptions) Source: https://kashcal.onekash.org/docs/sync/ics-subscriptions # Calendar feeds (ICS subscriptions) A calendar feed is a calendar someone else keeps up to date: public holidays, your team's fixtures, school terms, release dates. Feeds are free, read-only ICS links, not paid subscriptions. ## Add a holiday calendar The holiday catalog saves you hunting for a URL: 1. Open Settings → **Calendar feeds (ICS)**. 2. Tap **Add holiday calendar**. 3. Search for your country and tap it. KashCal checks that the feed can be reached, then subscribes. The catalog has 86 feeds for 77 countries, and seven countries come in more than one language. Countries you already follow are marked **Added**. Each holiday calendar is a regular feed and follows the rules on this page. :::note[Where these come from] The holiday calendars come from Mozilla Thunderbird's public holiday feeds, licensed under CC BY-SA 3.0. KashCal points at those feeds. It doesn't host the calendar data. ::: ## Add any other feed For a feed that isn't in the holiday catalog, such as a sports schedule or your school's term dates: 1. Open Settings → **Calendar feeds (ICS)**. 2. Tap **Add ICS Calendar**. 3. Paste the feed's address into **Calendar URL**. It starts with `http://`, `https://`, `webcal://` or `webcals://`. 4. Tap **Fetch Calendar**. KashCal downloads the feed and shows how many events it found, for example "Found: 42 events". If the feed can't be read, it shows the error instead. 5. Check the name KashCal filled in from the feed. To change the color, tap **Color:**. 6. Tap **Add**. **Add** stays disabled until the fetch succeeds. Every feed starts with a daily refresh. To change that, edit the feed after you add it (see [How often feeds refresh](#how-often-feeds-refresh)). If you already follow the same URL, KashCal doesn't add it again and shows "Already subscribed to this URL". ### webcal:// links Google Calendar, Apple Calendar and many holiday and sports sites have a Subscribe or Add to Calendar button that hands your phone a `webcal://` link. Tap one and open it with KashCal. The add sheet opens with the URL filled in. Tap **Fetch Calendar**, then **Add**. A `webcal://` address is the same feed as its `https://` version, so pasting either one gives the same events. ### Feeds on your home network On Android 17 and newer, apps need your permission to reach devices on your local network. When a feed's URL points to an address on your own network, or the fetch fails to connect, the add sheet shows a **Local network access needed** banner. Tap **Allow access** to grant it, or **Not now** to hide the banner. The banner doesn't block the form. Without the permission, KashCal can't reach a feed at an address like `192.168.1.10`. ## How often feeds refresh Each feed has its own refresh interval: - Every hour - Every 6 hours - Every 12 hours - Daily (the default) - Weekly To change it, tap the feed's row, pick an interval under **Sync Interval:**, then tap **Save**. A holiday calendar rarely changes, so weekly is enough. A feed that changes during the day suits a shorter interval. ## Feeds are read-only Events from a feed show up alongside your other calendars. You can't edit them in KashCal, because they belong to the source feed. ## Manage or remove a feed Each feed is a row on the **Calendar Feeds** screen: - Pause a feed: turn off the switch on its row. The row shows **Sync paused**. KashCal stops refreshing the feed. Its events stay on your calendar. To hide them, turn the calendar off in the navigation drawer. Turn the switch back on to refresh the feed. - Refresh a feed: tap the refresh button on the row to fetch its events without waiting for the next scheduled refresh. - Edit a feed: tap the row to change its name, color or refresh interval. - Remove a feed: swipe the row left. KashCal shows "Subscription removed". Tap **Undo** to keep the feed. Otherwise, when the message closes, KashCal deletes the feed's calendar and its events. ## Where to find feeds National holiday services, sports teams, school districts and event sites publish ICS links. Copy the feed's link and paste it into KashCal. --- # Device calendars Source: https://kashcal.onekash.org/docs/sync/device-calendars # Device calendars Your phone can already hold calendars from other apps: a Google account, an Outlook account, a work account. KashCal can show those calendars next to its own. This is how you bring Google and Outlook calendars into KashCal. Device calendars are off until you turn them on. ## Turn it on 1. Open **Settings**, then tap **Device calendars**. 2. Turn on the **Enable** switch. Android asks for calendar permission. KashCal asks to read and to write calendars at the same time. 3. Turn on each calendar you want with the switch on its row. Calendars are grouped by account, and all of them start off. The footer counts them, for example "2 / 5 enabled". 4. To hide an enabled calendar from your views without turning it off, tap its entry in the navigation drawer. If the permission is missing, the screen shows "Calendar permission required. Tap Enable to grant access." To look for calendars another app has added since, tap the refresh icon next to the heading. ## Read and write access With read permission only, KashCal shows the events but can't change them. The screen shows **Read-only access** with "Grant write permission to edit device calendar events" and **Grant**. Tap it to ask for write permission. Some calendars are read-only whatever you grant, because the app that owns them allows no changes. Each read-only calendar says why on its row: "Read only (no write permission)" or "Read only (calendar is read-only)". The quick view of a read-only event offers **Duplicate** and **Share** instead of **Edit** and **Delete**. ## What you can do with device events On a writable device calendar you can: - Create events. Pick the device calendar in the event form. - Edit events, including one occurrence, this and all future occurrences, or the whole series of a repeating event. - Move a one-time event to another device calendar. A repeating event stays in its calendar. - Delete events, with the same three choices for a repeating event. - Reply to invitations. See [Invitations](../events/invites.md). - Add [tags](../events/tags.md#tags-on-device-calendar-events). - [Import an .ics file](./import-export.md#import-into-a-device-calendar) into the calendar. The ⋮ menu in the event's quick view also has **Duplicate**, **Share as text** and **Export as .ics**. KashCal writes these changes to the phone's calendar storage. The app that owns the calendar, such as Google Calendar sync, sends them to its server. ## Reminders for device events KashCal sends reminders for device-calendar events too. The **Reminders** switch ("Get notified for device calendar events") is on the **Device calendars** screen, below the calendar list. It's on by default. See [Reminders](../events/reminders.md#device-calendar-reminders). ## How this differs from connecting an account Connecting an [iCloud](./providers/icloud.md) or [CalDAV](./providers/caldav.md) account makes KashCal sync those calendars with the server itself. **Device calendars** shows calendars that another app already syncs on your phone. You can use both at once, and pick whichever fits each calendar. Device calendars work in one direction. KashCal doesn't copy the events of its own calendars (Local, iCloud, CalDAV, feed and birthday calendars) into the phone's calendar storage, so other apps and launcher widgets that read that storage don't see them. Use [KashCal's widgets](../features/widgets.md) for those calendars. --- # Import & export (.ics files) Source: https://kashcal.onekash.org/docs/sync/import-export # Import & export KashCal reads and writes standard `.ics` calendar files. Use them to move events in or out, or to keep a copy of a calendar. ## Import an .ics file 1. Open **Settings**. Under **Backup & restore**, tap **Import events from file**, and pick an `.ics` file. 2. KashCal shows a preview of the events it found, with titles, dates and locations. 3. Choose the calendar to import into. The list shows only calendars you can write to. 4. Tap **Import**. For a file with one event, the sheet is titled **Add Event** and the button is **Add**. When the import finishes, KashCal shows how many events it added, for example "Imported 42 events". Events in the file that have no reminder get your default alerts, the same as events you create in KashCal. Reminders set in the file are kept. ### Open or share a file into KashCal Open an `.ics` file from your file manager or an email attachment and choose KashCal, or share the file to KashCal from another app. The same import preview opens. ### Import into a device calendar The calendar list can also show writable calendars from other apps on your phone: - From Settings, it shows every writable device calendar once KashCal has calendar permission. - From a file you open or share into KashCal, it shows only the device calendars you turned on. See [Device calendars](./device-calendars.md). ### When an import doesn't start KashCal shows an error instead of the preview when: - the file can't be read, - the file isn't a valid calendar file, or - the file has no events. If you have no calendar you can write to, the preview shows "No writable calendars available" and **Import** stays disabled. ### Repeating events and files from other apps A repeating event arrives as one linked series. Occurrences that were changed on their own land as exceptions attached to the series, the same way they would if you'd edited them in KashCal. Some apps export events with a missing or empty unique ID. KashCal gives each of those events its own ID, so they import as separate events and aren't folded into one series. Every imported event gets a fresh ID. Importing the same file twice adds a second copy and doesn't overwrite the first. ## Export to .ics To export your whole local calendar: 1. Open **Settings**. Under **Backup & restore**, tap **Export Local calendar**. 2. KashCal writes the calendar's events to an `.ics` file and opens the system share sheet, so you can save the file or send it. If the calendar has no events, KashCal shows "No events to export" and writes no file. To export one event, open it, tap the menu, and choose **Export as .ics**. This works for device calendar events too. ## Import vs. subscribe Importing copies events once into a calendar you can edit. For a feed that keeps updating itself, such as holidays or sports, use a [calendar feed subscription](./ics-subscriptions.md). --- # KashCal features Source: https://kashcal.onekash.org/docs/features # All features Every KashCal feature, with a link to its page. ## Viewing your calendar - **[Calendar views](../calendar/views.md)**: month, agenda, day, 3-day, week, full-month, and year, with pinch-to-zoom and drag-to-reschedule. - **[Navigation & shortcuts](../calendar/navigation.md)**: the drawer, the account hub, and home-screen shortcuts. - **[Widgets](./widgets.md)**: agenda, week, month, date, and upcoming widgets for your home screen. ## Creating events - **[Smart event add](../events/smart-event-add.md)**: type an event in plain language. - **[The event form](../events/event-form.md)**: every detail of an event on one screen, including its own time zone. - **[Recurring events](../events/recurring.md)**: repeating events and editing scopes. - **[Reminders](../events/reminders.md)**: alerts that still go off after you restart your phone. - **[Event colors](../events/colors.md)**: color-code your schedule. - **[Tags](../events/tags.md)**: label events by what they are, and manage tag colors and names in one place. - **[Scheduling & invitations](../events/attendees.md)**: invite people, send meeting invitations, and RSVP. - **[Invites](../events/invites.md)**: every invitation waiting on your reply, in one list. - **[Share an event as a card](./share-as-card.md)**: send an event as an image with a calendar file attached. ## Connecting calendars - **[The Local calendar](../getting-started/first-run.md#you-start-with-a-local-calendar)**: a calendar on your phone that works offline, with no account. - **[Sync & accounts](../sync/index.md)**: iCloud, CalDAV, feeds, and device calendars. - **[Supported servers](../sync/supported-servers.md)**: the full compatibility list. - **[Device calendars](../sync/device-calendars.md)**: show and edit the calendars already on your phone, such as Google or Outlook. - **[Calendar feeds](../sync/ics-subscriptions.md)**: subscribe to ICS feeds, or add a holiday calendar from the built-in list. - **[Import & export](../sync/import-export.md)**: open .ics files, and export your Local calendar or a single event. - **[Contact sync](../sync/contacts.md)**: sync contacts with your account both ways, including photos (beta). KashCal also opens .ics files and webcal:// links, and handles "Add to calendar" from other apps. ## Getting more from your time - **[Search](./search.md)**: search titles, locations, and notes, with date filters. - **[Insights](./insights.md)**: on-device figures on how you spend your time. - **[Share availability](./share-availability.md)**: send someone your free times as plain text. - **[Contact birthdays](./birthdays.md)**: birthdays and anniversaries from your contacts. ## Settings and privacy - **[Settings](./settings.md)**: every setting and its default. - **[Backup & restore](./backup-restore.md)**: save your settings to a file and restore them. - **[App lock](./app-lock.md)**: hide your calendar behind your fingerprint, face, or screen lock. - **[Languages](./languages.md)**: English plus 67 translations. - **[Privacy & Security](../privacy/overview.md)**: no tracking, no accounts, no KashCal servers. --- # Settings Source: https://kashcal.onekash.org/docs/features/settings # Settings KashCal works without changing any setting. When you want to change how the week starts, how times show, or how far back sync reaches, the options are on one screen. Tap the avatar in the top-right corner to open the [account hub](../calendar/navigation.md#the-account-hub), then tap **Accounts & Settings**. The screen has five sections, described below in the order they appear. ## How the Settings screen works - Picker rows show their current value on the right. On and off options use a switch. - Tapping a picker row opens a sheet from the bottom of the screen with every option. Tapping an option saves it and closes the sheet. - Some switch rows have an info button (ⓘ). Tap it to read what the setting does. It doesn't flip the switch. - To search, tap the search icon in the top bar and type in **Search settings…**. The list keeps only rows whose label or value matches, and highlights the match. A query that matches a section header keeps that whole section, so "appearance" finds every row under **Appearance**. If nothing matches, the screen says so. - Press Back once to clear the query, and again to close the search bar. If the keyboard is open, the first Back closes the keyboard. With a screen reader, each picker is announced as a group of radio buttons, so you hear which option is selected before you change it. ## Calendars & accounts - **Calendar accounts:** connect iCloud or a CalDAV server, and manage the accounts you have. See [Sync & Accounts](../sync/index.md). - **Birthdays & anniversaries:** show birthdays and anniversaries from your contacts. See [Birthdays](./birthdays.md). - **Calendar feeds (ICS):** subscribe to holiday, sports or school calendars by URL. See [Calendar feeds](../sync/ics-subscriptions.md). - **Device calendars:** show calendars from other apps on your phone. Once you turn them on, the row shows how many are enabled. See [Device calendars](../sync/device-calendars.md). ## Appearance Theme, accent color, app icon and widget colors live in the account hub, not here. See [Settings in the account hub](#settings-in-the-account-hub). - **Time format:** **System default**, **12-hour** or **24-hour**. Each choice shows the current time in that format. The default is **System default**. - **Start week on:** **System default**, **Sunday**, **Monday** or **Saturday**. This changes every calendar grid. The default is **System default**, which follows your phone's region. - **Widget event limit:** how many events each day shows in the home-screen widgets. Choose 3, 5, 8, 10 or 15. The default is 5 per day. - **Detailed widget rows:** show each event on two lines in the list widgets, the title above its start and end time, instead of one compact line. Off by default. See [Widgets](./widgets.md#two-lines-or-one). - **Show week numbers:** add a week-number column to the Month view and the month widget. Weeks are counted from your **Start week on** day, using your region's rule for the first week of the year. Off by default. - **Multi-day events in all-day strip:** in Day, 3 Days and Week, show a timed event that crosses midnight and lasts 20 hours or more in the all-day strip at the top, instead of in the timed grid. Off by default. - **Show declined events:** keep events you've declined on your calendar, dimmed with a strikethrough, instead of hiding them. Off by default. - **Event emojis:** put an emoji before an event's title based on its words, such as 🎂 for "Birthday" or ✈️ for "Flight", in the calendar views and in the agenda, week and upcoming widgets (the month widget shows plain titles). Titles that already contain an emoji stay plain. So do titles with words such as funeral, surgery, divorce or layoff. On by default. ## Event preferences - **Default calendar:** where new events go unless you pick another. Tap to choose from the calendars you can write to, grouped by account. Read-only calendars, such as feeds, aren't listed. - **Default event length:** how long a new event runs. Choose 15 minutes, 30 minutes, 1 hour or 2 hours. The default is 30 minutes. - **Timed event alert:** the reminder added to a new event that has a start time. The default is 15 minutes before. - **All-day event alert:** the reminder added to a new all-day event. The presets are **No reminder**, **Day of event**, 1 day before, 2 days before and 1 week before. Each preset alert fires at 9 AM (09:00). The sheet says so at the top. The default is 1 day before, at 9 AM. - **Smart event add:** turns on the natural-language capture box, so you can type "Coffee with Kash tomorrow 3pm" and get an event. Off by default. See [Smart event add](../events/smart-event-add.md). - **Suggest event titles:** as you type a title in the event form, suggests titles you've used before, ranked by how often and how recently you used them. On by default. **Default calendar** and both alert rows show once you have at least one calendar. :::note[Setting a custom alert] Both alert rows offer a list of presets plus **Custom**, which swaps in a scrolling duration wheel with a **Back** control to return to the presets. The wheel commits only when you tap **Done**, so scrolling it doesn't close the sheet or change anything on its own. If you open **Custom** and tap **Done** without scrolling, your existing alert stays as it was, including a value synced from another app that doesn't line up with the wheel's steps. For all-day events, the wheel sets a time before the start of the event's day, so a custom all-day alert can fire at a time other than 9 AM. ::: ## Sync Notification permission, which reminders need, is on the **App permissions** screen in the account hub. See [Reminders](../events/reminders.md). - **Sync frequency:** how often KashCal syncs in the background. Choose 15 or 30 minutes, 1, 6, 12 or 24 hours, or **Manual only** to sync only when you ask. The default is every hour. 15 minutes is the shortest interval Android allows for background work. - **Sync lookback:** how far into the past to sync events. Choose 3 months, 6 months, 1 year, 2 years, 5 years or **All events**. The default is one year. Widen it if you need older history on the phone. See [How sync works](../sync/how-sync-works.md) for what happens during a sync. ## Backup & restore - **Export Local calendar:** save your local events to an `.ics` file. - **Back up settings:** save your KashCal configuration to a JSON file. - **Import events from file:** add events from an `.ics` file to a calendar you can write to. - **Restore settings:** read your configuration back from a backup file. See [Backup & restore](./backup-restore.md) for what's included and what isn't. ## Settings in the account hub These settings are in the [account hub](../calendar/navigation.md#the-account-hub), not on the Settings screen: - Under **Make it yours**: **Theme**, **Accent color**, **App Icon**, **Widget theme** and **Widget accent**. See [Widgets](./widgets.md#colors-and-theme-together-or-apart) for the widget colors. - Under **Privacy & Security**: the **App lock** switch and the **App permissions** screen. See [App lock](./app-lock.md). :::note[Material You colors] With **Accent color** set to **Automatic**, KashCal uses your wallpaper's Material You colors. Pick any other accent and the app uses that color instead. Widgets use the app's accent while **Widget accent** is set to **Follow app**, the default. ::: At the bottom of the Settings screen, tap the KashCal version line to open a short sheet about the app. The line is hidden while you search. ## Related - [App lock](./app-lock.md): put a curtain over your calendar - [Reminders](../events/reminders.md): notifications that survive a reboot - [Sync & Accounts](../sync/index.md): connect and manage your calendars - [Backup & restore](./backup-restore.md): move to a new device --- # Home-screen widgets Source: https://kashcal.onekash.org/docs/features/widgets # Home-screen widgets The best calendar is the one you don't have to open. KashCal has five home-screen widgets. To add one, long-press your home screen, choose Widgets, and find KashCal. | Widget | What it shows | |--------|---------------| | **Today's Agenda** | Today's events in a list, all-day events first. When the day is empty, it shows "No events today" and "+ Add event"; tap it to add an event. Tap the "+ n more" line to open today in KashCal. | | **Week View** | Today and the next six days. Tap an empty day to add an event on that day, or a day's "more" line to open that day in KashCal. | | **Month View** | A month grid. When the widget is tall enough, each day names its events, like the in-app month view: a timed event is a tinted pill with its title, an all-day event a solid chip (tinted when it's marked free). When it's short, days show colored dots instead. The widget picks titles or dots from its height and your font size. A month with too many events to draw as titles shows dots. There is no setting. Single-letter day names run across the top, and today has a filled marker. With **Show week numbers** on, a week-number column runs down the left. | | **Date** | Today's date, styled like an app icon. It starts as a 1x1 icon and becomes a date card with the full weekday and month when you make it bigger. Tap it to open today in KashCal. | | **Upcoming** | The events of the next ten days, skipping empty days. It holds up to 100 rows. When the days don't all fit, the last row says how many days are left out; tap it to open today in KashCal. | Past events and cancelled events show dimmed and struck through in the agenda and week widgets. The upcoming widget leaves out events that have ended and shows cancelled ones dimmed and struck through. The widgets include events from [device calendars](../sync/device-calendars.md) you've turned on in KashCal. ## Tapping a widget - Tap an event in the agenda, week or upcoming widget to open it in KashCal. - Tap + on the agenda, week, month or upcoming widget to add an event. It opens the event form at the next full hour, or Smart event add when you've turned on **Smart event add** in Settings. - Tap the refresh button on the agenda, week or upcoming widget to start a sync. The button dims for a moment to show KashCal took the tap. - Tap the header title on the agenda, week or upcoming widget to open today in KashCal. - Tap a day's header in the week or upcoming widget to open that day in KashCal. ## Using the month widget - Page through months with the ‹ › arrows. - Tap the month title to go back to the current month. On the current month, the title opens today in KashCal. - In titles mode, each line of event titles in a week has two events you can tap to open: the first multi-day bar and the first single-day event. Other multi-day bars open the day where they start in that week. Other single-day events don't respond to a tap. Tap a day's empty space or its +n marker to open that day in KashCal. - In dots mode, tap a day to open that day in KashCal. The month widget follows **Show week numbers** and **Start week on** in Settings. When you change either, the widget updates. :::tip[Pick the right widget from the picker] On Android 15 and newer, each widget previews as itself in the system widget picker, so the agenda shows a sample day, the month shows a grid, and so on. You can tell them apart before you place one. ::: ## Keeping widgets current Widgets redraw: - when you add, change or delete an event in one of KashCal's calendars - after an account sync that brings changes - at midnight - when the time zone or the phone's clock changes - when you change a widget setting, the app's accent, the time format or the week settings - about every 30 minutes, as Android schedules it ## Colors and theme, together or apart By default your widgets follow the app's look. A calendar on your home screen can read differently from the one in your hand, so the widgets also have their own settings. Both are in the [account hub](../calendar/navigation.md#the-account-hub), under **Make it yours**: - **Widget theme:** **Follow app** matches the app's light or dark look. **Light** or **Dark** keeps the widgets in that look whatever the app or your phone uses. - **Widget accent:** **Follow app** matches the app's accent. **Automatic** uses your wallpaper's Material You colors. You can also pick a swatch from the grid (the first is **KashCal Teal**), or tap **More colors** for wheels with 92 named colors. Every widget recolors to match, including the + button. ## Two lines, or one By default the list widgets fit each event on one line: a color bar, the start time and the title. To see when events end, turn on **Detailed widget rows** in Settings, under **Appearance**. Each event then takes two lines: the title on top and its start and end time below. The time follows your 12- or 24-hour setting. This applies to the agenda, week and upcoming widgets. ## How many events show **Widget event limit** in Settings, under **Appearance**, sets how many events the agenda and week widgets show per day: 3, 5, 8, 10 or 15. The default is 5. Extra events collapse into a "more" line. The upcoming widget doesn't use this limit. ## Related - [Calendar views](../calendar/views.md): the same views, in the app - [Settings](./settings.md): widget event limit, detailed rows and week settings --- # Search Source: https://kashcal.onekash.org/docs/features/search # Search Search finds events by their words when you can't remember the date. Tap the search icon in the top bar, or long-press the KashCal app icon and choose **Search**. ## What it searches Search looks through event titles, locations, and notes. Results appear as you type, from the second character on, sorted by date. - Each word you type matches the start of a longer word. "dent" finds "Dentist". - More words narrow the results. Every word has to appear in the event. - Put words in quotes to find them together, in that order: "team meeting" finds "Team meeting" but not "Meeting with the team". In device calendars, Android runs the search. It also matches guest names and email addresses, and a word can match anywhere inside a longer word. Quotes don't group words there. Search covers the calendars that are visible in the navigation drawer, including [device calendars](../sync/device-calendars.md). A calendar you've hidden in the drawer isn't searched. If nothing matches, you see "No events found". ## Filter by date When you open search, no filter chip is selected and search shows upcoming events only. An event counts as upcoming while any of its occurrences hasn't ended. To find past events, tap **All**. The chips: - **All**: past and upcoming events. - **Week**: events in this week, from your first day of the week. - **Month**: events in this calendar month. - **Date**: pick a day or a range. Tap a day, then tap it again for that day alone, or tap another day for the range between them. The chip then shows the day or range you picked. Closing search clears the query and the filter. The next search starts with upcoming events again. ## Related - [Navigation](../calendar/navigation.md): get around the app - [Smart event add](../events/smart-event-add.md): add events by typing --- # Insights Source: https://kashcal.onekash.org/docs/features/insights # Insights Insights shows how much time your events take and where it goes. KashCal works it all out on your phone and sends nothing anywhere. Open **Insights** from the navigation drawer. ## Pick a period Tap a chip at the top: - **Week**: this week, from your first day of the week. - **Last week**: the week before. - **Month**: the whole calendar month, including the days still ahead. ## The summary The top of the screen shows: - The total hours of timed events in the period. - How many all-day events it has. All-day events don't count toward the hours. - On **Week**, the change from last week, such as "+2h 30m", when there is one. - A bar split by calendar, with each calendar's hours below it. - A chart of hours per day. Each day's bar is split into your calendars' colors, in the same order as the bar above: from the left on **Week** and **Last week**, from the bottom on **Month**. Only calendars you've made visible in the drawer count, device calendars included. A period with no events shows "No events scheduled this week". ## The cards Below the summary, KashCal shows up to 5 cards, the most notable first. The cards it can pick from: - Busiest day and lightest day, among the days that have events. - Longest free block: your longest gap of 30 minutes or more between 8 AM and 8 PM. - Weekend load: how much is scheduled on the weekend, or that it's clear. - Back-to-back meetings: how many events start less than 5 minutes after the previous one ends. - Calendar share: shown when your events span two or more calendars and one of them takes more than 60% of your time. - Early starts or late nights: how many days start before 8 AM, or how many run past 7 PM, whichever is more. - Meeting-free days: days with no timed events. When the period still has days ahead, you can also get: - Tomorrow: how much is scheduled tomorrow and when it starts. - Heaviest upcoming day: the fullest day still ahead. - Next free block: the longest gap of 30 minutes or more between 8 AM and 8 PM, from today on. ## Private by design Insights reads only the events already on your phone. It never uploads your schedule or sends analytics. See KashCal's [privacy approach](../privacy/overview.md). ## Related - [Share availability](./share-availability.md): send your free times to someone else - [Calendar views](../calendar/views.md): the seven ways to see your schedule - [Privacy & Security](../privacy/overview.md): what leaves your phone and what doesn't --- # Contact birthdays Source: https://kashcal.onekash.org/docs/features/birthdays # Contact birthdays & anniversaries KashCal can show the birthdays and anniversaries saved in your phone contacts on your calendar, each with a reminder. ## Turn it on Both switches are off by default. 1. Open **Settings**. Under **Calendars & accounts**, tap **Birthdays & anniversaries**. 2. Turn on either switch, or both: - **Contact Birthdays**: "Show birthdays from your phone contacts as all-day calendar events." - **Contact Anniversaries**: "Show anniversaries from your phone contacts as all-day calendar events." 3. If KashCal doesn't have Contacts permission yet, Android asks for it. Allow it, and the switch turns on. KashCal reads the dates from your device contacts: > Reads from your device contacts. Requires Contacts permission. If you turn off Contacts permission later, the screen shows **Contacts permission required**. ## What you get - Each birthday and anniversary appears as an all-day event that repeats every year. - They live in their own calendars, **Contact Birthdays** and **Contact Anniversaries**, under **Contacts** in the navigation drawer. - Titles read like "Sam's Birthday". When the contact's date includes the year, the title adds the age or the number of years, as in "Sam's 30th Birthday". - Once a switch is on, the screen shows how many events it found. ## Color and reminders After you turn on a switch, two more rows appear under it: - **Calendar Color**: the color of that calendar. Tap **Change** to pick another. - **Default Reminder**: when you get reminded. It starts at 9 AM on the day. Tap **Change** to pick another time. Birthdays and anniversaries each have their own color and reminder. :::note These calendars come from your contacts and are read-only in KashCal. To change a birthday, edit the contact. ::: ## Related - [Reminders](../events/reminders.md): how reminders work - [Contact sync](../sync/contacts.md): sync contacts with your account both ways, including photos (beta) - [Settings](./settings.md): every setting and its default --- # Backup & restore settings Source: https://kashcal.onekash.org/docs/features/backup-restore # Backup & restore settings KashCal saves your settings to a file and reads them back later. Use it to set up a new phone, or to keep a copy before you change a lot of options. A backup holds settings, not events. Your events come back when you add your accounts again. ## What's in a backup A backup is one JSON file. Its name is `kashcal-backup-` followed by the date and time. It holds: - Your preferences: calendar view and display options, time format, first day of the week, event defaults and default reminders, sync settings, theme and accent color, widget theme and accent color, widget options, notification sound and vibration, Smart event add and title suggestions, and the birthday and anniversary switches and reminders (not their calendar colors). - Share availability settings: the number of days, your working hours, and whether all-day events count. - Your avatar initials. - Tag colors: each tag you gave a color, with its name. - Your calendar feeds: each ICS feed's address, name, color, refresh interval, whether it's paused, and its username if it has one. - The device calendars switches: whether device calendars and their reminders are on. ## What's not in a backup - Account passwords. Your iCloud and CalDAV credentials are encrypted for this phone and never go in the file. On a new phone you sign in again. See [Privacy & Security](../privacy/overview.md). - Feed passwords. A feed's username comes back. On a new phone you enter its password again. - Which device calendars you picked. Those IDs belong to one phone. - Your default calendar. It points to a calendar on this phone, so you pick it again after a restore. - The **App lock** setting. Each phone has its own lock. - Events. They live on your accounts, or in the Local calendar. To move Local events, [export them to .ics](../sync/import-export.md#export-to-ics). - Internal state, such as last-sync times and which tips you've seen. ## Back up 1. Open **Settings**. 2. Under **Backup & restore**, tap **Back up settings** ("Save KashCal configuration to a JSON file"). 3. Pick where to save the file. ## Restore 1. Open **Settings**. 2. Under **Backup & restore**, tap **Restore settings** and pick your backup file. 3. KashCal shows **Restore backup?** with the KashCal version and the time the backup was made, plus what it will import. Tap **Restore**. 4. KashCal shows **Restore complete** when it's done. What a restore changes: - Each setting in the file replaces the one on the phone. - Feeds merge with the ones you have. A feed with the same address is updated from the file. A feed that isn't on the phone is added. No feed is removed. - Tag colors from the file are applied. A tag that isn't on the phone is added. If the backup turned on device calendars, the success message reminds you to select your device calendars again. KashCal refuses a file it can't read and shows **Restore failed** with the reason, such as a backup made by a newer version of KashCal. After restoring on a new phone, add your calendar accounts again. Your events come back with the first sync. ## Related - [Import & export](../sync/import-export.md): move events in and out as .ics files - [Settings](./settings.md): every setting and its default --- # App lock Source: https://kashcal.onekash.org/docs/features/app-lock # App lock App lock hides your calendar until you confirm it's you. Anyone who picks up your phone while it's open sees a lock screen instead of your events. ## What it does When App lock is on, KashCal opens to a **Locked** screen that covers all your events. Android's lock prompt appears right away. If you close the prompt, tap the button on the lock screen to bring it back. You confirm with your fingerprint, your face, or your screen lock (PIN, pattern or password). KashCal accepts only biometrics that Android rates as strong. If your phone's face recognition isn't rated strong, the prompt offers your fingerprint or screen lock instead. While KashCal is locked, its preview in the Recents screen is hidden. ## When it locks - Every time KashCal starts fresh. - When you come back after KashCal has been in the background for 30 seconds or more. A quick switch to another app and back, or rotating the phone, doesn't lock it again. Neither does a trip to KashCal's **Settings** or to an Android settings page that KashCal opens for you. ## Turn it on App lock is off by default. 1. Tap the avatar in the top-right of any calendar view to open the [account hub](../calendar/navigation.md#the-account-hub). 2. Under **Privacy & Security**, turn on **App lock**. KashCal confirms: > App lock on. KashCal will ask you to authenticate next time you open it. The lock takes effect the next time KashCal starts, or when you come back after 30 seconds or more away. It doesn't lock the screen you're on. If your phone has no fingerprint, face or screen lock set up, KashCal shows this message and opens Android's setup screen so you can add one: > Set up a fingerprint, face, or screen lock in system settings to use App lock. If your phone can't use any of them, KashCal shows: > This device can't use App lock. ## Turn it off Turn off **App lock** in the account hub. Android asks you to confirm it's you first, so someone holding your phone while KashCal is open can't switch it off. If you cancel, the lock stays on. If you remove every fingerprint, face and screen lock from your phone, KashCal stops asking and opens without a prompt, so you're never locked out. ## Good to know - App lock controls who can open KashCal on your phone. Your account passwords are stored encrypted whether App lock is on or off. See [Privacy & Security](../privacy/overview.md). - The App lock setting isn't included in [settings backups](./backup-restore.md). Each phone has its own lock, so you turn it on per phone. ## Related - [Privacy & Security](../privacy/overview.md): what leaves your device and what doesn't - [Backup & restore](./backup-restore.md): move your settings to a new device --- # Languages Source: https://kashcal.onekash.org/docs/features/languages # Languages KashCal comes in English plus 67 translations. Those include regional variants, such as Brazilian and European Portuguese, and Simplified and Traditional Chinese. ## How the language is chosen KashCal follows your phone's language. Change your phone's language and KashCal changes with it. On Android 13 and newer, you can give KashCal its own language: 1. Open Android Settings, then Apps, then KashCal. 2. Tap Language and pick one. KashCal then uses that language, whatever your phone's language is. KashCal has no language setting of its own. If KashCal has no translation for your exact regional variant, Android uses the closest language KashCal has, and falls back to English. ## What gets translated KashCal's own screens are translated, including the name of the built-in Local calendar. Exported `.ics` files keep the English name "Local", so other apps that read the file always see the same value. Your own content stays as you typed it. KashCal never translates event titles, notes, locations, or the names of calendars from your accounts. ## Help improve a translation Translations are part of the open-source project. If something reads awkwardly in your language, send a fix on [GitHub](https://github.com/KashCal/KashCal). ## Related - [Settings](./settings.md): appearance and formatting options - [First run](../getting-started/first-run.md): what to expect the first time you open KashCal --- # Share an event as a card Source: https://kashcal.onekash.org/docs/features/share-as-card # Share an event as a card Turn an event into a card and send it to anyone. The card goes out as an image with a calendar file attached, so the person you send it to can add the event to their own calendar in one tap. They don't need KashCal or an account. ## How to share 1. Tap an event to open its quick view. This works for device-calendar events too. 2. Tap the **Share as card** icon in the top row. 3. Pick a style: - **Standard** for everyday events. - **Celebration** for birthdays, parties and other occasions. KashCal picks **Celebration** for you when the title has a word like birthday, party, wedding, anniversary or graduation, or an emoji like 🎂 or 🎉. You can switch styles before you send. 4. Tap **Send** and choose where it goes: a message, an email, or any app that accepts shared files. For a repeating event, the card and the file describe only the occurrence you tapped. ## What the recipient gets - A card image with the event's title, date, time, and location if it has one. Its bottom line reads "Made with KashCal". - A calendar file (`.ics`) they can tap to add the event to their calendar app. If KashCal can't create the calendar file, it sends the card image on its own. ## What the card shares The calendar file is a single, standalone copy of the event. It keeps the title, date, time and time zone, notes, location, link, reminders, tags and color. It leaves out the guest list, the organizer and the repeat rule, so a card doesn't show who else is invited. :::caution[Check the notes before you send] The calendar file includes the event's notes. If the notes hold something private, such as a meeting link, a door code or a phone number, edit them out before you share the card. ::: ## Related - [Import & export](../sync/import-export.md): share events as .ics files - [Creating & editing events](../events/event-form.md): build the event first --- # Share availability Source: https://kashcal.onekash.org/docs/features/share-availability # Share availability Answering "when are you free?" means reading your calendar and typing out the gaps by hand. KashCal does that part. Pick how far ahead to look and what counts as your working hours, and it writes out your free blocks as plain text you can paste into any chat. Open the [account hub](../calendar/navigation.md#the-account-hub) by tapping the avatar in the top-right corner, then tap **Share availability**. ## Setting the window Two controls shape the answer: - **Window:** how many days to look at, from 1 to 14, counting the current day. The default is 7. Next to the Window heading, above the slider, a "Through" caption names the last day included, so you don't have to count. - **Working hours:** the span of each day to consider, shown as a strip of the whole 24 hours with your hours highlighted and the rest dimmed. Drag either end; it moves in half-hour steps. The default is 9:00 AM to 5:00 PM, and the caption reads out the length ("8 hour window"). The span can't be shorter than an hour. There's also **All-day events as busy**. It's off by default, so a birthday or an out-of-office marker doesn't wipe out your whole day. Turn it on and any day covered by a busy all-day event drops out of the summary. KashCal saves your choices, so the sheet opens the way you left it. Tap **Done** to close it. ## What gets counted KashCal looks at events in the calendars you have visible, so you control the answer by showing and hiding calendars in the navigation drawer. Hide your work calendar and you're sharing your personal availability. Every visible calendar counts: local, synced, feed and birthday calendars, and [device calendars](../sync/device-calendars.md) you've turned on. - Events marked as free rather than busy don't block a slot. - Only gaps of an hour or more are offered, so you don't send someone a list of fifteen-minute slivers. - On the current day, KashCal starts at the current time, so you never offer a time that has passed. If the rest of the day falls outside your working hours, the day drops out. ## The result A preview appears in the sheet as a chat bubble, showing the text the other person gets: ```text Free over the next 7 days (9:00 AM – 5:00 PM): Mon Jul 27: 9:00 AM – 11:00 AM, 2:00 PM – 5:00 PM Tue Jul 28: 11:30 AM – 5:00 PM Shared from KashCal ``` Days with no free time are left out rather than listed as empty. Tap **Share** to hand it to the Android share sheet, so it goes wherever you send things: a message, an email, a note to yourself. It's plain text, so the recipient has nothing to install or open. Times follow your **Time format** setting, so a 24-hour clock shares 24-hour times. If nothing in the range qualifies, the preview says so and **Share** stays off, so you can't send an empty summary by accident: > No free blocks of at least an hour in the selected range. ## Related - [Scheduling & invitations](../events/attendees.md): invite people and collect replies - [Insights](./insights.md): where your time goes - [Calendar views](../calendar/views.md): show and hide calendars --- # Privacy & Security Source: https://kashcal.onekash.org/docs/privacy/overview # Privacy & Security Your calendar is a record of your life: where you go, who you meet, what's coming up. KashCal is built to keep that record yours. :::tip[The short version] - No KashCal account and no KashCal servers. We have nowhere to put your data, and no way to reach it. - No tracking, no ads, no analytics. The app contains none of it. - Your data lives on your device. KashCal syncs it only with the servers and feeds you connect. - Your passwords are encrypted on your phone with a key held in the Android Keystore. - You can check all of this. The code is open source, and F-Droid builds it from that source. ::: ## Data safety at a glance App stores publish a "data safety" or privacy label for every app. Here's KashCal's, in the same terms: | Question | KashCal's answer | |----------|------------------| | Data collected | None. KashCal collects no personal data. | | Data shared with third parties | None. | | Data sent to KashCal | None. There are no KashCal servers. | | Where your data is stored | On your device, and on the calendar and contact servers you connect. | | Is data encrypted in transit? | Yes, over HTTPS, unless you type an `http://` address yourself (see [below](#everything-travels-encrypted)). | | Can you delete your data? | Yes. Remove an account to delete its data from your phone, or uninstall KashCal to delete all of it. Data on your own servers stays under your control there. | ## No accounts, no tracking, no KashCal servers - There is no KashCal account to create. You connect your own calendar servers, not ours. - No analytics, no telemetry, no advertising. KashCal contains no tracking SDKs and collects no usage data. It sends no crash reports. - No KashCal servers exist. Your data never reaches us, because there is nowhere to send it. There is nothing for us to collect, lose, or sell. ## What leaves your phone (and what doesn't) Your calendars and events are stored in a database inside KashCal's private app storage, which other apps can't read. KashCal connects only to these places: - Your calendar server (iCloud, Nextcloud, Fastmail, and so on). Your events go there: titles, times, locations, notes and guests. Your RSVP answers go there too. - Your contact server, if you turn on [contact sync](../sync/contacts.md). KashCal downloads the account's contacts and sends back the changes you make to them on your phone. It fetches contact photos only from the same domain as that server. - The feeds you subscribe to, fetched from the URL you gave. A holiday calendar you add from the built-in list is fetched from thunderbird.net, which hosts those feeds. - A certificate authority's server, in one case: when your server's HTTPS certificate is missing an intermediate certificate, KashCal downloads that certificate from the address named in the server's certificate. Other paths are Android's, not KashCal's own connections: - When you type a location of 5 or more characters, including a letter, in the event form, KashCal asks Android's geocoding service for address suggestions. Your phone's system provider answers that request. - If you turn on [device calendars](../sync/device-calendars.md), events you save to a Google, Outlook or work calendar are synced by the app that owns that calendar. - Contacts you sync go into your phone's address book, where other apps with Contacts permission can read them. - Android's own backup includes KashCal's event database and settings. Your passwords are left out. - Tapping a link opens your browser. KashCal's help, privacy and donate links go to kashcal.onekash.org, the license link under the holiday list goes to creativecommons.org, and the report button on a database error goes to GitHub. Tapping an address with no maps app installed opens openstreetmap.org. Contact birthdays, search, Insights and reminders are all computed on your device. ## Everything travels encrypted KashCal talks to your servers over HTTPS. A server address you enter without `http://` or `https://` becomes `https://`, and `webcal://` feed links open over HTTPS. Plain `http://` works only if you type it yourself, which you might do for a self-hosted server on your own network. For a server with a self-signed certificate, you can turn on **Trust insecure connection** when you add a CalDAV account. KashCal then accepts any certificate and any hostname from that server without checking them, so turn it on only for a server you control. ## How your passwords are protected Account passwords are encrypted on your device with AES-256-GCM. The encryption key is held in the Android Keystore, which is hardware-backed on devices that support it. Passwords are never stored in readable form, and they're left out of Android backups. Because the key is specific to your device, your saved credentials can't be lifted from a backup and used on another phone. The trade-off is that when you move to a new device, you re-enter your passwords. That's a deliberate security choice. ## Permissions, and why each is needed KashCal asks only for what its features require: | Permission | Why | |------------|-----| | Internet & network state | Sync your events with your calendar servers, and handle going offline and online | | Local network access | Reach self-hosted CalDAV servers on your home or office network (Android 17 and newer) | | Notifications | Show event reminders, invitations and sync status | | Exact alarms | Deliver reminders at the right minute | | Run after restart | Reschedule your reminders after a reboot | | Foreground service and wake lock | Let a sync finish in the background, with a progress notification while it runs | | Vibrate | Buzz on reminder notifications | | Read contacts | Suggest people when you add guests, show contact birthdays, and read contacts for contact sync | | Write contacts | Save your account's contacts to your phone's address book, for contact sync | | Read calendar | Show calendars from other apps on your phone | | Write calendar | Create, edit and delete events in those device calendars | | Read and write sync settings | Register KashCal's accounts with Android's sync system, and ask a device calendar's own app to sync | | Biometric | The optional [App lock](../features/app-lock.md) | KashCal asks for Notifications, Contacts, Calendars and Local network when you use a feature that needs them. You can decline, and the rest of the app keeps working. To review them in one place, open **App permissions** from the [account hub](../calendar/navigation.md#the-account-hub). It lists the four permissions Android asks you about: Notifications, Contacts, Calendars and Local network. Notifications shows from Android 13, and Local network from Android 17. The info button on each row explains why KashCal asks. A granted permission shows **Allowed**, and tapping its row opens its system setting. Otherwise, tap **Allow** to grant it. ## Don't take our word for it Privacy claims are only as good as your ability to check them. You can: - Read the code. KashCal is free and open source under the Apache-2.0 license. Anyone can read it, check these claims, and contribute, on [GitHub](https://github.com/KashCal/KashCal). - Check the build. Releases on F-Droid are compiled from that public source, so the app on your phone matches the code you can read. - Watch the network. Point a network monitor at KashCal and you'll see traffic go only to the places listed [above](#what-leaves-your-phone-and-what-doesnt). :::note[Want the details?] This page covers the essentials in plain language. For the formal version, read the full [Privacy Policy](./privacy-policy.md). ::: --- # Privacy Policy Source: https://kashcal.onekash.org/docs/privacy/privacy-policy # Privacy Policy *Effective September 27, 2026* :::note This is the detailed policy. For a plainer walkthrough of how KashCal protects your data, see [Privacy & Security](./overview.md). ::: ## Overview This Privacy Policy describes how OneKash Labs ("we," "us," or "our") handles information in connection with the KashCal mobile application ("the App"). KashCal stores all data locally on your device. Nothing is sent to us. This policy applies to all versions of KashCal distributed via Google Play, F-Droid, GitHub Releases, or direct APK download. ## Data Collection We do not collect any personal data. KashCal does not transmit telemetry, analytics, crash reports, usage statistics, or any other information to OneKash Labs or any third party. The App contains no third-party SDKs, advertising, or tracking code. There are no user accounts, no registration, and no server-side infrastructure that processes user information. We have no mechanism to access, retrieve, or view your data. ## Data Stored on Device The following data may exist locally on your device when using KashCal: - Calendars, events, and their details (titles, times, locations, notes, attendees). - Account settings and credentials for any calendar servers you connect. - App preferences and, if you enable them, calendar feed subscriptions. - Sync logs used for diagnostics. All of it stays on your device. You can remove any of it at any time (see [Retention & Deletion](#retention--deletion)). ## Calendar Sync **CalDAV sync.** When you configure a CalDAV account (iCloud, Nextcloud, and so on), calendar data flows directly between your device and the server you configure over encrypted HTTPS. KashCal does not proxy or intermediate this data. **ICS subscriptions.** External calendar feeds are fetched directly from the URLs you provide. No data passes through our infrastructure. **Contact birthdays.** With your permission, KashCal reads birthday dates from your contacts. This is processed entirely on-device and never transmitted. **Contact sync.** If you turn on contact sync, KashCal writes your account's contacts to Android's Contacts store, where other apps with Contacts permission can read them, and uploads contact changes you make on the phone to your account's server. **Other connections.** When you type a location, Android's address lookup (Geocoder, a network service run by Google or your phone's maker) suggests addresses. KashCal may download a missing intermediate certificate to complete a server's TLS certificate chain. The holiday calendar catalog fetches feeds from thunderbird.net. Third-party sync services you connect are governed by their own privacy policies. Review those policies before configuring sync. ## Permissions KashCal requests only the permissions its features require, and explains each one in context. No permission is used to collect, transmit, or share personal data. For a plain-language breakdown of each permission, see [Privacy & Security](./overview.md#permissions-and-why-each-is-needed). ## Security - **Credential encryption:** AES-256-GCM via the Android Keystore, with hardware-backed key storage where available. - **Transport security:** Network connections use TLS/HTTPS by default. Plaintext HTTP is used only if you deliberately enter an `http://` address for a self-hosted server; addresses without a scheme default to HTTPS. - **Backup exclusion:** Credentials are excluded from Android backup. The rest of KashCal's data, including sync logs, is included when Android backup is on. - **No remote access:** We cannot retrieve, view, or modify information on your device. As an open-source project, our security implementation is available for independent audit via our public repository. ## Retention & Deletion All data is stored locally, so you have full control over retention. You can delete your data at any time by: - Deleting individual events or calendars within the App. - Removing sync accounts from App settings. - Clearing App data via Android system settings. - Uninstalling the App. Sync logs are subject to automatic rotation. Because we do not store your data on our servers, there is no residual data on our end after uninstallation. ## Children's Privacy KashCal is not directed at children under the age of 13. We do not collect personal data from any user, including children. ## Changes to This Policy We may update this policy to reflect changes in the App or applicable regulations. Material changes will be noted in the App's release notes. Continued use of the App constitutes acceptance of changes. ## Contact Questions or concerns about this policy: - Email: [privacy@onekash.org](mailto:privacy@onekash.org) - GitHub: [KashCal Issues](https://github.com/KashCal/KashCal/issues) --- # Get Help Source: https://kashcal.onekash.org/docs/help # Get Help Stuck on something, or not sure KashCal can do a thing? Start with the pages below. They answer most questions faster than a reply on GitHub. In the app, tap **Help & docs** in the navigation drawer to open these pages in your browser. ## Start here 1. [FAQ](./faq.md): short answers to common questions. 2. [Troubleshooting](./troubleshooting.md): fixes for sync, reminders and other problems. 3. [Known limitations](./known-limitations.md): what KashCal doesn't do, so you know what to expect. 4. [Advanced options](./advanced-options.md): the hidden menu for a full sync and sync history. ## Still stuck? If the pages above don't answer it: - [Before you file a bug](./report-a-bug.md): what to include so the bug can be fixed. - [Requesting a feature](./request-a-feature.md): how to suggest an idea, and what's planned. :::tip[Why we ask] KashCal is a free, open-source project. When you check these pages first, your bug report or idea doesn't get lost among duplicates, and it reaches someone who can act on it sooner. Thanks for taking the time. ::: --- # FAQ Source: https://kashcal.onekash.org/docs/help/faq # Frequently asked questions {question: 'Is KashCal free? Is there a catch?', answer: "Yes, it's free and open source under the Apache-2.0 license. There's no paid tier, no ads, and no account to create. A donation is optional and never required, and nothing in the app is locked behind it."}, {question: 'Do I need to create a KashCal account?', answer: 'No. KashCal has no accounts and no servers. You connect your own calendar accounts (like iCloud or Nextcloud), and you can use the app fully offline with a local calendar even without connecting anything.'}, {question: 'Does KashCal track me or sell my data?', answer: "No. KashCal has no analytics, no telemetry and no advertising. KashCal itself sends your events only to the calendar servers you connect. Android's own backup can include KashCal's database."}, {question: 'Which calendar services does it work with?', answer: 'iCloud and any CalDAV server: Nextcloud, Fastmail, Radicale, Baikal, Zoho, mailbox.org, Stalwart, SOGo, and more.'}, {question: 'Does it work with Google Calendar or Outlook?', answer: 'Yes, through your phone. Google removed third-party CalDAV access and Outlook does not expose CalDAV, so both come in as device calendars: let the Google or Outlook app sync those calendars to your phone, then turn on device calendars in KashCal settings.'}, {question: 'Is KashCal on the Google Play Store?', answer: 'Yes. KashCal is on Google Play, and also on F-Droid, IzzyOnDroid, Obtainium, and GitHub Releases. It is the same free, open-source, no-account app on every channel.'}, {question: 'Does KashCal support CardDAV, tasks, or attachments?', answer: "CardDAV (contacts): yes, both ways, in beta. Contact sync syncs the contacts on your iCloud or CardDAV account with your phone's address book. For calendars, KashCal handles events only (VEVENT). It doesn't do VTODO tasks, journals or attachments, and it skips calendars that hold only VTODO or VJOURNAL items during sync."}, {question: 'Why will my iCloud password not work?', answer: 'iCloud requires an app-specific password, not your normal Apple password. Create one at account.apple.com and use that to connect.'}, {question: 'Can I use KashCal offline?', answer: 'Yes, it is offline-first. You can view and edit events with no connection, and your changes sync when the phone is back online.'}, {question: 'Why is background sync not more frequent than 15 minutes?', answer: 'That is an Android system limit for background work. It is the shortest automatic interval the platform allows. You can always pull down to refresh for an immediate sync.'}, {question: 'What Android version do I need?', answer: 'Android 12 or newer. KashCal targets Android 17.'}, {question: 'How do I move to a new phone?', answer: "Back up your settings and restore them on the new phone. Add your calendar accounts again: the backup doesn't hold accounts or passwords, by design. Your events come back with sync. Export your Local calendar and import the file on the new phone, and select your device calendars again if you use them."}, ]} /> ## Is KashCal free? Is there a catch? Yes, it's free and open source under the Apache-2.0 license. There's no paid tier, no ads and no account to create. If you want to chip in, a [donation](/donate) helps keep the releases coming. It's never required, and nothing in the app is locked behind it. ## Do I need to create a KashCal account? No. KashCal has no accounts and no servers of its own. You connect your *own* calendar accounts, such as iCloud or Nextcloud. Or you use the Local calendar offline without connecting anything. ## Does KashCal track me or sell my data? No. KashCal has no analytics, no telemetry and no advertising. KashCal itself sends your events only to the calendar servers you connect. Android's own backup can include KashCal's database. For everything that leaves the phone, see [Privacy & Security](../privacy/overview.md). ## Which calendar services does it work with? iCloud and CalDAV servers: Nextcloud, Fastmail, Radicale, Baikal, Zoho, mailbox.org, Stalwart, SOGo and others. See [Supported servers](../sync/supported-servers.md). ## Does it work with Google Calendar or Outlook? Yes, through your phone. KashCal connects directly to iCloud and CalDAV servers. Google removed third-party CalDAV access, and Outlook and Microsoft 365 don't expose CalDAV at all (they use Exchange ActiveSync and Microsoft Graph). So both come in as device calendars: 1. Let the Google or Outlook app sync your calendars to the phone. 2. In KashCal, open **Settings**, then tap **Device calendars**. 3. Turn on **Enable** and allow calendar access. 4. Turn on the calendars you want. Device calendars are off until you do this. See [Device calendars](../sync/device-calendars.md). ## How can I contribute? You can improve the documentation, review translations, or send pull requests for issues and feature requests. Read the [Code of Conduct](https://github.com/KashCal/KashCal?tab=coc-ov-file#readme) and the [Contribution guidelines](https://github.com/KashCal/KashCal?tab=contributing-ov-file) to get started. ## How do I report a security vulnerability? Report it privately through [GitHub Security Advisories](https://github.com/KashCal/KashCal/security/advisories/new), not in a public issue. The [security policy](https://github.com/KashCal/KashCal?tab=security-ov-file) has the details. ## Is there a roadmap? Yes. Follow what's planned on the [public roadmap](https://github.com/orgs/KashCal/projects/5). Post general questions and ideas in [GitHub Discussions](https://github.com/orgs/KashCal/discussions). ## Is KashCal on the Google Play Store? Yes. You can [get KashCal on Google Play](https://play.google.com/store/apps/details?id=org.onekash.kashcal), and it's also on [F-Droid, IzzyOnDroid, Obtainium, and GitHub Releases](../getting-started/install.md). It's the same free, open-source, no-account app on every channel, with no ads or trackers added anywhere. ## Why do builds from different sources have different signatures? Each channel signs with a different key. F-Droid signs its builds with its own key, Google Play re-signs with a Google-managed key (Play App Signing), and GitHub Releases use the upstream key (the cert SHA-256 is published in the [README](https://github.com/KashCal/KashCal#readme)). Android won't install a build over one signed with another key. To switch sources, uninstall first, and uninstalling clears everything stored only on the phone. Back up your settings and export your Local calendar as .ics before you switch. To verify the GitHub APK, use [AppVerifier](https://github.com/soupslurpr/AppVerifier) or Obtainium with the cert SHA-256 from the README. ## Does KashCal support CardDAV, tasks, or attachments? CardDAV (contacts): yes, both ways, in beta. [Contact sync](../sync/contacts.md) syncs the contacts on your iCloud or CardDAV account with your phone's address book: names, numbers, emails and photos. Edits and deletions on the phone go back to the account. For calendars, KashCal handles events only (VEVENT). It doesn't do VTODO tasks, journals or attachments. It skips calendars that hold only VTODO or VJOURNAL items during sync. ## Can I use Syncthing instead of a CalDAV server? No. To carry your setup to another phone, [back up your settings](../features/backup-restore.md), which include your ICS feeds, and restore them there. To bring Local events along, [export them as .ics](../sync/import-export.md#export-to-ics) and import the file. ## Why won't my iCloud password work? iCloud requires an app-specific password, not your normal Apple password. See the [iCloud setup guide](../sync/providers/icloud.md). ## Can I use KashCal offline? Yes, it's offline-first. You can view and edit events with no connection. Your changes sync when the phone is back online. See [How sync works](../sync/how-sync-works.md). ## Where are my events stored? In a database in KashCal's private storage on your phone. Events on a connected account also live on that account's server. If Android backup is on, your phone's backup includes that database too. See [Privacy & Security](../privacy/overview.md). ## Why isn't my background sync more frequent than 15 minutes? Android doesn't run periodic background work more often than every 15 minutes, so that's the shortest automatic interval. Pull down to refresh to sync right away. ## What Android version do I need? Android 12 or newer. KashCal targets Android 17. If you self-host, reaching a CalDAV server on your own network needs the [local network permission](../sync/providers/caldav.md#servers-on-your-home-network) on Android 17. ## How do I get reminders to work? Allow KashCal to send notifications. When you save an event with a reminder from the event form and the permission isn't granted, KashCal asks for it. KashCal doesn't ask for an alarm permission: Android grants exact alarms to it at install. See [Reminders](../events/reminders.md). Syncing a calendar doesn't ask. If you've only synced and haven't saved an event with a reminder yet, KashCal hasn't asked, and reminders on your synced events stay silent. To allow notifications, open the [account hub](../calendar/navigation.md#the-account-hub), then **App permissions**. ## Can I send meeting invitations? Yes, when your calendar account supports scheduling. Local-only calendars can't send them, and some accounts don't support inviting people at all. Some servers, SOGo and mailbox.org among them, save your guests without notifying them. See [Known limitations](./known-limitations.md). ## How do I move to a new phone? 1. [Back up your settings](../features/backup-restore.md) and restore them on the new phone. 2. Add your calendar accounts again. The backup doesn't hold accounts or passwords, by design. Your events come back with sync. 3. [Export your Local calendar](../sync/import-export.md#export-to-ics) and import the file on the new phone. 4. If you use device calendars, select them again. --- # Troubleshooting Source: https://kashcal.onekash.org/docs/help/troubleshooting # Troubleshooting Fixes for the common problems. If none of these solve yours, see [Before you file a bug](./report-a-bug.md). ## Sync isn't working Start with a sync right away: pull down on a calendar view. Pull to refresh works when you're online and have an iCloud or CalDAV account connected. Then check the basics: - Are you online? KashCal queues your changes while you're offline and sends them when you reconnect. - Is **Sync frequency** set to **Manual only** in Settings? If so, KashCal syncs only when you ask. For iCloud, sign in with an app-specific password, not your normal Apple password. If you changed your Apple password, generate a new app-specific one. See [iCloud setup](../sync/providers/icloud.md). For CalDAV servers, check the server address, username and password. If your provider offers an app password, use that. See [CalDAV setup](../sync/providers/caldav.md). For a self-hosted server: - Plain HTTP: type `http://` at the start of the server address. - Self-signed certificate: turn on **Trust insecure connection** when you sign in. - A server on your home network, on Android 17 and later: allow local network access. See [Self-hosted servers](../sync/providers/caldav.md#self-hosted-servers-http-or-self-signed-certificates). To see what happened, open **Sync History** in [Advanced options](./advanced-options.md). It lists the sync sessions of the last 48 hours and any failures. Still wrong? Tap **Force Full Sync** in the same menu, then **Sync Now**. KashCal downloads everything again and keeps your local changes. ## Some events are missing - Check **Sync lookback** in [Settings](../features/settings.md#sync). KashCal doesn't download events older than that window. - Make sure the calendar is shown: its checkbox in the navigation drawer is on. - Calendars from Google, Outlook and other apps on your phone come in through [Device calendars](../sync/device-calendars.md). They stay off until you turn them on and pick each calendar. - [Contact birthdays](../features/birthdays.md) missing? Some phones, Realme among them, don't share with other apps the birthdays of contacts saved only on the phone, even though their contacts app shows them. Save the contact to a synced account, such as your Google account, and the birthday appears in KashCal. ## Reminders aren't firing - Grant notification permission. Open the [account hub](../calendar/navigation.md#the-account-hub), then **App permissions**. - Turn off battery optimization for KashCal, in Android Settings > Apps > KashCal > Battery. Samsung, Xiaomi, Oppo and OnePlus phones cut off background work, which stops reminders from firing. [dontkillmyapp.com](https://dontkillmyapp.com) has steps for each brand. - Reminders are exact alarms and arrive on the minute. On Android 12 and 12L, check that "Alarms & reminders" is on for KashCal in Android's app settings; with it off, KashCal uses inexact alarms, which Android can deliver late while the phone is idle. - After a restart, KashCal schedules your reminders again on its own. See [Reminders](../events/reminders.md). ## Invitations aren't being sent Sending invitations needs an account that supports scheduling. The Local calendar, and an account with no email address for you, can't invite people. A local device calendar keeps guests but can't notify them. Some servers, SOGo and mailbox.org among them, save your guests without notifying them. See [Known limitations](./known-limitations.md#invitations-depend-on-your-calendar-account). ## A calendar feed isn't updating - Check the feed's refresh interval. A feed set to **Weekly** updates once a week. - Check that the feed isn't paused. A paused feed shows **Sync paused** on its row. Turn on its switch to resume it. - If the last refresh failed, the row shows the error in red. - Tap the refresh button on the feed's row to fetch it right away. - Open the feed URL in a browser to check that it still works. - Feed events are read-only. Changes have to come from the source. See [Calendar feeds](../sync/ics-subscriptions.md). ## I lost my events after reinstalling Events from your accounts live on your servers. After you reinstall, add your accounts again and the events sync back. Events in the Local calendar aren't on a server or in a settings backup. [Export them to .ics](../sync/import-export.md#export-to-ics) before you uninstall. To restore your settings and feeds, use a [settings backup](../features/backup-restore.md). ## Capturing logs for a bug report For a sync problem, copy your Sync History: 1. Open Settings, scroll to the bottom and long-press the version line (**KashCal v...**). 2. Tap **Sync History**. 3. Tap the copy button at the top of the sheet, then paste the text into your issue. The text includes your calendar names, so check it before you post it. See [Advanced options](./advanced-options.md#copying-or-clearing-the-history). For a problem with device calendars, capture Android's logs with [Logcat Reader](https://f-droid.org/packages/com.dp.logcatapp) from F-Droid: 1. Open Logcat Reader, then Filter, then set "Tag contains" to `CalProviderRepo OR DisplayEventRepo OR CalProviderManager`. 2. Start recording. 3. Open KashCal and reproduce the problem. 4. 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. --- # Known limitations Source: https://kashcal.onekash.org/docs/help/known-limitations # Known limitations KashCal leaves some things out on purpose. Others depend on how your server works. This page lists both. ## Invitations depend on your calendar account Sending and receiving meeting invitations needs a calendar account that supports scheduling (the CalDAV scheduling extension). Not every server supports it, and some support only part of it: - KashCal's own Local calendar can't invite people. Neither can an account when KashCal finds no email address for you on it, such as a server login like `alice` on a server that reports no address. In place of the guest list, the event form shows this, except when you edit a repeating event: > Inviting people isn't available on this account - A calendar on your phone that no sync app manages (a local device calendar) keeps the guests you add but can't notify them. The event form shows: > This calendar can't send invitations. Guests are saved but won't be notified. Tap the close button on the notice to hide it. - A few servers accept guests but never deliver the invitation. SOGo and mailbox.org are the ones we've seen. They save your guests without sending anyone an email, and they don't report this back, so KashCal can't warn you in advance. The guests are on the event, but nobody is notified. Other calendar apps behave the same way: when a server won't deliver, sending the invite is up to you. iCloud delivers invitations. - Your reply might not reach the organizer on some servers. A few servers expect the app to deliver RSVP replies itself. On those, KashCal saves your answer, but the organizer might not get it. iCloud delivers replies for you. ## RSVP to a recurring event covers the whole series When you answer an invitation to a repeating event, your reply applies to the whole series, not one occurrence. KashCal shows: > Your reply applies to the whole series. This is because not every calendar server supports per-occurrence responses. An occurrence that the organizer changed on its own is the exception: your reply to it applies to that occurrence only, and the notice doesn't show. ## Account passwords don't transfer between devices Your saved passwords are encrypted with a key that stays on your phone. They aren't included in Android backups or in a KashCal settings backup. On a new phone, you sign in again. See [Privacy & Security](../privacy/overview.md). ## Background sync runs at most every 15 minutes This is an Android limit for background work, not a KashCal choice. Pull down on a calendar view to sync right away. ## Calendar feeds are read-only You can't edit events from an [ICS subscription](../sync/ics-subscriptions.md) in KashCal. They belong to the source feed. ## Contact sync is two-way (beta); tasks and journals aren't synced KashCal is an events app first. It reads and writes calendar events (the `VEVENT` part of the calendar standard). It also syncs contacts in both directions: - Contacts (CardDAV) sync both ways, in beta. KashCal syncs the contacts on your iCloud or CalDAV account with your phone: edits, deletes and photos go in both directions. See [Contact sync](../sync/contacts.md). It's a beta, so report anything that looks wrong. Separately, KashCal can read birthdays and anniversaries from your phone's contacts. See [Contact birthdays](../features/birthdays.md). - Contact sync rides on a calendar account. KashCal finds your address book from the account you added for your calendars. For a CalDAV account other than Zoho's zoho.com service, it looks up your email domain's CardDAV service in DNS (an SRV record), or else starts from your calendar server's address. Then it tries the standard `/.well-known/carddav` path and your account's principal. If your provider keeps contacts on a server that none of these lead to, KashCal won't find your contacts, even when your calendars sync. - No tasks or to-dos (VTODO), journals or attachments. KashCal skips calendars that hold only tasks or journal entries when it syncs, so they don't show up empty. This keeps the app focused and fast. ## Google and Outlook connect through your phone, not directly KashCal connects to iCloud and CalDAV servers directly. Google and Microsoft don't offer that kind of access. Google removed third-party CalDAV access, and Outlook and Microsoft 365 don't offer CalDAV at all. So both come in through **Device calendars** instead. If the Google or Outlook app syncs those calendars to your phone, KashCal can show them, and edit them when the calendar allows it. Device calendars are off until you turn them on in Settings. See [Device calendars](../sync/device-calendars.md) and the [FAQ](./faq.md#does-it-work-with-google-calendar-or-outlook). ## Other services need CalDAV or an ICS link KashCal connects through two open standards: CalDAV for accounts and ICS for feeds. It can't connect to a service that offers neither. If a service, such as a school timetable system, offers an ICS link, add it as a [calendar feed](../sync/ics-subscriptions.md). If it has only its own app, and that app syncs to your phone's calendar, use [Device calendars](../sync/device-calendars.md). ## KashCal's own calendars stay out of the phone's calendar storage Other apps and launcher widgets don't see events from KashCal's own calendars. See [Device calendars](../sync/device-calendars.md#how-this-differs-from-connecting-an-account). ## Device-calendar tags aren't all in Manage tags **Manage tags** lists a device-calendar tag only after you add it in KashCal and save the event. See [Tags](../events/tags.md#tags-on-device-calendar-events). ## Calendar colors are set where the calendar lives You can't recolor an iCloud, CalDAV, device or Local calendar in KashCal. Change it on the server or in the app that owns the calendar, or give events their own color. See [Calendar colors](../events/colors.md#calendar-colors). ## One time zone per event The event form sets one time zone for both the start and the end. For a flight across zones, create one event per leg. See [Creating & editing events](../events/event-form.md#what-you-can-set). ## Smart event add reads English [Smart event add](../events/smart-event-add.md#what-you-can-type) understands English words only. Numeric dates and times work in any language. ## Snooze is 15 minutes, and a restart clears fired reminders KashCal's snooze length is fixed, and a reminder that has fired isn't shown again after the phone restarts. See [Reminders](../events/reminders.md#when-a-reminder-fires). ## Views are the seven built in KashCal has Month, Agenda, Day, 3 Days, Week, Month (Full) and Year views, plus Insights. There's no multi-month grid (like a 3- or 6-month view). KashCal uses the Gregorian calendar only, with no other calendar systems (such as Hijri or lunar). ## Updates can't cross install sources KashCal comes from Google Play, F-Droid, IzzyOnDroid, Obtainium and GitHub Releases, and they don't all sign the app with the same key. Google Play and F-Droid sign their builds with their own keys. The GitHub Releases, IzzyOnDroid and Obtainium APKs share KashCal's own key. Android won't install an update signed with a different key. To switch sources, say from F-Droid to the GitHub APK, you have to uninstall first, which deletes the app's data on your phone. Before you switch: 1. [Back up your settings](../features/backup-restore.md). 2. Events in the Local calendar aren't on a server or in a settings backup. [Export them to .ics](../sync/import-export.md#export-to-ics). After you install from the other source, restore the backup, import the .ics file and add your accounts again. If you use device calendars, pick them again. Staying on one source updates normally. --- If something you expected to work isn't listed here or in [Troubleshooting](./troubleshooting.md), it may be a bug. See [Before you file a bug](./report-a-bug.md). --- # Advanced options Source: https://kashcal.onekash.org/docs/help/advanced-options # Advanced options KashCal keeps two diagnostic tools out of the way of everyday use. Use them when sync misbehaves and you want to see what happened or start over. ## Opening the menu 1. Open **Settings** and scroll to the bottom. 2. Long-press the version line ("KashCal v" followed by the version number) at the bottom. A sheet titled **Developer Options** opens. A short tap on the version line opens a short sheet about the app instead, with a **Keep it that way** donation button and a link to kashcal.onekash.org. ## What's in it - **Force Full Sync** re-downloads all calendar data from your servers. KashCal first asks **Force Full Sync?** Tap **Sync Now** to start, or **Cancel**. Your local changes are kept. - **Sync History** lists the sync sessions of the last 48 hours, up to 200 of them. Each session shows its calendar, how many events were pushed and pulled, and any failures. Tap a session for details such as its duration, skipped events and warnings. ## Copying or clearing the history The **Sync History** sheet has two icon buttons at the top: - The copy button (two overlapping pages) copies the history as text. Paste it into a [bug report](./report-a-bug.md) for a sync problem. The text includes your calendar names, so check it before you share it. - The trash can button clears all sessions right away, with no confirmation. :::note[Sync frequency] How often background sync runs is set in Settings, under **Sync**, with the **Sync frequency** row. See [Settings](../features/settings.md#sync). ::: ## When you'd use it - A change isn't showing up or a calendar seems stuck, and you want a fresh pull: **Force Full Sync**. - You're chasing a sync problem and want to see what happened: **Sync History**. --- # Before you file a bug Source: https://kashcal.onekash.org/docs/help/report-a-bug # Before you file a bug Found something broken? Thanks for reporting it. A clear report gets fixed faster, so go through this checklist first. ## Check these first - [ ] I've read the [FAQ](./faq.md). - [ ] I've tried the steps in [Troubleshooting](./troubleshooting.md). - [ ] I've checked [Known limitations](./known-limitations.md) to confirm this isn't expected behavior. - [ ] I've installed any available KashCal update. - [ ] I've searched [existing issues](https://github.com/KashCal/KashCal/issues) to see if it's already reported. ## What to include The more of this you give, the better: 1. What happened, and what you expected instead. 2. Steps to reproduce: the exact sequence that causes it. 3. How often it happens: every time, or only sometimes? 4. Your KashCal version. It's the line that starts with "KashCal v" at the bottom of Settings. 5. Your Android version and device model. 6. Where you installed KashCal from: Google Play, F-Droid, IzzyOnDroid, Obtainium, GitHub Releases or your own build. 7. For a sync problem, which calendar service is involved (iCloud, Nextcloud and so on), and your copied Sync History. See [Capturing logs for a bug report](./troubleshooting.md#capturing-logs-for-a-bug-report). Never include your password or full email address. 8. Screenshots, if they help show the problem. :::warning[Protect your privacy] Never put passwords, app-specific passwords or full account details in a public bug report. Describe the provider ("an iCloud account") instead of pasting credentials. Sync History includes your calendar names, so check it before you paste it. ::: ## Where to file it Open an issue on the [KashCal GitHub issue tracker](https://github.com/KashCal/KashCal/issues) and choose the Bug Report form. KashCal is open source, and the issue tracker is the one place where bugs are triaged and fixed. --- # Requesting a feature Source: https://kashcal.onekash.org/docs/help/request-a-feature # Requesting a feature Ideas are welcome. Here's how to share one so it's most likely to land. ## First, a quick check - [ ] I've confirmed KashCal doesn't do this already (browse the [features](../features/index.md)). - [ ] I've checked [Known limitations](./known-limitations.md) in case it's a deliberate choice. - [ ] I've searched [existing issues](https://github.com/KashCal/KashCal/issues) for the same idea. If it exists, add a 👍 or a comment instead of opening a duplicate. ## What makes a good request - The problem, not only the solution. Describe what you're trying to do and why. That often leads to a better answer than a specific implementation idea. - A concrete example. "When I do X, I'd like Y to happen" is easier to act on than a general wish. - How often it affects you, and whether you have a workaround. ## Where to suggest it Open an issue on the [KashCal GitHub issue tracker](https://github.com/KashCal/KashCal/issues) and choose the Feature Request form. It asks for the problem, your proposed solution, the area of the app and any alternatives you considered. ## A note on scope KashCal aims to be a focused, fast, private calendar, not to do everything. Some good ideas get declined to keep the app coherent and maintainable. That's not a rejection of you; it's how the project stays healthy. Thanks for understanding, and for caring enough to suggest improvements. ---