<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="rss.xsl"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>KashCal Blog</title>
        <link>https://kashcal.onekash.org/blog</link>
        <description>KashCal Blog</description>
        <image><url>https://kashcal.onekash.org/img/logo.png</url><title>KashCal Blog</title><link>https://kashcal.onekash.org/blog</link></image>
        <lastBuildDate>Thu, 03 Sep 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[KashCal is on Google Play, trackers not included]]></title>
            <link>https://kashcal.onekash.org/blog/kashcal-on-google-play</link>
            <guid>https://kashcal.onekash.org/blog/kashcal-on-google-play</guid>
            <pubDate>Thu, 03 Sep 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[KashCal is now on the Google Play Store, still free, open source, and tracker-free, and still on F-Droid and GitHub too.]]></description>
            <content:encoded><![CDATA[<p>People kept asking if KashCal was on Google Play. Now it is.</p>
<!-- -->
<p>It's the same app that's been on F-Droid and GitHub. Same <a class="" href="https://kashcal.onekash.org/docs/privacy/overview">privacy</a>, too: no account, no ads, nothing sent to us.</p>
<p>Mostly, we want to say thanks. To the people who installed KashCal early, reported the bugs we swore weren't there, sent patches, and <a class="" href="https://kashcal.onekash.org/donate">donated</a> to keep it going.</p>
<p>Get it on Google Play, or <a class="" href="https://kashcal.onekash.org/docs/getting-started/install">anywhere else</a> you'd rather.</p>
<a href="https://play.google.com/store/apps/details?id=org.onekash.kashcal"><img src="https://kashcal.onekash.org/img/badges/get-it-on-google-play.png" alt="Get it on Google Play" style="height:56px;width:auto"></a>]]></content:encoded>
            <category>Announcements</category>
        </item>
        <item>
            <title><![CDATA[Every permission KashCal uses, in one place]]></title>
            <link>https://kashcal.onekash.org/blog/app-permissions-one-place</link>
            <guid>https://kashcal.onekash.org/blog/app-permissions-one-place</guid>
            <pubDate>Tue, 11 Aug 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Android 17 made reaching your local network its own permission. Implementing that, we noticed KashCal's permissions were scattered across the app, so we added one screen that lists them all: what each is for, and whether it is on.]]></description>
            <content:encoded><![CDATA[<p>Android 17 added a welcome permission optimization. Reaching a device on your local network, like a calendar server on a machine in your house, is now its own permission, separate from internet access. An app that can reach the internet no longer reaches your home network by default; it has to ask for that on its own.</p>
<p>KashCal needs it for one thing: syncing with a <a class="" href="https://kashcal.onekash.org/docs/sync/supported-servers">CalDAV server on your own network</a>. We implemented the new permission, and while wiring it up we noticed KashCal's permissions had ended up spread out, each one surfaced only where its feature lived: contacts near birthdays, notifications near reminders, and now local network near sync. There was nowhere to see them all at once.</p>
<p>So we put them all on one screen. It is called <strong>App permissions</strong>, and it is in your account hub.</p>
<!-- -->
<div style="display:flex;justify-content:center;margin:2.5rem 0"><div style="width:322px;border-radius:46px;padding:9px;background:linear-gradient(150deg, #34373e 0%, #14161a 55%, #0a0b0e 100%);box-shadow:0 40px 70px -28px rgba(0,0,0,0.6)"><div style="border-radius:38px;overflow:hidden;background:#FEF7FF;color:#1D1B20;font-family:'Roboto', 'Noto Sans', 'Segoe UI', system-ui, -apple-system, sans-serif"><div style="display:flex;align-items:center;justify-content:space-between;padding:0.65rem 1.35rem 0.3rem;font-size:0.82rem;font-weight:500;letter-spacing:0.01em"><span>9:30</span><span style="display:inline-flex;align-items:center;gap:0.4rem"><svg viewBox="0 -960 960 960" width="15" height="15" fill="#1D1B20" style="display:block" aria-hidden="true"><path d="M120-120v-240h120v240H120Zm200 0v-400h120v400H320Zm200 0v-560h120v560H520Zm200 0v-720h120v720H720Z"></path></svg><svg viewBox="0 -960 960 960" width="16" height="16" fill="#1D1B20" style="display:block" aria-hidden="true"><path d="M480-120 0-600q95-77 214.5-118.5T480-760q146 0 265.5 41.5T960-600L480-120Z"></path></svg><span style="display:inline-flex;align-items:center"><span style="width:22px;height:12px;border:1.5px solid #1D1B20;border-radius:3px;display:inline-flex;align-items:center;padding:1.5px"><span style="width:80%;height:100%;background:#1D1B20;border-radius:1px"></span></span><span style="width:2px;height:5px;background:#1D1B20;margin-left:1.5px;border-radius:0 2px 2px 0"></span></span></span></div><div style="display:flex;align-items:center;gap:1.1rem;padding:0.7rem 1.1rem 1rem"><svg viewBox="0 -960 960 960" width="24" height="24" fill="#1D1B20" style="display:block;flex-shrink:0" aria-hidden="true"><path d="m313-440 224 224-57 56-320-320 320-320 57 56-224 224h487v80H313Z"></path></svg><span style="font-size:1.32rem;font-weight:400">App permissions</span></div><div style="display:flex;align-items:center;gap:1.1rem;padding:0.85rem 1.35rem"><svg viewBox="0 -960 960 960" width="24" height="24" fill="#49454F" style="display:block;flex-shrink:0" aria-hidden="true"><path d="M160-200v-80h80v-280q0-83 50-147.5T420-792v-28q0-25 17.5-42.5T480-880q25 0 42.5 17.5T540-820v28q80 20 130 84.5T720-560v280h80v80H160ZM480-80q-33 0-56.5-23.5T400-160h160q0 33-23.5 56.5T480-80Z"></path></svg><span style="flex:1;font-size:1rem;line-height:1.25">Notifications</span><span style="display:inline-flex;align-items:center;gap:0.75rem"><svg viewBox="0 -960 960 960" width="20" height="20" fill="#79747E" style="display:block;flex-shrink:0" aria-hidden="true"><path d="M480-280q17 0 28.5-11.5T520-320v-160q0-17-11.5-28.5T480-520q-17 0-28.5 11.5T440-480v160q0 17 11.5 28.5T480-280Zm0-320q17 0 28.5-11.5T520-640q0-17-11.5-28.5T480-680q-17 0-28.5 11.5T440-640q0 17 11.5 28.5T480-600Zm0 520q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Z"></path></svg><span style="display:inline-flex;align-items:center;gap:0.35rem;color:#49454F;font-size:0.85rem;font-weight:500"><svg viewBox="0 -960 960 960" width="18" height="18" fill="currentColor" style="display:block" aria-hidden="true"><path d="M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z"></path></svg>Allowed</span></span></div><div style="display:flex;align-items:center;gap:1.1rem;padding:0.85rem 1.35rem"><svg viewBox="0 -960 960 960" width="24" height="24" fill="#49454F" style="display:block;flex-shrink:0" aria-hidden="true"><path d="M0-240v-63q0-43 44-70t116-27q13 0 25 .5t23 2.5q-14 21-21 44t-7 48v65H0Zm240 0v-65q0-32 17.5-58.5T307-410q32-20 76.5-30t96.5-10q53 0 97.5 10t76.5 30q32 20 49 46.5t17 58.5v65H240Zm540 0v-65q0-26-6.5-49T754-397q11-2 22.5-2.5t23.5-.5q72 0 116 26.5t44 70.5v63H780ZM160-440q-33 0-56.5-23.5T80-520q0-34 23.5-57t56.5-23q34 0 57 23t23 57q0 33-23 56.5T160-440Zm640 0q-33 0-56.5-23.5T720-520q0-34 23.5-57t56.5-23q34 0 57 23t23 57q0 33-23 56.5T800-440Zm-320-40q-50 0-85-35t-35-85q0-51 35-85.5t85-34.5q51 0 85.5 34.5T600-600q0 50-34.5 85T480-480Z"></path></svg><span style="flex:1;font-size:1rem;line-height:1.25">Contacts</span><span style="display:inline-flex;align-items:center;gap:0.75rem"><svg viewBox="0 -960 960 960" width="20" height="20" fill="#79747E" style="display:block;flex-shrink:0" aria-hidden="true"><path d="M480-280q17 0 28.5-11.5T520-320v-160q0-17-11.5-28.5T480-520q-17 0-28.5 11.5T440-480v160q0 17 11.5 28.5T480-280Zm0-320q17 0 28.5-11.5T520-640q0-17-11.5-28.5T480-680q-17 0-28.5 11.5T440-640q0 17 11.5 28.5T480-600Zm0 520q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Z"></path></svg><span style="display:inline-flex;align-items:center;gap:0.35rem;color:#49454F;font-size:0.85rem;font-weight:500"><svg viewBox="0 -960 960 960" width="18" height="18" fill="currentColor" style="display:block" aria-hidden="true"><path d="M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z"></path></svg>Allowed</span></span></div><div style="display:flex;align-items:center;gap:1.1rem;padding:0.85rem 1.35rem"><svg viewBox="0 -960 960 960" width="24" height="24" fill="#49454F" style="display:block;flex-shrink:0" aria-hidden="true"><path d="M200-80q-33 0-56.5-23.5T120-160v-560q0-33 23.5-56.5T200-800h40v-80h80v80h320v-80h80v80h40q33 0 56.5 23.5T840-720v560q0 33-23.5 56.5T760-80H200Zm0-80h560v-400H200v400Zm0-480h560v-80H200v80Z"></path></svg><span style="flex:1;font-size:1rem;line-height:1.25">Calendars</span><span style="display:inline-flex;align-items:center;gap:0.75rem"><svg viewBox="0 -960 960 960" width="20" height="20" fill="#79747E" style="display:block;flex-shrink:0" aria-hidden="true"><path d="M480-280q17 0 28.5-11.5T520-320v-160q0-17-11.5-28.5T480-520q-17 0-28.5 11.5T440-480v160q0 17 11.5 28.5T480-280Zm0-320q17 0 28.5-11.5T520-640q0-17-11.5-28.5T480-680q-17 0-28.5 11.5T440-640q0 17 11.5 28.5T480-600Zm0 520q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Z"></path></svg><span style="display:inline-flex;align-items:center;gap:0.35rem;color:#49454F;font-size:0.85rem;font-weight:500"><svg viewBox="0 -960 960 960" width="18" height="18" fill="currentColor" style="display:block" aria-hidden="true"><path d="M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z"></path></svg>Allowed</span></span></div><div style="display:flex;align-items:center;gap:1.1rem;padding:0.85rem 1.35rem"><svg viewBox="0 -960 960 960" width="24" height="24" fill="#49454F" style="display:block;flex-shrink:0" aria-hidden="true"><path d="M480-120 0-600q95-77 214.5-118.5T480-760q146 0 265.5 41.5T960-600L480-120Z"></path></svg><span style="flex:1;font-size:1rem;line-height:1.25">Local network</span><span style="display:inline-flex;align-items:center;gap:0.75rem"><svg viewBox="0 -960 960 960" width="20" height="20" fill="#79747E" style="display:block;flex-shrink:0" aria-hidden="true"><path d="M480-280q17 0 28.5-11.5T520-320v-160q0-17-11.5-28.5T480-520q-17 0-28.5 11.5T440-480v160q0 17 11.5 28.5T480-280Zm0-320q17 0 28.5-11.5T520-640q0-17-11.5-28.5T480-680q-17 0-28.5 11.5T440-640q0 17 11.5 28.5T480-600Zm0 520q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Z"></path></svg><span style="display:inline-flex;align-items:center;height:36px;padding:0 1.15rem;border-radius:999px;background:#0e6e62;color:#FFFFFF;font-size:0.85rem;font-weight:500;letter-spacing:0.01em">Allow</span></span></div><div style="display:flex;justify-content:center;padding:1rem 0 0.55rem"><span style="width:116px;height:4px;border-radius:2px;background:#1D1B20;opacity:0.4"></span></div></div></div></div>
<div style="text-align:center;font-size:0.85rem;opacity:0.65;margin-top:0.8rem"><p>The App permissions screen: every permission KashCal uses, the reason behind each ⓘ, and whether it is on.</p></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="where-it-is">Where it is<a href="https://kashcal.onekash.org/blog/app-permissions-one-place#where-it-is" class="hash-link" aria-label="Direct link to Where it is" title="Direct link to Where it is" translate="no">​</a></h2>
<p>Tap your initials in the top right to open the <a class="" href="https://kashcal.onekash.org/docs/calendar/navigation#the-account-hub">account hub</a>, then look under the <strong>Privacy &amp; Security</strong> section. "App permissions" opens a full screen listing every permission KashCal can use, one row each. If you moved to Android 17 and your sync to a local server needs switching back on, this is where you do it.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-each-permission-is-for">What each permission is for<a href="https://kashcal.onekash.org/blog/app-permissions-one-place#what-each-permission-is-for" class="hash-link" aria-label="Direct link to What each permission is for" title="Direct link to What each permission is for" translate="no">​</a></h2>
<p>The reason for a permission sits with the permission, not in a policy page you have to go find. Tap the info icon on any row and it says, in one sentence, what that access gives you. These are the words in the app:</p>
<ul>
<li class=""><strong>Notifications.</strong> So KashCal can remind you about your events. Without it, reminders stay silent.</li>
<li class=""><strong>Contacts.</strong> Suggests guests as you add people to an event, and shows contact birthdays. Your contacts stay on your device.</li>
<li class=""><strong>Calendars.</strong> Shows events from the other calendars on your device next to your own.</li>
<li class=""><strong>Local network.</strong> Reaches a calendar server on your home or office network. Android 17 asks for this separately from internet access.</li>
</ul>
<p>Each reason names a feature you use. Turn a permission off and only that feature stops. The rest of the app keeps working.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="granting-and-changing-your-mind">Granting, and changing your mind<a href="https://kashcal.onekash.org/blog/app-permissions-one-place#granting-and-changing-your-mind" class="hash-link" aria-label="Direct link to Granting, and changing your mind" title="Direct link to Granting, and changing your mind" translate="no">​</a></h2>
<p>Each row ends in one of two things. A permission is either <strong>Allowed</strong>, with a check next to it, or it shows an <strong>Allow</strong> button.</p>
<p>If it is already granted, tapping the row takes you to that permission's own page in Android settings. Not the general app screen, the exact one: Notifications lands on notification settings, the rest on the app's permission details. Adjust it there, come back, and the list updates to match, because it re-reads the current state each time it opens.</p>
<p>If a permission is off, Allow requests it in the app. And if you had earlier told Android not to ask again, Allow takes you straight to the settings page for that permission, so even one you fully denied is a tap away from turning back on.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="only-what-applies-to-your-phone">Only what applies to your phone<a href="https://kashcal.onekash.org/blog/app-permissions-one-place#only-what-applies-to-your-phone" class="hash-link" aria-label="Direct link to Only what applies to your phone" title="Direct link to Only what applies to your phone" translate="no">​</a></h2>
<p>The list shows only the permissions that apply to your version of Android. Notifications became a permission you grant in Android 13, so on older phones there is no such row. Local network is new in Android 17, so it appears only there.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-list-does-not-ask-for-anything">The list does not ask for anything<a href="https://kashcal.onekash.org/blog/app-permissions-one-place#the-list-does-not-ask-for-anything" class="hash-link" aria-label="Direct link to The list does not ask for anything" title="Direct link to The list does not ask for anything" translate="no">​</a></h2>
<p>Opening it requests nothing. KashCal still asks for a permission when a feature first needs it, contacts when you turn on birthdays, calendar access when you connect a device calendar, with the reason in front of you and the option to decline. The screen is for reviewing and adjusting the whole set afterward.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="next-to-how-your-data-stays-yours">Next to "How your data stays yours"<a href="https://kashcal.onekash.org/blog/app-permissions-one-place#next-to-how-your-data-stays-yours" class="hash-link" aria-label="Direct link to Next to &quot;How your data stays yours&quot;" title="Direct link to Next to &quot;How your data stays yours&quot;" translate="no">​</a></h2>
<p>Right below App permissions is a link called <strong>How your data stays yours</strong>. A permission list tells you what KashCal can do on your phone. The privacy page tells you what it does with any of it: <a class="" href="https://kashcal.onekash.org/docs/privacy/overview">no account, no server, no trackers</a>, events in a database only KashCal can read, and passwords encrypted with a key that stays on your device. Every permission maps to a feature, and because the app is open source, the full list is in the manifest for anyone to read.</p>]]></content:encoded>
            <category>Privacy</category>
            <category>Behind the scenes</category>
        </item>
        <item>
            <title><![CDATA[What makes a good calendar?]]></title>
            <link>https://kashcal.onekash.org/blog/what-makes-a-good-calendar</link>
            <guid>https://kashcal.onekash.org/blog/what-makes-a-good-calendar</guid>
            <pubDate>Mon, 10 Aug 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Someone asked us what makes a calendar good. Not a feature list: a good calendar is a pleasure to open, gathers all your calendars in one place, and stays yours.]]></description>
            <content:encoded><![CDATA[<p>Someone asked us the other day, "What makes a good calendar?" Not which app, not
which features. Just: what makes one <em>good</em>. We started to answer with a list and
stopped, because a list is the easy version of the question and a bad answer to it.
So we sat with it for a while.</p>
<p>Here's the short version of where we landed. You reach for a calendar in small,
unglamorous moments, to jot down that the dishes are your job tonight or that the
dentist moved you to Thursday. A good one makes those moments easier and doesn't add
a chore of its own. Everything below is a version of that idea, and you can see each
part of it in KashCal.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="its-a-pleasure-to-open-not-a-chore">It's a pleasure to open, not a chore<a href="https://kashcal.onekash.org/blog/what-makes-a-good-calendar#its-a-pleasure-to-open-not-a-chore" class="hash-link" aria-label="Direct link to It's a pleasure to open, not a chore" title="Direct link to It's a pleasure to open, not a chore" translate="no">​</a></h2>
<p>You'll open your calendar thousands of times this year. It should be a small pleasure
each time, not something you brace for. So a good calendar cares how it looks and how
it moves, because that's most of how it feels to use.</p>
<p>KashCal is built on Material 3 with full <strong>Material You</strong> support, so on Android 12
and newer it takes its colors from your wallpaper and looks like it belongs on your
phone, not ported from something older. It runs edge to edge. Its dark mode is <a class="" href="https://kashcal.onekash.org/features/beautiful-calendar-android">designed
dark</a>, not a washed-out flip of the light one.
Scrolling, pinching, and swiping move the way the rest of your phone does. The small
touches add up: type "lunch" and it finds you a plate, press and drag an event to a
new time, pinch the timeline to stretch the hours to the density you like.</p>
<p>And it gives you the day in whatever shape you need. <a class="" href="https://kashcal.onekash.org/docs/calendar/views">Seven
views</a>, each built for a real job: a readable agenda for the
morning, an hour-by-hour day for a busy one, the whole month when you're planning
ahead, a year when you're looking further out. You switch between them in a tap.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="it-gets-out-of-your-way">It gets out of your way<a href="https://kashcal.onekash.org/blog/what-makes-a-good-calendar#it-gets-out-of-your-way" class="hash-link" aria-label="Direct link to It gets out of your way" title="Direct link to It gets out of your way" translate="no">​</a></h2>
<p>The best calendar is the one you barely have to open. Every time you stop to consult
it is a small tax on the plan you were making. So the good ones fade into the
furniture.</p>
<p>KashCal puts your day where you're already looking: a <a class="" href="https://kashcal.onekash.org/docs/features/widgets">home-screen
widget</a> that shows today at a glance, so "am I free Thursday?"
is answered without opening anything at all. When you do open the app, it's there
right away, on the day you're on, ready for the next thing. It gets in, does the job,
and leaves you alone.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="it-shows-you-your-whole-life-not-a-slice-of-it">It shows you your whole life, not a slice of it<a href="https://kashcal.onekash.org/blog/what-makes-a-good-calendar#it-shows-you-your-whole-life-not-a-slice-of-it" class="hash-link" aria-label="Direct link to It shows you your whole life, not a slice of it" title="Direct link to It shows you your whole life, not a slice of it" translate="no">​</a></h2>
<p>Your days don't live in one place. Family plans are on iCloud, work is on a server
your company runs, holidays came from a link you subscribed to years ago, and
birthdays are hiding in your contacts where you'll forget them until the day after.
A calendar that only knows about one of those isn't showing you your schedule. It's
showing you a corner of it and letting you assume that's all there is.</p>
<p>A good calendar gathers the corners. KashCal puts iCloud, <a class="" href="https://kashcal.onekash.org/docs/sync/supported-servers">any CalDAV
server</a>, the calendars other apps already keep on your
phone, <a class="" href="https://kashcal.onekash.org/docs/features/birthdays">birthdays from your contacts</a>, and <a class="" href="https://kashcal.onekash.org/docs/sync/ics-subscriptions">subscribed
feeds</a> onto one screen, then gets out of the way. The
point isn't the length of that list. It's that after you connect them once, you stop
holding the running total in your head.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="it-lets-you-write-like-a-person">It lets you write like a person<a href="https://kashcal.onekash.org/blog/what-makes-a-good-calendar#it-lets-you-write-like-a-person" class="hash-link" aria-label="Direct link to It lets you write like a person" title="Direct link to It lets you write like a person" translate="no">​</a></h2>
<p>Nobody thinks in form fields. You think "coffee with Sam tomorrow at 3," and then a
calendar makes you translate that into a title box, a date picker, a start time, an
end time, and a save button. That translation is friction, and friction is where
plans go to die.</p>
<p>A good calendar meets you in plain language. In KashCal you type <a class="" href="https://kashcal.onekash.org/docs/events/smart-event-add"><em>"Coffee with Sam
tomorrow 3pm"</em></a> and watch it turn into a real event as
you go, the title, the date, and the time each landing where they belong. Type
<em>"Standup every weekday at 9am"</em> and it repeats. What matters isn't how clever that is
under the hood. It's that you can catch a plan in the two seconds before it slips your
mind.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="it-doesnt-live-in-someone-elses-cloud">It doesn't live in someone else's cloud<a href="https://kashcal.onekash.org/blog/what-makes-a-good-calendar#it-doesnt-live-in-someone-elses-cloud" class="hash-link" aria-label="Direct link to It doesn't live in someone else's cloud" title="Direct link to It doesn't live in someone else's cloud" translate="no">​</a></h2>
<p>For most calendars, the app on your phone is a window onto an account somewhere else.
Your events live on a company's servers, and the phone shows you a copy. It only
exists because you signed in, and the day you stop signing in, it's empty.</p>
<p>KashCal starts from the other end. Your calendar lives on your device, and it works
with no account at all: install it, start adding events, done. Connect iCloud or a
<a class="" href="https://kashcal.onekash.org/docs/sync/supported-servers">CalDAV server</a> when you want your events on your other
devices, and KashCal is <a class="" href="https://kashcal.onekash.org/docs/sync/how-sync-works">offline-first</a> about it, so
everything you do lands on the phone the instant you do it and catches up with your
server later. A plane, a basement, a dead signal, none of it stops you from writing
down a plan. The sync is something you add to a calendar that already works, not the
thing holding it up.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="its-yours">It's yours<a href="https://kashcal.onekash.org/blog/what-makes-a-good-calendar#its-yours" class="hash-link" aria-label="Direct link to It's yours" title="Direct link to It's yours" translate="no">​</a></h2>
<p>That independence has a quieter payoff. A calendar knows your interviews, your
doctor's appointments, your "lunch??", and who you're seeing on Friday night. That's
about as personal as data gets, and because KashCal has <a class="" href="https://kashcal.onekash.org/docs/privacy/overview">no account and no servers of
its own</a>, there is, quite literally, nowhere for us to send
it. Your events stay on your device and sync only with the servers <em>you</em> chose.</p>
<p>Yours to trust, too. Every permission the app asks for is <a class="" href="https://kashcal.onekash.org/docs/privacy/overview#permissions-and-why-each-is-needed">listed with the reason it
needs it</a>, and it asks in
context, when you turn on the feature that needs it, not all at once at the door. The
whole thing is <a href="https://github.com/KashCal/KashCal" target="_blank" rel="noopener noreferrer" class="">open source under Apache-2.0</a>, so
"we don't track you" is something you can check rather than a promise you have to take.</p>
<p>And yours to make your own. Tap the avatar in the corner to open the account hub, set
your <a class="" href="https://kashcal.onekash.org/docs/calendar/navigation#the-account-hub">initials</a>, and under <strong>Make it
yours</strong> dress the app the way you like: light or dark, your <a class="" href="https://kashcal.onekash.org/docs/calendar/navigation#the-account-hub">accent
color</a> from your Material You wallpaper or a
wheel of 92, even a different <a class="" href="https://kashcal.onekash.org/docs/calendar/navigation#the-account-hub">app icon</a> on
your home screen. It reads in <a class="" href="https://kashcal.onekash.org/docs/features/languages">67 languages</a>, following
whatever your phone is set to. A calendar you look at every day should feel like it
belongs to you.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="so-what-makes-a-good-calendar">So, what makes a good calendar?<a href="https://kashcal.onekash.org/blog/what-makes-a-good-calendar#so-what-makes-a-good-calendar" class="hash-link" aria-label="Direct link to So, what makes a good calendar?" title="Direct link to So, what makes a good calendar?" translate="no">​</a></h2>
<p>Not the length of a feature list. A good calendar is a pleasure to open, gets out of
your way, shows all of your time in one place, lets you write like a person, doesn't
live in someone else's cloud, and stays yours because it is. Most of that is invisible
when it's done well, which is probably why it's easier to ask the question than to
answer it.</p>
<p>That's what we're building. If you want to see whether we got it right,
<a class="" href="https://kashcal.onekash.org/docs/getting-started/install">install KashCal</a>, it's free, and there's no account in
the way. Then tell us the part we missed, because someone asking a good question is how
this one started.</p>]]></content:encoded>
            <category>Behind the scenes</category>
            <category>Features</category>
        </item>
        <item>
            <title><![CDATA[We took Google's privacy checklist to KashCal. It came back empty.]]></title>
            <link>https://kashcal.onekash.org/blog/kashcal-google-android-privacy-checklist</link>
            <guid>https://kashcal.onekash.org/blog/kashcal-google-android-privacy-checklist</guid>
            <pubDate>Wed, 29 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[We ran KashCal against Google's Android privacy and security checklist, all five parts, item by item, and found nothing to fix. A private, open source, offline-first calendar app with no trackers, no accounts, and encrypted credentials. Here's the full walk-through.]]></description>
            <content:encoded><![CDATA[<p>Google keeps a <a href="https://developer.android.com/privacy-and-security/about" target="_blank" rel="noopener noreferrer" class="">privacy and security checklist</a> for Android developers. Five lists, covering permissions, location, how you handle data, device identifiers, and the privacy controls your app hands back to the user. It's the rubric Android itself recommends you grade against. So we did. Every item, one at a time.</p>
<p>We came out the other side with nothing to fix. Here's the walk-through, because a claim like that is only worth as much as your ability to check it.</p>
<!-- -->
<div style="margin:2.5rem 0;max-width:560px;margin-left:auto;margin-right:auto"><div style="background:linear-gradient(135deg, #0e6e62 0%, #093a34 60%, #06231f 100%);border-radius:16px;padding:1.75rem 1.9rem;color:#eafaf6;box-shadow:0 10px 30px rgba(6, 35, 31, 0.35)"><div style="font-size:0.8rem;letter-spacing:0.08em;text-transform:uppercase;opacity:0.7;margin-bottom:1.1rem"><p>Google's Android privacy checklist</p></div><div style="display:flex;align-items:center;gap:0.85rem;padding:0.55rem 0;border-top:1px solid rgba(185, 230, 221, 0.14)"><span style="flex-shrink:0;width:26px;height:26px;border-radius:50%;background:#45c2ad;display:flex;align-items:center;justify-content:center" aria-hidden="true"><svg viewBox="0 -960 960 960" width="16" height="16" fill="#06231f" style="display:block"><path d="M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z"></path></svg></span><span style="font-size:1.02rem;font-weight:500">Minimize permission requests</span></div><div style="display:flex;align-items:center;gap:0.85rem;padding:0.55rem 0;border-top:1px solid rgba(185, 230, 221, 0.14)"><span style="flex-shrink:0;width:26px;height:26px;border-radius:50%;background:#45c2ad;display:flex;align-items:center;justify-content:center" aria-hidden="true"><svg viewBox="0 -960 960 960" width="16" height="16" fill="#06231f" style="display:block"><path d="M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z"></path></svg></span><span style="font-size:1.02rem;font-weight:500">Minimize use of location</span></div><div style="display:flex;align-items:center;gap:0.85rem;padding:0.55rem 0;border-top:1px solid rgba(185, 230, 221, 0.14)"><span style="flex-shrink:0;width:26px;height:26px;border-radius:50%;background:#45c2ad;display:flex;align-items:center;justify-content:center" aria-hidden="true"><svg viewBox="0 -960 960 960" width="16" height="16" fill="#06231f" style="display:block"><path d="M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z"></path></svg></span><span style="font-size:1.02rem;font-weight:500">Handle data safely</span></div><div style="display:flex;align-items:center;gap:0.85rem;padding:0.55rem 0;border-top:1px solid rgba(185, 230, 221, 0.14)"><span style="flex-shrink:0;width:26px;height:26px;border-radius:50%;background:#45c2ad;display:flex;align-items:center;justify-content:center" aria-hidden="true"><svg viewBox="0 -960 960 960" width="16" height="16" fill="#06231f" style="display:block"><path d="M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z"></path></svg></span><span style="font-size:1.02rem;font-weight:500">Use resettable identifiers</span></div><div style="display:flex;align-items:center;gap:0.85rem;padding:0.55rem 0;border-top:1px solid rgba(185, 230, 221, 0.14)"><span style="flex-shrink:0;width:26px;height:26px;border-radius:50%;background:#45c2ad;display:flex;align-items:center;justify-content:center" aria-hidden="true"><svg viewBox="0 -960 960 960" width="16" height="16" fill="#06231f" style="display:block"><path d="M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z"></path></svg></span><span style="font-size:1.02rem;font-weight:500">Support user-facing privacy features</span></div><div style="margin-top:1.2rem;font-size:0.9rem;opacity:0.72"><p>Five lists. Nothing to fix.</p></div></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-list-is-mostly-about-data-you-collect-we-dont">The list is mostly about data you collect. We don't.<a href="https://kashcal.onekash.org/blog/kashcal-google-android-privacy-checklist#the-list-is-mostly-about-data-you-collect-we-dont" class="hash-link" aria-label="Direct link to The list is mostly about data you collect. We don't." title="Direct link to The list is mostly about data you collect. We don't." translate="no">​</a></h2>
<p>Read the checklist end to end and a pattern shows up. Most of it exists to keep apps that hoover up sensitive data from mishandling it: minimize what you request, explain why, don't leak it, don't hang onto identifiers you don't need. Our answer to most of the list isn't a clever mitigation. It's that the data isn't there to mishandle.</p>
<p>There is <a class="" href="https://kashcal.onekash.org/docs/privacy/overview">no KashCal account and no KashCal server</a>. No analytics library, no crash reporter, no ad SDK compiled into the app. Nothing phones home, because there is no home to phone. That clears whole sections of the checklist before we start.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="permissions-you-can-account-for">Permissions you can account for<a href="https://kashcal.onekash.org/blog/kashcal-google-android-privacy-checklist#permissions-you-can-account-for" class="hash-link" aria-label="Direct link to Permissions you can account for" title="Direct link to Permissions you can account for" translate="no">​</a></h2>
<p>The first checklist wants the minimum, requested in context rather than sprung on you at the door. Every permission KashCal holds maps to a feature you can point at: sync, contacts for birthdays and guest suggestions, calendar access for the calendars other apps keep on your phone, reminders, reaching a self-hosted server on your own network, and the optional biometric lock that screens the app behind your fingerprint.</p>
<p>None of it is requested at launch. Turn on birthday events and it asks for contacts, with the reason in front of you. Connect a device calendar and it asks for calendar access. Decline, and the rest of the app carries on; a refused permission switches off one feature and nothing else. There is no microphone, camera, phone-state, or broad storage permission anywhere, because nothing in the app uses them.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="location-it-never-asks-for">Location it never asks for<a href="https://kashcal.onekash.org/blog/kashcal-google-android-privacy-checklist#location-it-never-asks-for" class="hash-link" aria-label="Direct link to Location it never asks for" title="Direct link to Location it never asks for" translate="no">​</a></h2>
<p>A whole section of the checklist is devoted to handling location with care. KashCal skips the conversation: it requests no location permission of any kind. The location on an event is text you type, not a reading pulled from your phone. Nothing to minimize when there was nothing there.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="your-data-and-where-it-goes">Your data, and where it goes<a href="https://kashcal.onekash.org/blog/kashcal-google-android-privacy-checklist#your-data-and-where-it-goes" class="hash-link" aria-label="Direct link to Your data, and where it goes" title="Direct link to Your data, and where it goes" translate="no">​</a></h2>
<p>This is where a calendar app carries real responsibility, so it's where we spent the most time.</p>
<p>Your events sit in a <a class="" href="https://kashcal.onekash.org/docs/privacy/overview">database on your device</a> that other apps can't read, and they stay put until you connect a server to sync them. KashCal is <a class="" href="https://kashcal.onekash.org/docs/sync/how-sync-works">offline-first</a>: everything you do lands on the phone instantly and catches up with your server later, so a basement or a dead zone never stops the calendar. The only copies that leave the device go to the server <strong>you</strong> connected: iCloud, Nextcloud, Fastmail, <a class="" href="https://kashcal.onekash.org/docs/sync/supported-servers">any CalDAV server</a>. When you connect one, its password is encrypted with AES-256, and the key lives in the Android Keystore, hardware-backed on phones that support it. That password never lands in a log. Where we log a username to debug a sync, we print three characters and mask the rest.</p>
<p>Encrypted credentials are left out of Android's cloud backup and its phone-to-phone transfer. The key is tied to the original device, so a copied backup carries nothing another phone could decrypt. When KashCal shares a file, like an exported <code>.ics</code>, it hands the other app a one-time link to that file, not a door into its storage.</p>
<p>KashCal also supports plain HTTP connections, so more <a class="" href="https://kashcal.onekash.org/docs/sync/supported-servers">self-hosters</a> are welcome. Plenty of people run a calendar server on a box in the next room, on a local address, or behind a proxy that already handles encryption a layer up. An app that refused anything but HTTPS would shut those setups out, and they're the people who care most about owning their own data. We'd rather include them. The default still leans safe: type a server address with no scheme and KashCal fills in <code>https</code> for you, so reaching for plain HTTP is a deliberate choice you make by typing it.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="nothing-that-follows-you-around">Nothing that follows you around<a href="https://kashcal.onekash.org/blog/kashcal-google-android-privacy-checklist#nothing-that-follows-you-around" class="hash-link" aria-label="Direct link to Nothing that follows you around" title="Direct link to Nothing that follows you around" translate="no">​</a></h2>
<p>Another checklist is about identifiers: avoid the permanent ones, prefer the kind a user can reset. KashCal reads none of the permanent ones. Not the IMEI, not the serial number, not the Android ID, not an advertising ID, and it ships no ads library that would come looking for them. Your account inside the app is a value the app makes up for itself, and it's gone the moment you remove the account.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-controls-android-hands-the-user">The controls Android hands the user<a href="https://kashcal.onekash.org/blog/kashcal-google-android-privacy-checklist#the-controls-android-hands-the-user" class="hash-link" aria-label="Direct link to The controls Android hands the user" title="Direct link to The controls Android hands the user" translate="no">​</a></h2>
<p>The last checklist is about playing nicely with the system's own privacy features. With no microphone, camera, or location access, there's nothing for Android's Privacy Dashboard to flag against us in the first place. The sensitive permissions we do use, contacts and calendar, only ever fire from something you just tapped, so the reason is never a mystery.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-it-came-back-empty">Why it came back empty<a href="https://kashcal.onekash.org/blog/kashcal-google-android-privacy-checklist#why-it-came-back-empty" class="hash-link" aria-label="Direct link to Why it came back empty" title="Direct link to Why it came back empty" translate="no">​</a></h2>
<p>Running a privacy checklist and finding nothing to fix isn't a trophy for clever engineering. It's what happens when the app is shaped so the risky data never arrives. You can't leak a location you never read, or lose an identifier you never stored, or hand a tracker data it was never given.</p>
<p>None of this asks for your trust. KashCal is open source under Apache-2.0, and the F-Droid build is compiled from that public source. The permission list is in the manifest. The encryption is one class you can open. The absence of tracking is the absence of a dependency. Every line above is a file you can read.</p>
<p>Read <a class="" href="https://kashcal.onekash.org/docs/privacy/overview">how privacy works</a> in full. Then, if you like, go check the list yourself.</p>]]></content:encoded>
            <category>Privacy</category>
            <category>Behind the scenes</category>
        </item>
        <item>
            <title><![CDATA[Say it once. Skip the form. It's fantastic.]]></title>
            <link>https://kashcal.onekash.org/blog/natural-language-calendar-events-android</link>
            <guid>https://kashcal.onekash.org/blog/natural-language-calendar-events-android</guid>
            <pubDate>Sun, 19 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[KashCal's smart event add turns a plain sentence into a real event: date, time, location, recurrence, tags, and notes. Type 'lunch every 2nd Tuesday at noon' and skip the form entirely.]]></description>
            <content:encoded><![CDATA[<p>An event starts as a sentence. "Dentist next Thursday at ten." "Standup every weekday at nine." "Rent, last day of the month." You already have the whole thing in your head, in order, done.</p>
<p>Then most calendar apps make you take it apart. Title in this box. Tap the date field. Spin a time wheel. Open a second screen labeled "Repeat" and hunt for the right radio button. You arrive knowing exactly what you meant and leave having filled out a form about it. KashCal just reads the sentence.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="type-it-the-way-youd-say-it">Type it the way you'd say it<a href="https://kashcal.onekash.org/blog/natural-language-calendar-events-android#type-it-the-way-youd-say-it" class="hash-link" aria-label="Direct link to Type it the way you'd say it" title="Direct link to Type it the way you'd say it" translate="no">​</a></h2>
<p>Turn on <strong>Smart event add</strong> and type one line. KashCal pulls the pieces out as you go and shows a live preview, so you watch it get things right before you save:</p>
<ul>
<li class=""><strong>Dates</strong>, however you phrase them: <code>tomorrow</code>, <code>next Friday</code>, <code>March 15</code>, <code>3/15/2027</code>.</li>
<li class=""><strong>Times</strong>, exact or spoken: <code>3pm</code>, <code>half past 3</code>, <code>2pm to 4pm</code>, or just <code>morning</code>.</li>
<li class=""><strong>Location</strong> after the word <code>at</code>: <code>Lunch at Olive Garden</code> files the place, not the title.</li>
<li class=""><strong>Tags</strong> with <code>#</code>: <code>Deep work #focus</code> keeps the tag and drops the rest into the event.</li>
</ul>
<p>Nothing to tap through. The sentence is the form.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-repeats-that-used-to-need-a-dialog">The repeats that used to need a dialog<a href="https://kashcal.onekash.org/blog/natural-language-calendar-events-android#the-repeats-that-used-to-need-a-dialog" class="hash-link" aria-label="Direct link to The repeats that used to need a dialog" title="Direct link to The repeats that used to need a dialog" translate="no">​</a></h2>
<p>Recurring events are where "just fill out the form" gets especially tedious, so this is where typing pays off most. KashCal now understands the awkward ones:</p>
<ul>
<li class=""><code>every weekday</code>, <code>every 2 weeks</code>, <code>monthly until December</code></li>
<li class=""><code>2nd Tuesday of the month</code> for the meeting that never lands on the same date</li>
<li class=""><code>last Thursday of the month</code>, the one your old calendar could not express without a calendar of its own</li>
<li class=""><code>last day of the month</code> for rent, whether that month ends on the 30th, the 31st, or a nervous 28th</li>
</ul>
<p>Say it plainly and KashCal sets the repeat. No radio buttons were harmed.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-place-for-the-part-that-isnt-scheduling">A place for the part that isn't scheduling<a href="https://kashcal.onekash.org/blog/natural-language-calendar-events-android#a-place-for-the-part-that-isnt-scheduling" class="hash-link" aria-label="Direct link to A place for the part that isn't scheduling" title="Direct link to A place for the part that isn't scheduling" translate="no">​</a></h2>
<p>Sometimes the event carries a thought that is not a time or a place. Add it after a space and <code>//</code>, and everything past it becomes the note:</p>
<p><code>Call plumber tomorrow 3pm // ask about the leak under the sink</code></p>
<p>KashCal only reads the part before the <code>//</code> for the schedule, so words in your note never quietly move the event. Paste a link like <code>https://...</code> and it stays put, because the space before <code>//</code> is what marks the note.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="it-looks-and-works-well-fantastic">It looks and works, well, fantastic<a href="https://kashcal.onekash.org/blog/natural-language-calendar-events-android#it-looks-and-works-well-fantastic" class="hash-link" aria-label="Direct link to It looks and works, well, fantastic" title="Direct link to It looks and works, well, fantastic" translate="no">​</a></h2>
<p>Typing your events instead of tapping through pickers is the trick a certain famous iPhone calendar showed off for years, and Android users have asked for it for about as long. KashCal does it, on Android, for free, with no account and nothing leaving your phone. Type a sentence, watch the preview, save. That is the whole feature, and it feels a little bit magic every time.</p>
<p>Read the full list of phrases in the <a class="" href="https://kashcal.onekash.org/docs/events/smart-event-add">smart event add guide</a>, or see it in one picture on the <a class="" href="https://kashcal.onekash.org/features/natural-language-add-event-calendar">feature page</a>.</p>
<p>Say it once. We got it.</p>]]></content:encoded>
            <category>Features</category>
            <category>Releases</category>
        </item>
        <item>
            <title><![CDATA[We make a calendar. This feed schedules nothing.]]></title>
            <link>https://kashcal.onekash.org/blog/unscheduled-thoughts-calendar-feed</link>
            <guid>https://kashcal.onekash.org/blog/unscheduled-thoughts-calendar-feed</guid>
            <pubDate>Fri, 17 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Unscheduled Thoughts is a free calendar feed from the people who make KashCal. Every few days it adds a short, kind, sometimes snarky note to your calendar. It never blocks your day and asks for nothing. Here is how it started and how to subscribe.]]></description>
            <content:encoded><![CDATA[<p>Software has one move: get you to do more, faster, with fewer gaps. Calendar apps are the sharp end of it, and we make one. So the obvious thing for us to build is another way to pack your day tighter.</p>
<p>Instead we built a feed whose only job is to put a note on your calendar that asks for nothing. No time, no place, no task. We called it Unscheduled Thoughts, and we are giving it away. Probably no calendar company has put out a joke as a subscription feed on purpose. We are not proud. We are a little proud.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-opposite-of-an-appointment">The opposite of an appointment<a href="https://kashcal.onekash.org/blog/unscheduled-thoughts-calendar-feed#the-opposite-of-an-appointment" class="hash-link" aria-label="Direct link to The opposite of an appointment" title="Direct link to The opposite of an appointment" translate="no">​</a></h2>
<p>Everything else on your calendar wants something. Be here at nine. Leave by ten. Call the dentist you have been avoiding since the last note about the dentist. A calendar is a to-do list that learned to wear colored blocks and bill by the hour.</p>
<p>Unscheduled Thoughts is the one entry that wants nothing back. Every few days it adds a single all-day note and then leaves you alone. Some are kind ("You are not behind. Time is just ambitious."). Some are less kind ("You rescheduled it again. Bold. Committed. To not doing it."). One simply notes that "'Gym' has repeated weekly since March. The event is the consistent part." It means well, mostly.</p>
<p>It lives in the all-day row and marks itself transparent, so it never blocks your day and never argues with the meetings that do. Your free time stays free. It is a note in the margin, not another thing on the pile.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-the-scheduling-people-built-anti-scheduling">Why the scheduling people built anti-scheduling<a href="https://kashcal.onekash.org/blog/unscheduled-thoughts-calendar-feed#why-the-scheduling-people-built-anti-scheduling" class="hash-link" aria-label="Direct link to Why the scheduling people built anti-scheduling" title="Direct link to Why the scheduling people built anti-scheduling" translate="no">​</a></h2>
<p>We are the kind of people who fold calendar-feed lines at 75 characters because a spec from 1998 said to. We put that same seriousness into a feed that exists to tell you to drink water ("Coffee is an argument, not water"). Every note is a clean, standards-compliant calendar event carrying no productivity value at all.</p>
<p>A calendar is very good at telling you what is on. It has nothing to say about how you are holding up while you get through it. We sell the first part. Unscheduled Thoughts is a small and unserious go at the second, on the one screen you already check more than you would admit.</p>
<p>So take it as a gift, and we mean it. It is free. No account, nothing to install, no data leaving anywhere, because it is a plain calendar feed with nowhere to phone home to. We could not spy on you if we tried, and we did not build the part where we try. It is not here to sell you our app either. It works in Google Calendar, Apple Calendar, Outlook, and KashCal. Bring whatever calendar you already resent. This one comes with no strings, and with no us.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="subscribe-in-about-ten-seconds">Subscribe in about ten seconds<a href="https://kashcal.onekash.org/blog/unscheduled-thoughts-calendar-feed#subscribe-in-about-ten-seconds" class="hash-link" aria-label="Direct link to Subscribe in about ten seconds" title="Direct link to Subscribe in about ten seconds" translate="no">​</a></h2>
<p>Point any calendar app that does subscriptions at this address:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">https://kashcal.onekash.org/unscheduled-thoughts.ics</span><br></div></code></pre></div></div>
<p>In KashCal it is one tap. Our latest release opens <code>webcal://</code> links straight from the <a href="https://kashcal.onekash.org/unscheduled-thoughts" target="_blank" rel="noopener noreferrer" class="">feed's page</a>, which is a fancy way of saying the button finally works. New notes arrive on their own every few days. No push notifications, no badge, no "you have not opened Unscheduled Thoughts in a while."</p>
<p>It is the only calendar invite you will never have to decline, reschedule, or pretend you did not see. <a href="https://kashcal.onekash.org/unscheduled-thoughts" target="_blank" rel="noopener noreferrer" class="">Add Unscheduled Thoughts to your calendar.</a> It asks you for nothing, which by the standards of your calendar makes it the kindest thing on there.</p>]]></content:encoded>
            <category>Features</category>
            <category>Behind the scenes</category>
        </item>
        <item>
            <title><![CDATA[The calendar with no account to sign up for]]></title>
            <link>https://kashcal.onekash.org/blog/no-account-private-calendar-android</link>
            <guid>https://kashcal.onekash.org/blog/no-account-private-calendar-android</guid>
            <pubDate>Thu, 16 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[KashCal has no account, no trackers, and no servers of its own. Here's what that actually means for your calendar, and why it's built that way.]]></description>
            <content:encoded><![CDATA[<p>Most apps greet you with a wall: sign in, or create an account. A calendar app doing that is quietly asking you to route your dentist appointments, your interviews, and your "lunch??" through a stranger's servers so it can hand them back to you later. KashCal never asks. There is no account, because there is nothing to sign into.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="no-account-because-there-are-no-kashcal-servers">No account, because there are no KashCal servers<a href="https://kashcal.onekash.org/blog/no-account-private-calendar-android#no-account-because-there-are-no-kashcal-servers" class="hash-link" aria-label="Direct link to No account, because there are no KashCal servers" title="Direct link to No account, because there are no KashCal servers" translate="no">​</a></h2>
<p>This isn't a privacy setting you switch on. It's the shape of the app. There is <strong>no KashCal account</strong> to create, <strong>no KashCal server</strong> anywhere for your events to pass through, and <strong>no analytics, telemetry, or ad SDK</strong> riding along inside. There is, quite literally, nowhere for us to send your data, so there is nothing for us to collect. A privacy policy is easy to write when the honest version is "we don't have your data and never did."</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="your-calendar-lives-on-your-phone">Your calendar lives on your phone<a href="https://kashcal.onekash.org/blog/no-account-private-calendar-android#your-calendar-lives-on-your-phone" class="hash-link" aria-label="Direct link to Your calendar lives on your phone" title="Direct link to Your calendar lives on your phone" translate="no">​</a></h2>
<p>Your events sit in a <a class="" href="https://kashcal.onekash.org/docs/privacy/overview">secure database on your device</a> that other apps can't read. The only things that ever leave your phone go to servers <strong>you</strong> chose: your events sync to your own calendar server, iCloud, Nextcloud, Fastmail, or <a class="" href="https://kashcal.onekash.org/docs/sync/supported-servers">any CalDAV service</a>, and an RSVP goes to the organizer who invited you. Nothing else goes anywhere.</p>
<p>And when you're offline, none of that matters. KashCal is <a class="" href="https://kashcal.onekash.org/docs/sync/how-sync-works">offline-first</a>: everything you do lands instantly on the device, and it quietly catches up with your servers when there's a connection. A plane, a basement, a dead zone, the calendar still works.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="passwords-that-cant-be-lifted-from-a-backup">Passwords that can't be lifted from a backup<a href="https://kashcal.onekash.org/blog/no-account-private-calendar-android#passwords-that-cant-be-lifted-from-a-backup" class="hash-link" aria-label="Direct link to Passwords that can't be lifted from a backup" title="Direct link to Passwords that can't be lifted from a backup" translate="no">​</a></h2>
<p>When you connect a calendar server, its password is <a class="" href="https://kashcal.onekash.org/docs/privacy/overview">encrypted on your device</a> with AES-256, and the key lives in the Android Keystore, hardware-backed where the phone supports it. The key is tied to that one device, so a stolen backup can't be replayed onto another phone to reach your accounts. The trade-off is honest: move to a new phone and you re-enter your passwords. We think that's the right side of the line.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="permissions-you-can-actually-reason-about">Permissions you can actually reason about<a href="https://kashcal.onekash.org/blog/no-account-private-calendar-android#permissions-you-can-actually-reason-about" class="hash-link" aria-label="Direct link to Permissions you can actually reason about" title="Direct link to Permissions you can actually reason about" translate="no">​</a></h2>
<p>KashCal asks only for what a feature in front of you needs, and it asks in context, with a plain reason. Contacts is for suggesting guests and showing birthdays. Calendar access is for showing the calendars other apps already keep on your phone. Decline any of it and the rest of the app keeps working. No all-or-nothing gate at the door.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="free-and-open-about-it">Free, and open about it<a href="https://kashcal.onekash.org/blog/no-account-private-calendar-android#free-and-open-about-it" class="hash-link" aria-label="Direct link to Free, and open about it" title="Direct link to Free, and open about it" translate="no">​</a></h2>
<p>KashCal is free and open source under Apache-2.0, so "we don't track you" isn't a promise you have to take on faith. The source is <a href="https://github.com/KashCal/KashCal" target="_blank" rel="noopener noreferrer" class="">right there to read</a>. If we ever added a tracker, someone would see the commit.</p>
<p><a href="https://f-droid.org/packages/org.onekash.kashcal/" target="_blank" rel="noopener noreferrer" class="">Get KashCal free on F-Droid</a>. No account, no ads, no catch. Read <a class="" href="https://kashcal.onekash.org/docs/privacy/overview">how privacy works</a> in full.</p>
<p>Your calendar was never anyone else's business. Now it's built that way.</p>]]></content:encoded>
            <category>Privacy</category>
            <category>Behind the scenes</category>
        </item>
        <item>
            <title><![CDATA[Tags: label your events, not just file them]]></title>
            <link>https://kashcal.onekash.org/blog/kashcal-event-tags</link>
            <guid>https://kashcal.onekash.org/blog/kashcal-event-tags</guid>
            <pubDate>Wed, 15 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[KashCal 2026.07.15 adds event tags: colored #chips you set in the form or type in as you add an event, shown across the day, week, and agenda views.]]></description>
            <content:encoded><![CDATA[<p>Since the beginning of KashCal, your events have been sorted the way a coat check sorts coats: by which calendar you flung them into, and not one thought more. This release lets you label them yourself. Meet tags.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="type-a-tag-get-a-chip">Type a #tag, get a chip<a href="https://kashcal.onekash.org/blog/kashcal-event-tags#type-a-tag-get-a-chip" class="hash-link" aria-label="Direct link to Type a #tag, get a chip" title="Direct link to Type a #tag, get a chip" translate="no">​</a></h2>
<p>Add a tag in the <a class="" href="https://kashcal.onekash.org/docs/events/event-form">event form</a>, or fling a <code>#dentist</code> straight into <a class="" href="https://kashcal.onekash.org/docs/events/smart-event-add">smart event add</a> and watch it land as a colored chip. That chip then follows the event around the <a class="" href="https://kashcal.onekash.org/docs/calendar/views">day, week, and agenda views</a> like it owns the place. Tap the event open and the tags are right there in quick view, quietly confirming that yes, this is a <code>#focus</code> block, and no, it is not the third <code>#standup</code> of the day you had every right to skip.</p>
<p>Start typing and KashCal hands back the tags you already use, ranked by how often you reach for them. It is the only known cure for "Errands" quietly fracturing into "errands," "ERRANDS," and one deeply confident "Errnads" by Thursday.</p>
<p>And if you decide tags belong above your notes rather than below, the row's little ⋮ menu will move it, and we will pretend that was our idea all along.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-honest-fine-print">The honest fine print<a href="https://kashcal.onekash.org/blog/kashcal-event-tags#the-honest-fine-print" class="hash-link" aria-label="Direct link to The honest fine print" title="Direct link to The honest fine print" translate="no">​</a></h2>
<p>Tags currently work on the events KashCal syncs itself: your iCloud and other CalDAV calendars. The device's own calendars, the Google, Samsung, and Exchange ones Android politely shoves through the door, are still tag-free for a release or two while we teach them manners. Rather than let your tags quietly vanish into the void, we simply hide the tag row on those events for now.</p>
<p>This is version one of roughly several. More tags, more places, more tricks are queued up.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="while-we-had-the-tweezers-out">While we had the tweezers out<a href="https://kashcal.onekash.org/blog/kashcal-event-tags#while-we-had-the-tweezers-out" class="hash-link" aria-label="Direct link to While we had the tweezers out" title="Direct link to While we had the tweezers out" translate="no">​</a></h2>
<p>A few papercuts, gone:</p>
<ul>
<li class="">Events with no length, the ones you pin to a single moment, used to disappear entirely in the day and week views. They now show up as the small blocks they always meant to be, and no longer draw on top of each other when they overlap.</li>
<li class="">Emoji in a synced description arrive as the emoji you sent, instead of a puzzled little box.</li>
<li class="">A garbled duration from some other app can no longer bend an event's end time back to before it started.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="everything-in-this-release">Everything in this release<a href="https://kashcal.onekash.org/blog/kashcal-event-tags#everything-in-this-release" class="hash-link" aria-label="Direct link to Everything in this release" title="Direct link to Everything in this release" translate="no">​</a></h2>
<ul>
<li class="">Event tags: colored chips on events, shown in the day, week, and agenda views and in the event quick view, on iCloud and CalDAV events for now</li>
<li class="">Create tags from the event form with usage-ranked suggestions and inline <code>#</code> autocomplete in the title</li>
<li class="">Add tags from Quick Add by typing <code>#tag</code>, persisting across create and all edit scopes</li>
<li class="">Reorder the form tag row above or below notes from its ⋮ menu</li>
<li class="">Tidied the event-form layout, and moved the location field up under the title</li>
<li class="">Fixed zero-length and very short events vanishing or overlapping in the day, 3-day, and week views</li>
<li class="">Fixed emoji and other extended characters in synced descriptions rendering as a stray box or wrong character</li>
<li class="">Fixed a malformed event duration producing an end time before the start</li>
<li class="">Fixed self-hosted CalDAV/ICS sync hanging on "Preparing to sync" over LAN or VPN networks</li>
</ul>
<p>Small labels, better plumbing, fewer papercuts. Tag it and move on.</p>]]></content:encoded>
            <category>Releases</category>
            <category>Announcements</category>
        </item>
        <item>
            <title><![CDATA[Ninety days ahead, and a timeline that remembers]]></title>
            <link>https://kashcal.onekash.org/blog/kashcal-agenda-90-days-timeline-memory</link>
            <guid>https://kashcal.onekash.org/blog/kashcal-agenda-90-days-timeline-memory</guid>
            <pubDate>Mon, 13 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[KashCal 2026.07.13 widens the agenda to 90 days, adds a scroll-aware month header, remembers your timeline zoom across restart, and fixes the month view.]]></description>
            <content:encoded><![CDATA[<p>Your agenda finally learned to read the room. Day in, day out, its top bar proudly announced "Agenda," heroically confirming that the agenda screen was, against all odds, the agenda screen. Thank you, brave label. It has now been reassigned.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-agenda-knows-what-month-it-is">The agenda knows what month it is<a href="https://kashcal.onekash.org/blog/kashcal-agenda-90-days-timeline-memory#the-agenda-knows-what-month-it-is" class="hash-link" aria-label="Direct link to The agenda knows what month it is" title="Direct link to The agenda knows what month it is" translate="no">​</a></h2>
<p>The top of the <a class="" href="https://kashcal.onekash.org/docs/calendar/views">agenda</a> now shows the month you're actually looking at, and keeps pace as you scroll, so August rolls into September without you wondering where the summer went. It's the same month header the week and month views use, now doing an honest day's work over here too.</p>
<p>And there's more of it to scroll: <strong>ninety days ahead instead of thirty</strong>, because your future has a way of arriving whether we render it or not. A full quarter, in one list, no swiping to the next screen to find out what October is holding.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-timeline-that-remembers">A timeline that remembers<a href="https://kashcal.onekash.org/blog/kashcal-agenda-90-days-timeline-memory#a-timeline-that-remembers" class="hash-link" aria-label="Direct link to A timeline that remembers" title="Direct link to A timeline that remembers" translate="no">​</a></h2>
<p>The day, 3-day, and week timelines have been persuaded to stop having amnesia. Pinch to zoom the hours in or out to the density you like, and it now <strong>stays exactly where you left it</strong> after you close the app, rather than resetting to the default overnight and pretending the two of you never met.</p>
<p>It restores the zoom and the scroll position together, so you reopen at the same time of day, at the same size. This is per-device UI comfort, so it isn't dragged along in your settings backup, it just makes the phone in your hand feel like the one you were using yesterday.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="back-from-1969">Back from 1969<a href="https://kashcal.onekash.org/blog/kashcal-agenda-90-days-timeline-memory#back-from-1969" class="hash-link" aria-label="Direct link to Back from 1969" title="Direct link to Back from 1969" translate="no">​</a></h2>
<p>The month and full-month views had a charming habit of opening in <strong>December 1969</strong> if you arrived from the agenda without tapping a day first. Lovely for nostalgia, useless for dentist appointments. It now opens in the current month, having been gently reminded which decade we are all living in.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="everything-in-this-release">Everything in this release<a href="https://kashcal.onekash.org/blog/kashcal-agenda-90-days-timeline-memory#everything-in-this-release" class="hash-link" aria-label="Direct link to Everything in this release" title="Direct link to Everything in this release" translate="no">​</a></h2>
<ul>
<li class="">Agenda now shows the next 90 days of events instead of 30</li>
<li class="">The agenda top bar shows the current month and updates as you scroll, replacing the static "Agenda" title</li>
<li class="">The day, 3-day, and week timelines remember your pinch-to-zoom hour height across app restart</li>
<li class="">Fixed the month and full-month views opening on December 1969 when no day was selected yet</li>
</ul>
<p>No confetti this release, just a calendar that stops tripping over its own feet. Sweating the small stuff is our whole personality.</p>
<p>Want the flashy bits instead? <a class="" href="https://kashcal.onekash.org/blog/kashcal-challenge">Take the KashCal Challenge</a>: find the one thing your old calendar can't do, tag <strong>#KashCal</strong>, and dare a friend to match it.</p>]]></content:encoded>
            <category>Releases</category>
            <category>Announcements</category>
        </item>
        <item>
            <title><![CDATA[Calendar You: pick your accent, and take it to your widgets]]></title>
            <link>https://kashcal.onekash.org/blog/kashcal-calendar-you-accent-colors</link>
            <guid>https://kashcal.onekash.org/blog/kashcal-calendar-you-accent-colors</guid>
            <pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[KashCal 2026.07.11 lets you pick your accent from 92 colors and carry it across the whole app and your home screen widgets, or keep Material You. Here's what changed.]]></description>
            <content:encoded><![CDATA[<p>Last release we gave you KashCal Teal and were very pleased with ourselves. Then someone pointed out the obvious: we had spent a whole update letting you choose your color, and then chose it for you. A calendar telling you your favorite color is teal is a bit like a waiter ordering for the table. Bold. Rarely correct.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="your-color-everywhere">Your color, everywhere<a href="https://kashcal.onekash.org/blog/kashcal-calendar-you-accent-colors#your-color-everywhere" class="hash-link" aria-label="Direct link to Your color, everywhere" title="Direct link to Your color, everywhere" translate="no">​</a></h2>
<p>So this release we got out of the way. Pick your accent from all 92 colors, and it runs through the entire app and, for the first time, out onto your home screen widgets too. Every widget wears it, down to a proper raised add button. You'll find it under <a class="" href="https://kashcal.onekash.org/docs/features/settings">Settings, then Appearance</a>.</p>
<p>Prefer the old magic where the color follows your wallpaper? <strong>Automatic</strong> keeps your Material You colors exactly as they were. Nothing changes unless you want it to.</p>
<p>Every color is contrast-checked as it lands, so whatever you pick, the text on top of it stays readable, in light mode and dark.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="calendar-you">Calendar You<a href="https://kashcal.onekash.org/blog/kashcal-calendar-you-accent-colors#calendar-you" class="hash-link" aria-label="Direct link to Calendar You" title="Direct link to Calendar You" translate="no">​</a></h2>
<p>Our marketing team, several donuts deep by mid-afternoon, has decided to call this <strong>Calendar You</strong>. We did the math on 92 colors, one calendar, and infinite you, and we could not find the flaw, so it is approved. Please clap.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="two-smaller-kindnesses">Two smaller kindnesses<a href="https://kashcal.onekash.org/blog/kashcal-calendar-you-accent-colors#two-smaller-kindnesses" class="hash-link" aria-label="Direct link to Two smaller kindnesses" title="Direct link to Two smaller kindnesses" translate="no">​</a></h2>
<p>While we were in a generous mood, the week and 3-day views learned to stay put. Reopen the app and you land back where you were looking, not scrolled off to some default hour like nothing happened.</p>
<p>And moving an event to another calendar no longer quietly eats a title or note you edited in the same breath. What you typed is what you keep.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="everything-in-this-release">Everything in this release<a href="https://kashcal.onekash.org/blog/kashcal-calendar-you-accent-colors#everything-in-this-release" class="hash-link" aria-label="Direct link to Everything in this release" title="Direct link to Everything in this release" translate="no">​</a></h2>
<ul>
<li class="">Accent color picker: theme the whole app and all home screen widgets with any of 92 colors, defaulting to KashCal Teal</li>
<li class="">Automatic accent keeps your Material You and wallpaper colors</li>
<li class="">Every home screen widget recolors to your accent, with a raised add button</li>
<li class="">Week and 3-day views restore your last scroll position across app restart</li>
<li class="">Moving an event to another calendar preserves title and note edits made in the same save</li>
</ul>
<p>Ninety-two colors. Still one calendar. Now unmistakably yours.</p>]]></content:encoded>
            <category>Releases</category>
            <category>Announcements</category>
        </item>
        <item>
            <title><![CDATA[Make KashCal yours: a theme picker and a supporter icon]]></title>
            <link>https://kashcal.onekash.org/blog/kashcal-theme-picker-supporter-icon</link>
            <guid>https://kashcal.onekash.org/blog/kashcal-theme-picker-supporter-icon</guid>
            <pubDate>Mon, 06 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[KashCal 2026.07.06 adds a theme picker with a KashCal Teal palette, and a supporter app icon you can switch to from Settings. Here's what changed.]]></description>
            <content:encoded><![CDATA[<p>This release is about making KashCal yours. Two new choices, both in Settings, one for how the app looks and one for how it shows up on your home screen.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="pick-your-colors">Pick your colors<a href="https://kashcal.onekash.org/blog/kashcal-theme-picker-supporter-icon#pick-your-colors" class="hash-link" aria-label="Direct link to Pick your colors" title="Direct link to Pick your colors" translate="no">​</a></h2>
<p>KashCal now has a proper theme picker. Stay on System, pin Light or Dark, or switch on <strong>KashCal Teal</strong>, our own palette that follows your phone's light and dark setting while keeping the brand green front and center. It runs through the whole app, contrast-checked so text stays readable on every surface, light or dark. You'll find it under <a class="" href="https://kashcal.onekash.org/docs/features/settings">Settings, then Appearance</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="wear-your-support">Wear your support<a href="https://kashcal.onekash.org/blog/kashcal-theme-picker-supporter-icon#wear-your-support" class="hash-link" aria-label="Direct link to Wear your support" title="Direct link to Wear your support" translate="no">​</a></h2>
<p>The second choice is the icon on your home screen. If you've chipped in to keep KashCal free and ad-free (<a href="https://kashcal.onekash.org/donate" target="_blank" rel="noopener noreferrer" class="">or you'd like to</a>), you can now wear it: a gold <strong>Supporter</strong> icon with a little heart on the calendar card. Pick it under Settings, then App Icon, in whichever flavor you like. Keep the KashCal name, or go incognito with the same icon labeled simply "Calendar."</p>
<p>Whether you're already a supporter or about to become one, here's a thank you from us.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="everything-in-this-release">Everything in this release<a href="https://kashcal.onekash.org/blog/kashcal-theme-picker-supporter-icon#everything-in-this-release" class="hash-link" aria-label="Direct link to Everything in this release" title="Direct link to Everything in this release" translate="no">​</a></h2>
<ul>
<li class="">New theme picker in Settings: System, Light, Dark, or KashCal Teal</li>
<li class="">KashCal Teal palette follows your phone's light and dark setting and is applied app-wide, with contrast checked for readability</li>
<li class="">New supporter app icon: a gold card with a heart, chosen under Settings, then App Icon</li>
<li class="">Two supporter variants, sharing one icon: one keeps the "KashCal" name, one shows a discreet "Calendar" name on the home screen</li>
</ul>
<p>KashCal, the calendar you already love, now in your colors and wearing your badge.</p>
<p>Supporting open source has always felt good. Now it looks good too, right there on your home screen. Not a supporter yet? <a href="https://kashcal.onekash.org/donate" target="_blank" rel="noopener noreferrer" class="">Join in</a>. It's quicker than your coffee order.</p>]]></content:encoded>
            <category>Releases</category>
            <category>Announcements</category>
        </item>
        <item>
            <title><![CDATA[KashCal now works with your screen reader]]></title>
            <link>https://kashcal.onekash.org/blog/kashcal-talkback-accessibility</link>
            <guid>https://kashcal.onekash.org/blog/kashcal-talkback-accessibility</guid>
            <pubDate>Sun, 05 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[KashCal 2026.07.05 adds full TalkBack support: jumpable headings, spoken status, events that say what they are, plus a per-app language setting.]]></description>
            <content:encoded><![CDATA[<p>For a while now, KashCal has had a quiet flaw: you could only use it by looking at it. It worked beautifully with your eyes, and went silent as a stone the moment you turned on a screen reader. A calendar that only works when you're watching it is, on reflection, a poster. So this release taught it to talk.</p>
<!-- -->
<p>With TalkBack on, you can now move through KashCal by ear. Jump between headings, hear sync and offline status the moment it changes, and get told when a sign-in or a save fails instead of wondering why nothing happened. Events announce what they are, so a cancelled event says "cancelled" out loud rather than just looking faintly sad about it (it wears a line through it now, for the sighted crowd too). Bottom sheets say their name as they open, the drawer tells you which view you're in, and a subscription can finally be deleted with a real action instead of a swipe nobody could find.</p>
<p>While we were teaching it manners, we sent the languages out to live where they belong. KashCal now advertises all <a class="" href="https://kashcal.onekash.org/docs/features/languages">67 of them</a> to Android, so on Android 13 and up you pick the app's language in system settings alongside everything else, instead of spelunking through ours.</p>
<p>Two smaller dignities came along for the ride. Rotating your phone in the middle of an event no longer throws the whole thing away, and typing a title now capitalizes the first letter like a grown-up.</p>
<p>Same calendar. Now it works with the screen off, the phone sideways, and your eyes shut.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="everything-in-this-release">Everything in this release<a href="https://kashcal.onekash.org/blog/kashcal-talkback-accessibility#everything-in-this-release" class="hash-link" aria-label="Direct link to Everything in this release" title="Direct link to Everything in this release" translate="no">​</a></h2>
<ul>
<li class="">Full screen-reader (TalkBack) support: headings, spoken status, event state read aloud</li>
<li class="">Cancelled events are now crossed off (<a href="https://github.com/KashCal/KashCal/issues/276" target="_blank" rel="noopener noreferrer" class="">#276</a>)</li>
<li class="">Set KashCal's language from Android system settings (Android 13+, 67 languages)</li>
<li class="">Delete a subscription with an accessibility action, not just a swipe</li>
<li class="">Rotating the device no longer discards the event you're editing (<a href="https://github.com/KashCal/KashCal/issues/286" target="_blank" rel="noopener noreferrer" class="">#286</a>)</li>
<li class="">Event titles auto-capitalize the first letter (<a href="https://github.com/KashCal/KashCal/issues/285" target="_blank" rel="noopener noreferrer" class="">#285</a>)</li>
</ul>
<p>KashCal is free and open source. <a href="https://f-droid.org/packages/org.onekash.kashcal/" target="_blank" rel="noopener noreferrer" class="">Get it on F-Droid</a> or read <a class="" href="https://kashcal.onekash.org/docs">the docs</a>.</p>]]></content:encoded>
            <category>Releases</category>
            <category>Announcements</category>
        </item>
        <item>
            <title><![CDATA[What's new in KashCal 2026.07.02]]></title>
            <link>https://kashcal.onekash.org/blog/kashcal-2026-07-02</link>
            <guid>https://kashcal.onekash.org/blog/kashcal-2026-07-02</guid>
            <pubDate>Thu, 02 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[KashCal 2026.07.02 adds exact-minute times to the time picker and cuts the download to roughly a third of its old size. Here's what changed.]]></description>
            <content:encoded><![CDATA[<p>Dispatch from the lab, best known (of all things) for a calendar.</p>
<p>We keep meaning to invent something important. Then July 22 rolls around, the annual Pi Approximation Day party starts (the one where 22/7 gets to cosplay as π and nobody files a complaint), someone gets ideas, and we end up improving the calendar again. Here is what escaped this time.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="exact-minutes-finally">Exact minutes, finally<a href="https://kashcal.onekash.org/blog/kashcal-2026-07-02#exact-minutes-finally" class="hash-link" aria-label="Direct link to Exact minutes, finally" title="Direct link to Exact minutes, finally" translate="no">​</a></h2>
<p>The 5-minute time wheel is lovely right up until you need "3:47," at which point it just shrugs. So there is now a keyboard button on the time picker: tap it, type any minute you please.</p>
<p>Events already sitting on an odd minute show the exact time as tappable text instead of quietly rounding themselves to the nearest five while you looked away. Your 8:52 standup stays 8:52.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-lighter-download">A lighter download<a href="https://kashcal.onekash.org/blog/kashcal-2026-07-02#a-lighter-download" class="hash-link" aria-label="Direct link to A lighter download" title="Direct link to A lighter download" translate="no">​</a></h2>
<p>In honor of 22/7 being a wonderfully compact stand-in for something infinite, we went hunting for fat to trim and found the app hauling a crate of packing peanuts. We cleaned house. KashCal is now roughly a third smaller to download and install. Same calendar, less luggage.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="everything-in-this-release">Everything in this release<a href="https://kashcal.onekash.org/blog/kashcal-2026-07-02#everything-in-this-release" class="hash-link" aria-label="Direct link to Everything in this release" title="Direct link to Everything in this release" translate="no">​</a></h2>
<ul>
<li class=""><strong>Type an exact minute.</strong> A keyboard button on the time picker lets you enter any minute instead of snapping to the nearest five. Odd-minute events now show their real time as tappable text.</li>
<li class=""><strong>Roughly a third smaller.</strong> Trimmed redundant packaging so the download and install footprint shrink, with no change to what the app does.</li>
</ul>
<p>Still just a calendar. Now a slightly better one. Happy (approximately) Pi Day.</p>
<p>KashCal is free and open source. <a href="https://f-droid.org/packages/org.onekash.kashcal/" target="_blank" rel="noopener noreferrer" class="">Get it on F-Droid</a> or read <a class="" href="https://kashcal.onekash.org/docs">the docs</a>.</p>]]></content:encoded>
            <category>Releases</category>
            <category>Announcements</category>
        </item>
        <item>
            <title><![CDATA[App lock: a curtain for your calendar]]></title>
            <link>https://kashcal.onekash.org/blog/curtain-for-your-calendar</link>
            <guid>https://kashcal.onekash.org/blog/curtain-for-your-calendar</guid>
            <pubDate>Wed, 01 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[KashCal now has App lock. Hide your calendar behind your fingerprint, face, or PIN on Android, so it stops being everyone's business.]]></description>
            <content:encoded><![CDATA[<p>Your calendar is the nosiest app on your phone. It knows about the dentist, the interview you told nobody about, and the event you just labeled "lunch??". It is a diary that schedules your life.</p>
<p>It is also the app that is wide open when you hand your unlocked phone to a friend to "just look at the photo."</p>
<p>KashCal now has <strong>App lock</strong>. Turn it on, and opening the app throws up a curtain.</p>
<!-- -->
<div align="center" style="margin:2.5rem 0"><div style="display:flex;flex-direction:column;align-items:center;width:260px;height:520px;padding:3.5rem 1.5rem 2rem;border-radius:32px;border:10px solid #05070a;background:radial-gradient(ellipse 80% 55% at 50% 32%, #1B2230, #11151D 60%, #0E1116);color:#eef3f1;box-shadow:0 30px 60px -25px rgba(0,0,0,0.6)"><div style="width:72px;height:72px;border-radius:18px;background:#0E1116;display:flex;align-items:center;justify-content:center;overflow:hidden"><img src="https://kashcal.onekash.org/img/icon-transparent.png" alt="KashCal app icon" width="72" height="72"></div><div style="font-weight:600;font-size:1.25rem;margin-top:1.1rem">KashCal</div><div style="display:flex;align-items:center;gap:0.35rem;opacity:0.62;font-size:0.85rem;margin-top:0.5rem"><svg viewBox="0 -960 960 960" width="14" height="14" fill="currentColor" style="display:block;flex-shrink:0;margin-bottom:2px" aria-hidden="true"><path d="M240-80q-33 0-56.5-23.5T160-160v-400q0-33 23.5-56.5T240-640h40v-80q0-83 58.5-141.5T480-920q83 0 141.5 58.5T680-720v80h40q33 0 56.5 23.5T800-560v400q0 33-23.5 56.5T720-80H240Zm240-200q33 0 56.5-23.5T560-360q0-33-23.5-56.5T480-440q-33 0-56.5 23.5T400-360q0 33 23.5 56.5T480-280ZM360-640h240v-80q0-50-35-85t-85-35q-50 0-85 35t-35 85v80Z"></path></svg><span>Locked</span></div><div style="flex:1"></div><div style="display:inline-flex;align-items:center;justify-content:center;gap:0.5rem;padding:0.6rem 1.8rem;border-radius:999px;background:#3a4a63;color:#eef3f1;font-weight:600;font-size:0.9rem"><svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="display:block;flex-shrink:0;margin-bottom:1px" aria-hidden="true"><path d="M2 12C2 6.5 6.5 2 12 2a10 10 0 0 1 8 4"></path><path d="M5 19.5C5.5 18 6 15 6 12c0-.7.12-1.37.34-2"></path><path d="M17.29 21.02c.12-.6.43-2.3.5-3.02"></path><path d="M12 10a2 2 0 0 0-2 2c0 1.02-.1 2.51-.26 4"></path><path d="M8.65 22c.21-.66.45-1.32.57-2"></path><path d="M14 13.12c0 2.38 0 6.38-1 8.88"></path><path d="M2 16h.01"></path><path d="M21.8 16c.2-2 .131-5.354 0-6"></path><path d="M9 6.8a6 6 0 0 1 9 5.2c0 .47 0 1.17-.02 2"></path></svg><span>Unlock</span></div></div></div>
<p>Flip it on in Settings and your next open is a lock screen, not your week. Unlock with <strong>fingerprint, face, or your PIN</strong>. No new password to invent, no "please create a 6 digit KashCal code." Your phone already knows how to check it is you. We just ask it to.</p>
<p>It is one more way KashCal stays <a class="" href="https://kashcal.onekash.org/docs/privacy/overview">private by default</a>: no account, no trackers, and now a lock on the door. <a class="" href="https://kashcal.onekash.org/docs/features/app-lock">Here is how App lock works</a>.</p>
<p>New here? <a href="https://f-droid.org/packages/org.onekash.kashcal/" target="_blank" rel="noopener noreferrer" class="">Get KashCal free on F-Droid</a>. No account, no ads, open source.</p>
<p>Your calendar. Your eyes only.</p>]]></content:encoded>
            <category>Announcements</category>
            <category>Privacy</category>
        </item>
        <item>
            <title><![CDATA[My calendar can do this. Can yours?]]></title>
            <link>https://kashcal.onekash.org/blog/kashcal-challenge</link>
            <guid>https://kashcal.onekash.org/blog/kashcal-challenge</guid>
            <pubDate>Tue, 30 Jun 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[The free, open-source things KashCal does that most Android calendar apps charge for or skip. Take the KashCal Challenge, tag #KashCal, and dare a friend.]]></description>
            <content:encoded><![CDATA[<p>A handful of things KashCal does that most calendar apps charge for, bury, or skip.
All free, no account. Show off the one you like and dare a friend to match it.</p>
<!-- -->
<div align="center" style="display:flex;gap:0.9rem;justify-content:center;flex-wrap:wrap;margin:2rem 0"><img src="https://kashcal.onekash.org/img/screenshots/Quick-Event-Add.png" alt="KashCal turning plain text into an event" width="200" style="border-radius:14px;box-shadow:0 14px 34px -18px rgba(0,0,0,0.5)"><img src="https://kashcal.onekash.org/img/screenshots/Insights.png" alt="KashCal Insights showing on-device time analytics" width="200" style="border-radius:14px;box-shadow:0 14px 34px -18px rgba(0,0,0,0.5)"><img src="https://kashcal.onekash.org/img/screenshots/Apple-Calendar-Connect.png" alt="KashCal connecting an iCloud calendar on Android" width="200" style="border-radius:14px;box-shadow:0 14px 34px -18px rgba(0,0,0,0.5)"></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-list">The list<a href="https://kashcal.onekash.org/blog/kashcal-challenge#the-list" class="hash-link" aria-label="Direct link to The list" title="Direct link to The list" translate="no">​</a></h2>
<ul>
<li class=""><strong>A new event from Quick Settings.</strong> Drop a KashCal tile next to your flashlight and Wi-Fi toggles. Pull down from the top of the screen, tap it, and you're typing a new event, even over whatever app you were in. The fastest way to catch a plan before it slips.</li>
<li class=""><strong><a class="" href="https://kashcal.onekash.org/docs/events/smart-event-add">Plain-language events.</a></strong> Type "Yoga every Tuesday 7am at the studio" and it becomes a real recurring event, with the time, the place, the repeat, and the title each landing where they belong.</li>
<li class=""><strong><a class="" href="https://kashcal.onekash.org/features/share-event-as-card-android">Share an event as a card.</a></strong> One tap turns any event into a designed card and a tap-to-add file, sent together in any chat. Your friend taps once to drop it on their own calendar. No screenshots to retype, no invite that drags in extra apps.</li>
<li class=""><strong><a class="" href="https://kashcal.onekash.org/features/all-your-calendars-google-outlook-android">Real CalDAV, out of the box.</a></strong> Nextcloud, Radicale, Fastmail, Baikal, Zoho, SOGo, Stalwart, and more, syncing two ways with no middleware app, no relay server, and no second thing to install. Your phone's Google and Outlook calendars ride along too.</li>
<li class=""><strong><a class="" href="https://kashcal.onekash.org/features/icloud-calendar-android">iCloud on Android.</a></strong> Sign in once and your iCloud calendars sync both ways, shared family calendars included. No bridge, no export-import dance.</li>
<li class=""><strong><a class="" href="https://kashcal.onekash.org/features/calendar-insights-android">Time insights, on-device.</a></strong> Busiest day, meeting-free days, weekend load, your next free block. It works the numbers out on your phone, no work account and no cloud crunching your schedule.</li>
<li class=""><strong><a class="" href="https://kashcal.onekash.org/features/beautiful-calendar-android">Seven views, your way.</a></strong> Month, month-full, agenda, day, three-day, week, and year. Pinch to zoom, drag to reschedule, and color any event from a curated palette or the full color wheel.</li>
<li class=""><strong>Private and free.</strong> No KashCal account, ever. No ads, no trackers, no analytics. Credentials are encrypted with the Android Keystore, and the whole thing works offline from first install. Free and open source under Apache-2.0.</li>
</ul>
<p>None of the above is a trial, a teaser, or a "pro" tier. It's the whole app. Found
the one thing your old calendar couldn't do? That's your challenge entry.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="take-the-challenge">Take the challenge<a href="https://kashcal.onekash.org/blog/kashcal-challenge#take-the-challenge" class="hash-link" aria-label="Direct link to Take the challenge" title="Direct link to Take the challenge" translate="no">​</a></h2>
<ol>
<li class=""><strong>Get it, then brag.</strong> <a class="" href="https://kashcal.onekash.org/docs/getting-started/install">Install KashCal</a> and find the thing your old calendar couldn't do.</li>
<li class=""><strong>Post it.</strong> A screenshot or one line, anywhere you hang out, tagged <strong>#KashCal</strong>.</li>
<li class=""><strong>Dare a friend.</strong> "Mine can do this. Can yours?" Then pass it on.</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="lines-to-steal">Lines to steal<a href="https://kashcal.onekash.org/blog/kashcal-challenge#lines-to-steal" class="hash-link" aria-label="Direct link to Lines to steal" title="Direct link to Lines to steal" translate="no">​</a></h2>
<p>Pick the one that's true for you, copy it, and post it wherever you already hang out:
Reddit, Mastodon, X, Lemmy, a group chat. Tag it <strong>#KashCal</strong> and dare a friend to
match it.</p>
<blockquote>
<p>My calendar opens a new event from the Quick Settings panel, before I've even left the app I'm in. Can yours? #KashCal</p>
</blockquote>
<blockquote>
<p>I type "dinner with mom friday 7pm" and my calendar just makes the event. No form. Free, open source, no account. #KashCal</p>
</blockquote>
<blockquote>
<p>Finally syncing my iPhone family calendar on Android with no middleman. #KashCal</p>
</blockquote>
<blockquote>
<p>Found an Android calendar with real CalDAV out of the box, on-device time insights, and a 92-color wheel. No ads, no trackers, no paywall. #KashCal</p>
</blockquote>
<div align="center" style="margin:2rem 0"><img src="https://kashcal.onekash.org/img/screenshots/ICS-Subscription.png" alt="KashCal color picker showing the named color peru, hex CD853F" width="220" style="border-radius:14px;box-shadow:0 14px 34px -18px rgba(0,0,0,0.5)"><div style="font-size:0.85rem;opacity:0.7;margin-top:0.6rem">92 colors, each with a real name. Yes, "peru" is a color. We were as surprised as you.</div></div>]]></content:encoded>
            <category>Announcements</category>
            <category>Features</category>
        </item>
    </channel>
</rss>