Karot

Privacy Policy

Last updated: 22 October 2026

Karot is a small app for two people who miss each other. You connect with someone by sharing a code. Either of you can tap to say you thought of the other; the tap lights their screen and their widget. A tap can carry one thing more — a drawing, a few words, a short recording, a photograph or one of Karot's signs, which then stays in the book the two of you share. You can send letters, typed or spoken, that arrive on a day you choose. Each of you sees the other's city, their local time, and, if they added it, the day and month of their birthday.

There is no feed, no advertising, no follower count, and Karot never shows anyone how many times they were thought of.

This page says exactly what Karot stores, who else sees it, and how long it lasts. Where something is uncomfortable, it is written down here rather than left out.

Karot is run by Davit Vardanyan, an individual. You can reach us at hello@karot.love. This policy is governed by the law of the Republic of Armenia.


The short version


Your account: no sign-up, and a way to keep it

The first time you save your profile, the app asks our authentication service for an anonymous account (older versions of the app asked the first time Karot opened). It sends an empty request: no email address, no phone number, no password, no name. What comes back is a random account id (a uuid) and a token, which the app keeps on your phone.

Until you keep your account, that token is the whole of it. There is nothing else to prove ownership with.

“Anonymous” here means you never have to sign in. It does not mean we do not know who you are: the name you choose, your photo, your city, your coordinates, your time zone, your language and, if you add it, your birthday are all stored against that same account id, and the id itself is given to each person you connect with.

Three consequences for an account you have not kept, all of them real:

Our authentication service keeps records of its own. It counts anonymous sign-ins per IP address per hour, to stop abuse. For each phone your account is open on, it keeps the IP address and the user-agent string from which that phone last renewed its session — replaced at each renewal, and deleted when that session ends or your account is deleted. And it keeps an audit log in our own database: each sign-up, sign-in, renewal of a session and sign-out, and each change to the account, with its time, your account id and the IP address it came from — for a kept account also its address, and at a sign-in with Google the name Google sent. That log is deleted after thirty days, whoever it names; deleting your account does not remove your entries any sooner. We will not tell you we never see your IP address, because that would not be true.

Keeping your account for a new phone

You can choose to keep your account, so that a new phone can open it, with your people, your days and your letters. It is optional and free, and nothing asks for it when you first open Karot. A few days after you connect with somebody, Karot offers it once, on Home; it is also in Settings, as the last row under “Your people”, once you have somebody to keep. Keeping adds one way of signing in to the account you already have: the account id stays the same, and nothing is copied or moved.

There are three ways, and the app shows only those that are switched on: Sign in with Apple (on iPhone), Google (on iPhone and Android), or an email address, confirmed with an eight-digit code we send to it, which works for ten minutes. There is no password, and none can ever be set: our server refuses one outright. Later, on that same row — which then says how your account is kept, “Kept with Apple” for example — you can add another way, or change the address.

What is stored when you keep your account, by our authentication service, against your account id:

Nobody you are connected to sees how you kept your account, or whether you did. Use your own Apple Account, Google account or address: whoever controls it can open your Karot.

Whether an address keeps a Karot can be found out. Typed into “I already use Karot”, an address that keeps nothing is answered “Nothing is kept with this address”, and one that keeps a Karot is sent a code to open it; keeping a Karot with an address that already keeps another says that the address cannot keep this one. So anyone who types your address into Karot can learn that it keeps a Karot — but not whom it holds, or anything in it. Every code that can open an account by email is mailed to that account's own address, so an attempt to open yours arrives in your inbox, and nothing opens without the code.

More than one phone. Any phone where you continue the way you kept your account opens your Karot and is told when your people think of you. A kept account stays signed in on each phone until you sign it out. In Settings, on the row under “Your people” that says how your account is kept, Sign out of this phone removes this phone's push address and widget key from our server first, then ends its sign-in; Sign out other phones does the same for every other phone at once — a phone you lost, for example. One gap we would rather state: a phone signed out that way keeps the access it already had for up to an hour. If Karot is opened on it within that hour, it registers itself again; it is signed out when it next renews its sign-in, but that registration can go on receiving your notifications until our clean-up removes installs that have been silent for 180 days. If that may have happened, choose Sign out other phones once more.

A kept account is never swapped for a new one behind your back. When a phone's sign-in ends — you signed it out, another phone signed it out, or the account was deleted — that phone shows nobody, its widget goes dark, and it offers to continue the way you kept the account. Nothing is deleted by it.


What Karot stores about you

Your profile

Karot never asks for your location and contains no location code at all, on either phone. It cannot know where you are. Your city is one of a list of 627 that ships inside the app, and the app sends that city's own centre coordinates — the same numbers for everyone who picks that city. The app sends that city's time zone with it. Our server does not check the one against the other: it accepts whatever time zone the app sends.

What the app does read is your phone's time-zone setting — not where the phone is, only what its clock is set to, which needs no permission. It uses it to suggest your city, and it also follows it: when that setting changes, say after a flight, the next time you open Karot it moves your city to one in the new zone by itself, and your people see the new city and the new hour. It does this only when the zone changes (a city you corrected within the same zone is left alone), and never when the new zone has no city in the list. So a trip across time zones is something your people will see.

The last time you had Karot open. Karot keeps one time for this, overwritten each time and never kept as a history, and written at most once every two minutes — and only while Karot is open on your screen. It exists for one line only: “You are both up”. While you are looking at Karot, the page of someone you are connected to shows that line when the two of you live in different time zones, each of you has kept the same time zone for at least a day, it is between midnight and five in the morning for one of you, both of you have had Karot open on your screen in this quarter of an hour or the one before it, and they have not marked themselves asleep. Our server works that out and sends each app a yes or a no. The time itself is never sent to anybody, and the line is never a notification.

But a yes or a no that changes is information too, and we would rather say what it gives away. During the hours when that line can appear, someone you are connected to who keeps Karot open and keeps looking can tell when you opened Karot, and roughly when you stopped — to the quarter of an hour, because the line only ever turns off as a quarter of the clock begins (on the hour, a quarter past, half past or a quarter to), never at the minute you put your phone down. Someone could also choose a city where it is night for them to see this during your day; a time zone only counts once it has been theirs for a day, so they could move that window at most once a day.

Only Karot open on your screen counts. The app also refreshes by itself — when a notification reaches your phone, when it makes a notification's picture, and, on Android, about every fifteen minutes while a Karot widget is on your home screen — and the widget and the iPhone's notification extension fetch from our server on their own (a watch only gets your phone's copy); none of those touches this time, so none of them can make you look awake. A version of Karot from before this rule never writes it at all, so for someone who has not updated, the line does not appear. The time is read by our server's own functions and by nothing else: not by the people you are connected to, and not by your own app.

Your settings

Your quiet hours (the window when alerts are held rather than rung) and whether you want the morning reminder when you have not thought of someone for five days (on unless you turn it off). We only create this row once you change one of them or send yourself a test notification; before that, the server simply applies a default window of 22:00 to 07:00 without storing anything. Note that the row is created whole, so turning the reminder off also records a 22:00–07:00 quiet window you did not choose. It still has a place for simple mode, a setting older versions of the app had; the current app never sets it.

The row also holds the time you last asked for a test notification, which is how we limit that to one every fifteen seconds.

Two small records sit beside it, so that a reminder is never sent twice. For the quiet-heart reminder, one row per person: when you were last reminded, and about which connection — overwritten each time, never more than once a week, and kept until your account is deleted. For birthdays, a note of who was reminded about whom on which day, deleted about a week later.

Quiet hours are read in your city's time zone, so together they are a fairly direct statement of when you sleep. Nobody else can read them — not even the person you are connected to — but we hold them and act on them, because the server is what decides when a phone rings.

Your connections

When two people connect, we store one row: an id, the two account ids (the inviter first, the person who accepted second), when it began, and, if it ends, when it ended.

Alongside it, each of you has a private row about the other: the name you gave them, the light colour you chose, and two flags — paused, hidden from recaps — plus the order they appear in. The other person can never read their half of this, at any time. That is the point of a silent pause.

Invites

An invite is an eight-character code, who made it, and the name that person gives the person they are inviting (“Emma”). Once someone uses it, the row also records who accepted, when, and which connection it became. (Karot used to ask, as well, which of ten relations — “Mom”, “Brother”, “Friend” … — somebody is to you. It no longer asks, keeps none, and has erased the ones chosen before.)

Two honest notes. That name is written about a person before that person has an account; whoever holds the unused code is shown it — together with the inviter's name, photo or mark — before deciding whether to accept, and on acceptance it becomes the inviter's private name for them. And the code is a bearer token: anyone holding an unexpired, unused code can pair with whoever made it. Only the person who made the invite can read the row itself.

We also keep a count of wrong codes — your account id and a timestamp, nothing else — so that ten wrong codes in an hour or thirty in a day stop every further attempt. Without that, a script could guess its way into a stranger's family. Those rows sit in a part of the database with no read access for anyone: not the app, not your partner, not our own server functions. They are deleted after a day.

Taps

Every tap is a row: who sent it, on which connection, the exact moment it reached us, whether it was a good morning, a good night or a birthday wish, and — this is the part worth being plain about — the sender's own local date and wall-clock time when they tapped, kept in the zone they were in then and never rewritten if they later move city.

Over months that is a fine-grained record of when you get up and when you go to bed, and the labels name those moments outright. Read together with the exact timestamp, it also shows which time zone you were in on each day, so a year of history is also a record of when you travelled. All of it is shown to exactly one person: the one you connected with.

A few smaller truths: a bare tap within two seconds of your last one is merged into it, and a later evening tap takes the “good night” label off an earlier one. When two taps cross — each sent before the other could arrive — the two rows are linked, and both of you are shown that you thought of each other at the same moment. And there is a brake: more than sixty taps and moments to one person within ten minutes are refused.

About counting. Karot shows no tally anywhere. No screen totals your taps, no screen ranks who cared more, and the history the app receives contains booleans, labels and times rather than sums. But the server keeps every individual tap with its timestamp, and sends each one to the app, so the list can be counted by hand. The true sentence is: we never show you a count, and we never rank anyone by one — not that the taps are not there. There is one exception, described under notifications.

This paragraph is about tallies of taps, shown to you or to the other person. It is a different thing from the anonymous counting of how the app is used, which is described under “Google Analytics for Firebase, for counting” below. Neither one counts the other.

What you leave with a tap

A tap can carry one thing more — Karot calls it a moment. It is a row of its own, tied to that tap: who left it, on which connection, when, and what kind it is, with its contents:

Recordings and photographs sit in private storage, described below with the photos. Also stored: when the person you left it for first opened it — their app uses it to stop showing it as new, and our server never sends it to you — and, for each of you, whether you hid it from your own book, and when.

What you leave each other is kept. A moment sent from version 1.1 of the app or later is kept from the moment it is sent, with no expiry, in the book the two of you share — the same moment, on both phones — until whoever sent it deletes it, the connection ends, or either of you deletes your account. For a day it is also in the thread between you, with the newest things you have left each other; something of theirs you have not opened stays there for up to three days. Leaving the thread deletes nothing: it is still in your book. A newer moment never replaces an older one. A moment sent to several of your people at once is a moment of its own for each of them, exactly as if it had been sent to each alone; its recording or photograph is stored once, and stays for as long as any of their moments still points at it.

From an older version, a moment still lasts a day. A moment sent from a version of Karot before 1.1 keeps the promise that version made: twenty-four hours after it was sent nobody can open it any more, and our hourly clean-up deletes it within the hour after that; its recording or photograph goes about ten minutes later. It stays only if both of you asked to keep it, which only a version before 1.1 can ask: either of you can, the other can see that you asked — not when — and until both of you have, you can withdraw your own vote. So between a phone on 1.1 and one on an older version, what the older one sends can no longer be kept by both, and it fades. A moment left with a birthday wish, and every birthday card, is kept from the start, whichever version sent it. Nothing that already faded comes back, and a moment sent from 1.1 to someone who has not updated yet reaches them already kept.

Hiding. Either of you can hide any moment — one you sent or one you received — from your own book. It then leaves your book, your thread, your Home and your widget, and your “On this day” and “Their voices”. It is not deleted: the other person keeps it exactly as before, is never told, and nothing they can see changes. We store that you hid it, and when, where no app can read it but yours, and yours only as the list of what you hid (“Hidden from your book”, at the back of the book), from which you can put it back. Hiding takes a moment off your shelves; it does not lock it — your own app can still open it and fetch its recording or photograph if asked to. On a version before 1.1, the person whose birthday it was can still let a birthday wish or a card go, which deletes it for both of you; from 1.1 they hide it instead.

Deleting. Whoever sent a moment can delete it, whatever its age and whatever its kind — a birthday card too. It is deleted for both of you at once, from our database and so from both books, both threads and both Homes; the other person is not told, and sees no trace of it. Its recording or photograph is queued for removal at once and is gone within about ten minutes, unless the same file still belongs to a moment you sent to someone else at the same time. The tap it came with stays: the day still shows that you thought of them. The person you sent it to cannot delete it: they can hide it, or end the connection, which deletes everything between you (see “When a connection ends”). The one exception is a version before 1.1, on which the person whose birthday it was can still let a birthday wish or a card go, and that deletes it for both of you — from your book too.

Things about moments we would rather state than have you discover:

Your status

If you mark yourself sleeping or free, we keep one row: which of the two, when you set it, when it runs out, and when “free” last notified your people (so that switching it off and on cannot ring them repeatedly).

There is only ever one such row per person — a new status overwrites the old one — so there is no history of statuses you have set. Turning your status off does not delete the row; it only marks it as already run out, and it is deleted about a day later. The people you are connected to can read it only while it is live: once it has run out or you have turned it off, only your own app can. So if their app happens to be open and refreshing at the moment you switch “sleeping” off, it sees the status go; afterwards, nothing lets it look up when that was. When “free” last rang your people is not readable by any app, yours included.

“Sleeping” never notifies anyone; it tells our server to hold alerts back from you, the same way quiet hours do. “Free” is the one that rings your people, at most once every thirty minutes.

Letters

A letter is its text (up to 5,000 characters), or a recording (up to three minutes), or both; the day you chose for it; the exact moment it is due, which is 09:00 in the recipient's time zone; the moment it actually landed; the moment it was opened; the moment it was cancelled, if it was; and when it was written. We also keep, server-side only, a note of whether the arrival notification was sent.

A letter can instead be one to open when the time comes (“Open when…”). Then we also keep which moment it is for — one of Karot's own by name, such as “when you miss me”, or a few words of your own, up to 60 characters — which the reader sees on the sealed envelope, and which the notification of its arrival never names. It reaches them the next morning at 09:00 their time and waits, sealed, until they choose to open it; opening it tells the writer, as for every letter.

If you choose to let them know a letter is on its way, the server also picks a number from one to three, at random, which is never shown to anyone: on that many mornings before the day, from nine in their time, their app is told that a letter from you is coming — never the day, and never what is in it.

If the recipient's city changes before a letter arrives, the letter is re-timed: it keeps the calendar day the sender chose and is re-anchored to 09:00 in the new zone. A letter someone else wrote can therefore arrive at a different moment because you moved.

Three things about letters that we would rather state than have you discover:

The day you will see each other

Either of two connected people can set the day they will see each other (“Until we meet”). We keep one row for the two of you: the date, the few words written beside it if any (up to 40 characters), who set it and when. Both of you see it, in the app and on your widgets, until the day has passed. Either of you can remove it at any time; otherwise it is deleted a couple of days after the day, and no later than the night after the connection ends or either of you deletes your account. It is never sent in a notification.

Your devices

For each install: which platform it is, the app version, its language, when the app last registered it with our server, when a notification was last sent to it, when its widget — or, on iPhone, its notification extension — last fetched from our server, and the address your phone can be reached at for notifications — a Firebase registration token on Android, or the raw APNs device token on iPhone, plus a second token for the iOS 26 home-screen widget.

We also store a keyed hash of the widget's own credential (never the credential itself, which is shown once and kept on your phone). No app client can read that hash, not even yours.

At most ten installs are kept per account; an eleventh registration drops the least recently used one. If Google or Apple tells us an address is dead while sending to it, we clear that address at once. Nothing checks an address in advance, so a dead one is forgotten on the next notification sent to it, not the moment it dies. Signing a phone out of a kept account removes its install from our server first (see “More than one phone”).

One awkward mechanic: a push address identifies a device, not a person. When your phone registers its address, the server clears that same address from any other device row holding it — including a row belonging to a different Karot account on the same phone. Nothing about that pairing is stored, but the comparison does cross account boundaries, so we cannot claim that two accounts on one phone are invisible to us.

Your plan

Which plan you are on — free, Karot Plus or Karot Family — when it runs out, and where it came from: a store, a place in somebody's Karot Family, or a plan we gave by hand.

If you buy a plan, you buy it in Google Play or the App Store, and our server keeps a record of the subscription: which store, whether it was a test purchase, the store's own id for it (Google Play's purchase token, Apple's original transaction id), the plan billed now and any change set for its next renewal, whether it is active, when it renews or ends, whether it will renew, and the account id the purchase carried; every change our server found in it, with the store's own answer as it arrived — which includes the price and the country of the store you bought in, but not your answers to Google Play's question about why you cancelled, which our server drops before it keeps the rest; and every Karot account that has owned it, from when, how it came to each (bought on it, first reported from its phone, restored to it or handed back to it), and what told our server (the app, the store's own notification or our daily check). No card number, name, email or postal address: the stores never pass them to us. How the store and our server talk about it is under “What leaves Karot”.

Karot Family is shared by its buyer's choice, one person at a time. Whoever holds Karot Family chooses up to five of the people they are connected to, to share it with; being connected to them gives nothing by itself. If you give places, we keep who you gave each one to, whether you chose them or an invitation carried the place, when, and when and how it ended — you stopped sharing, they left, or one of you ended the connection — for as long as the place lasts and, once it has ended, until a year has passed since you gave it: a place given in the last 30 days, and every person given one in the last year, still count towards the places your Family can give. If you let an invitation carry a place, the invitation notes it until it is used or runs out. A place given in a Karot Family bought in a store is also noted against that subscription — who was given it, and when, but not by whom — for a year from the day it was given, so that the places one subscription can give do not start again when it moves to another account; that note stays with the subscription even if its buyer deletes their account.

If somebody gives you a place, your app is told who shares their plan with you, by the name you have given them, and the date their plan runs out — not how they paid, and not who else they share it with. Whoever gives you a place is told nothing about you but what they already see: not whether you pay for a plan of your own, and not whether somebody else has given you a place too.

What you write to us

Settings → “Tell us what you think” sends one message to us. We keep what you wrote, which of the three kinds you chose (an idea, something's wrong, something else), your account id, and three facts about the phone — which platform, which version of the app, which language — because a report without them cannot be acted on. The screen says so in words before anything is sent.

Three things about it we would rather state than have you discover:

Five messages a day, and between 4 and 2,000 characters.


What the other person can see

While a connection is active, the person you are connected to can see:

They cannot see: your quiet hours, whether you are inside them right now, your settings, your devices or push addresses, the name you gave them, your light colour, or whether you have paused them or hidden them from recaps. Those are yours alone, and they stay hidden from the other person permanently. Nor are they ever sent your language, when your profile was created or last changed, the last time you had Karot open, when you opened what they left you, what you hid from your own book, or which plan you are on — unless you share your Karot Family with them. Nor whether you kept your account, how, or with which address.

One exception worth knowing: pausing someone hides their alerts from you, but it does not hide your status from them. Only ending the connection does that.


What leaves Karot

Three companies receive something from us, and one of them, Resend, only for an account that is kept. Nothing else does — Supabase, which runs the servers everything already sits on, is described further down rather than here. Google is named in five of the six sections below, because it receives five unrelated things through unrelated pieces of its software. The first five sections are things our server or the website hands over, or that happen in Apple's or Google's own sign-in or purchase window; the last is the only one the app on your phone sends by itself, and the only thing on this page you can switch off.

Google and Apple, for notifications

To make a phone ring, we hand the notification to Google's Firebase Cloud Messaging (Android) or Apple's push service (iPhone). What we send them is:

The name travels twice: once inside the sentence, and once as a field of its own. It is in clear text.

So a push provider can see that a tap or a letter reached you, from whom, at what second, and under what name you keep that person — even though our own server is in the EU. The connection id is stable, so over time they could see which two accounts push to each other and how often. That is a relationship, without content.

We never send the text of a letter or its recording, and never what was left with a tap — not a note's words, not which sign, not a drawing, a photograph or a recording. When a drawing, a sign or a photograph came with a tap, the notification names it only by its id, and your phone fetches the picture from our server itself — on Android through your signed-in app, on iPhone through the widget's key (see “What Karot keeps on your phone”), and a photograph through a signed link that expires after an hour — so the picture never passes through Google or Apple. The letter notification says only that a letter from a given person has arrived. The test notification from the device-check screen carries no name at all.

Silenced taps still travel. When a tap must not ring — because you are in quiet hours, marked asleep, or have paused that person — we still send your phone a silent message so the widget can catch up. It carries no name and no sentence, but it does carry the connection id, the tap's id, its time and its label, and, when something came with it, which kind and that moment's id. The provider learns that a tap happened even when you chose not to be told.

We ask Google and Apple to hold an undelivered message and then drop it: four hours for a tap, twelve hours for a summary of taps held overnight or for a birthday or quiet-heart reminder, two days for a letter, five minutes for a test, and for “free now” only as long as that window lasts. The iOS silent refresh is sent with “deliver now or never”. What those companies log about having handled a message is theirs, not ours, and we have no copy: there is no delivery log anywhere in our database.

On Android there is one more thing, which is Google's code rather than ours: the Firebase library registers your install with Google and reports its own delivery telemetry to Google, independently of anything Karot asks for. It starts doing this when the app process starts, before you have connected to anyone. On iPhone, notifications go straight to Apple and no Google library takes any part in them — but a Google library is in the iPhone app: the measurement one described below.

Apple and Google, if you keep your account with them

Only if you keep your account with Apple or Google, or open it with one of them on another phone. Signing in happens in Apple's or Google's own window — Apple's sheet on iPhone; Google's own sheet on Android, and Google's page in the phone's browser on iPhone and on Android phones without Google Play services — so that company sees that you are signing in to Karot, as it does for any app. Karot sends them nothing about you: not your name in Karot, not your people, nothing you wrote. Our servers then talk to them for two things:

Resend, for the mail with your code

Only for an account that is kept, or is being kept. Every mail our authentication service sends — a code to keep your account with an address, to open it on a phone or to change its address, and the rare notice that carries no code — goes to that address through Resend, which delivers it. Resend receives the address, the subject line (for a code, the eight-digit code itself) and the mail: a few lines in your language, and nothing to click. Nothing else about you, and nothing about the people you are connected to. The mail comes from no-reply@karot.love, where nobody reads replies; the address to write to is at the end of this page.

Resend works for us as a service provider and receives nothing for its own purposes. The mail is sent from Resend's region in Ireland, but Resend stores what it keeps in the United States: each mail — to whom, its subject line, its words and whether it was delivered — for thirty days, after which it is deleted.

Google Play and Apple, for your plan

Only if you buy Karot Plus or Karot Family. You buy it in Google Play's or Apple's own purchase window, and you pay Google or Apple, never us: we never see your card, your name, your email or your address, and nothing about how you paid. Google and Apple keep their own record of the purchase, under their own privacy policies — it is your dealing with the store, as it is for any app you pay for.

What Karot adds to the purchase is your account's random id, as the store's own account token (Google Play's “obfuscated account id”, Apple's “app account token”), so that the store's record says which Karot account the subscription is for. Our server then asks the store's own server — Google's Play Developer API, Apple's App Store Server API — about that purchase: whether it is active, which plan, and when it renews or ends. It asks again whenever the store notifies us that one of our subscriptions changed (Google's notices come through its Cloud Pub/Sub service, Apple's straight to our server), and now and then on its own, to catch what a notice missed. It confirms each Google Play purchase back to Google, and if a subscription moves to another of your accounts — a restore after reinstalling, or a plan handed back — it tells Apple the new account id. No billing service and no other company stands between Karot and the store.

Firebase Hosting, for the website

karot.love is static files served by Google. The site sets no cookies, loads no fonts, runs no analytics and makes no third-party requests of any kind.

Invite links are of the form https://karot.love/j/CODE. The code is in the address, so Google's hosting logs record it, along with the IP address and browser of anyone who opens an invite link in a browser, on Google's retention schedule. The code is a bearer credential, so its presence in a log is a real exposure. It is narrowed rather than removed: eight characters from a 31-character alphabet, single use, expiring seven days after it is made, with wrong guesses limited. We ask browsers not to pass the address on as a referrer and not to index those pages.

The link also travels through whatever messenger you use to share it.

Google Analytics for Firebase, for counting

The app counts what people do with it, so that we can tell which parts of it are used and which are not. It runs on both Android and iPhone, and the events go from your phone straight to Google — our own server never sees them. It is the only thing on this page you can switch off: Settings → About Karot, directly under the list of things Karot promises never to do.

What is sent is a closed list, and it is the shape of the code that keeps it closed rather than a promise: every event is one of a fixed set of names the app itself holds, and its only details are values chosen from fixed sets. There is no field anywhere in it that takes something you typed.

What is never sent: your account id, your name or anybody's name, your city, your photo, a letter, a note, a drawing, a recording, a connection id, a phone number, an email address or anything from a sign-in — or anything at all about the person you are connected to. Google stamps each event with the moment it arrives, as any such service does, but nothing in the event says what the moment was about. They never agreed to any of this, and the rule that holds everywhere else in Karot holds here.

There is no advertising identifier in it. On Android the app removes the advertising-id permission that Google's library would otherwise add to it, and switches off that library's collection of both the advertising id and the Android device id; on iPhone it switches off the identifier-for-vendor, which is the equivalent. There are no adverts anywhere in Karot and nothing here feeds any, and there is no tracking-permission prompt because there is nothing to ask about.

The switch is not a filter in front of a collector that goes on collecting. Turning counting off is passed to Google's library itself, which stops gathering and deletes the app-instance id it was using; nothing is held back to be sent later. The library also starts switched off at every launch and is switched on a moment later only if you have not turned it off — so a phone restored from a backup, which carries your answer but not the library's own state, cannot count anything before your answer has been read.


Where the servers are

Everything Karot stores lives in one Supabase project in Frankfurt, Germany (eu-central-1): the database, the authentication service — with the address and the sign-in an account is kept with, and Apple's token for it — the file storage for photos and recordings — yours, and those left with a tap — and the small server functions that send notifications, deliver letters and tell Apple when an account kept with Apple is deleted. Supabase runs that infrastructure for us and can access what is on it.

Traffic between your phone and that project is encrypted. What leaves it, leaves only to the recipients named above.


Photos, and why they are readable by anyone with the link

Your profile photo is stored in a public bucket. A request to its address returns the file with no sign-in and no permission check.

This is deliberate. The home-screen widget holds no session, and neither does a notification image, so the photo has to be fetchable by address alone. What protects it is that the address is a secret: the file's name is your account id followed by 32 random characters. Nobody can list the bucket, so the address cannot be discovered — only shared, forwarded or logged.

The consequences we should say out loud:

Do not put anything in your profile photo that you would mind being seen by someone who got the link.

Voice recordings are the opposite, and genuinely protected. They live in a private bucket. Nothing in it can be fetched by address alone: playback goes through a signed link that the app asks the server for and that expires after an hour. A recipient can get such a link only after the letter has arrived, has not been withdrawn, and has been opened — and before opening, their app does not even hold the file's name to ask about. The sender can always play back their own recording.

What you leave with a tap is private too. Its recordings and photographs sit in two more private buckets, fetched the same way, through signed links that expire after an hour. There is no opening to wait for: either of you can get a link to a moment's file while the moment is alive — for as long as it is kept, which from 1.1 is until its sender deletes it or the connection ends; from a version before 1.1, its day, or for good once you both keep it. Hiding a moment does not stop your own app from asking. Your widget — and, on iPhone, the notification extension — gets the same kind of one-hour link, through the widget's key, for a photograph someone left you.

One limit: a signed link, once issued, cannot be recalled. If one were copied out of the app it would keep working for the rest of its hour, whatever happened in the meantime — unless the file itself had been deleted by then.


What Karot keeps on your phone

The app stores a small number of things locally, in ordinary app storage. They are inside the app's private sandbox, so no other app can read them, but they are not encrypted by Karot itself. The one exception is a kept account's session on iPhone, which is in the Keychain (below).

Backups differ between the two platforms, and we will not pretend otherwise. On Android, only the display preferences are included in cloud backup and phone-to-phone transfer; the session token, the note after a sign-out, the widget key, the device id, saved phone numbers, the widget data and notification pictures are deliberately excluded. On iPhone there is no such split for the rest of it: it sits in the app's standard preferences, which an iCloud or computer backup includes and a restore can carry to a new phone — and for an account you never kept, that copy of the session is its only way back. A kept account's session is different: it is kept in the iPhone's Keychain, for this device only, which no backup carries to another phone; a phone restored from a backup opens on “Welcome back” instead, and you continue the way you kept your account. (Should the Keychain ever refuse to store it, the app keeps the session in its ordinary storage rather than lose it.) The notification pictures and the widget's copies sit in the storage the app shares with its widget and extensions, which a backup does not exclude either.


How long things last

Some data has a schedule. Most does not.

Deleted on a schedule (housekeeping runs every hour; file deletion every ten minutes):

An unused invite7 days after it is made, deleted a day later
A used invite30 days after it was accepted
Wrong invite codes1 day
Something left with a tap from a version before 1.1unreadable a day after it was sent, unless you both kept it; deleted within the hour after that
Its recording or photographabout ten minutes after the moment itself
Something its sender deletedat once; its recording or photograph within about ten minutes
A lapsed statusabout a day after it ran out
The note that a birthday reminder was sentabout a week
Alerts held while you sleptas soon as they are sent; in any case within about 37 hours
An install180 days after the app last opened on it, with its push addresses
A photo you replacedwithin about ten minutes
A profile photo or letter recording nothing points atabout a day after upload
A photograph or recording uploaded for a moment that was never sentan hour or two after upload
A withdrawn letter's recordingwithin about ten minutes
Apple's token for an account that was deleteduntil Apple confirms it is revoked: normally within ten minutes; a failure is tried again, less often each time but at least once a day, until Apple does
The authentication service's audit log30 days, trimmed every night
A place in a Karot Family, once it has endeda year after it was given, or the night after it ends if that is later
The note of a place given against a store subscriptiona year after the place was given
A store subscription's record, with its historyas long as an account owns it; once none does, 60 days after it ends
The run log of our scheduled jobs7 days

Kept with no expiry, until the account is deleted: your profile — with your birthday, and the last time you had Karot open, one time overwritten — your settings, the note of your last quiet-heart reminder, your entitlement, the address and the sign-ins your account is kept with, and Apple's token for it, your connections — including ended ones — and both sides' private notes about each other, every letter, delivered or withdrawn, with its text, and anything you sent us through “Tell us what you think”. A withdrawn letter keeps its text even though nobody can read it again. Every moment sent from 1.1 — and, from an older version, the ones you both kept and the birthday wishes and cards — has no expiry either, and neither has the note of what you hid; but a moment goes when its sender deletes it, and all of them go when the connection ends.

Taps are the exception in the other direction: they are deleted the moment either person ends the connection, and everything left with them goes with them — your whole book together.

One failure we should admit: file deletion is retried ten times and then given up on, with no alarm. If our storage kept refusing a particular file, that file could outlive the row that pointed at it. So: files are normally gone within about ten minutes — not always.

Our database is backed up by our hosting provider on its own schedule, so deleted rows can persist in backups for a period after they are gone from the live database.


When a connection ends

Either of you can end it, and the other is not told.

What happens: every tap between you is deleted, for both of you — the whole shared history, the calendar, the recaps — and every moment with them — your whole book together: drawings, words, recordings, photographs, signs and birthday cards, whenever they were sent, and the notes of what either of you hid; their recordings and photographs are queued for removal at once and follow within about ten minutes, except a file its sender also sent to someone else at the same time, which stays for as long as that other person’s moment does. Letters still on their way in either direction are cancelled and their recordings removed. Held alerts are dropped. If one of you had given the other a place in a Karot Family, the place ends, and connecting again does not bring it back.

What does not happen: the record that the two of you were connected, from this date to that date, stays on our server indefinitely, along with both sides' private notes — the name each of you gave the other, the colour, the flags. Neither of you can read any of it any more; it is retained and reachable by nobody but the database. Letters that already arrived stay with whoever received them, with their recordings. Unpairing does not unsend.


Deleting your account

Settings → About Karot → Delete account.

That runs one command on our server: it deletes your account row. Everything attached to it goes in the same transaction — your profile, your photo record, your settings, your devices and push addresses, your session and its tokens, the ways your account was kept with — the address, and Apple's or Google's identifier — your connections and both sides' private notes, the places you gave in a Karot Family and any you were given, every tap in either direction, every moment either of you left — your whole book with each of your people, and what you hid from it — every held alert, every letter you sent or received, and everything you sent us through “Tell us what you think”. One row survives with your id erased from it: an invite someone else made and you accepted, which belongs to them and is deleted within thirty days anyway. If you kept your account with Apple, Apple's token for it is set aside, with nothing left to say whose it was, only until Apple confirms it is revoked (see “How long things last”).

Your photo, your voice letters and the recordings and photographs of moments live outside the database. They are queued for removal before your account row goes — everything in your own folders, whether or not it was ever sent, the recordings of letters you received, and the recordings and photographs of every moment between you and the people you are connected to, in either direction — and removed within about ten minutes, except a file somebody also sent to someone else at the same time, which stays for as long as that other person’s moment does.

Deleting your account does not cancel a subscription you bought. It belongs to the store, which goes on billing it until you cancel it there; before deleting, the app says so and offers the store's own page. The subscription's record loses your account as its owner: if it came to your account from another one, it goes back to that one; otherwise it waits with no owner, and is deleted 60 days after it ends.

Deleting your account also removes things from the other person's app. A letter exists in one place only, so the letters you sent them disappear from their copy too — including ones already delivered, opened and kept. So do the taps between you, every moment either of you left the other — your whole book together — and the recordings of voice letters you received from them. They are not asked, and not warned.

If your account was kept, every other phone signed in to it is signed out the next time it renews its sign-in, and continuing there the way you kept it says that the account may have been deleted. If you kept it with Apple, our server then tells Apple, which removes Karot from your Apple Account's apps that use Sign in with Apple — normally within ten minutes. Should our server never have received Apple's token for your account, an iPhone asks Apple once more just before deleting; on Android, the app tells you how to remove Karot there yourself: on an iPhone, Settings → your name → Sign in with Apple → Karot → Delete. Deleting your account does not tell Google: if you kept it with Google, Karot stays among the apps connected to your Google Account until you remove it in your Google Account's settings. Resend's copies of the mails it delivered to you stay for their thirty days, and your entries in our authentication service's audit log for theirs (see “Your account”).

If you no longer have the app

For a kept account, the quickest way is still the app: on any phone, open Karot, choose “I already use Karot”, continue the way you kept your account, then Settings → About Karot → Delete account.

If you cannot do that, and your account is kept with an email address — including the one Apple or Google passed on to us — you can ask us to delete it: write to hello@karot.love and name that address. We will not act on a message because it says it comes from that address; anyone can make a message say that. Instead we write first to the address you named, quoting a short phrase, and we delete the account only when a reply to that mail quotes the phrase back. Whether or not anything is kept with that address, our answer to you is the same. The account is then deleted exactly as the app deletes it, with everything described above. If Apple hides your address, the app on an iPhone is the surer way: our mail reaches a hidden address only through Apple's relay, which may not pass it.

An account you never kept has no address to match: none of our tables holds an email address, phone number or username for it. If you write to us, we have no way to find out which row is yours, and no way to check that it is yours; acting on such a request would mean deleting somebody on an unverifiable claim. So for an account you never kept: delete it from the phone that holds it, before you delete the app. If the app has lost the session and the delete button no longer reaches your old account, write to us before uninstalling — the app keeps the old token on the phone, and with it we may still be able to help.


What Karot does not do

Permissions the app does ask for: notifications, at the end of first-time setup, with “Not now” as an equal answer; the microphone, the first time you press record; the camera and photo library, when you choose a profile photo or a photograph to leave with a tap; and, the first time you press Save on a picture, permission to add it to your photos — on iPhone that is add-only, so Karot can put a picture in and can never see one; Android 10 and later need no permission for it, and Android 8 and 9 ask for storage. A picture you save or share is a copy that has left Karot: it lives in your photos or in the app you chose, nothing about it is sent to us or to the other person, and hiding, deleting, fading or unpairing never touches it. On Android the installed app also carries five permissions added automatically by the notification and background-work libraries — none of them prompts you and none grants access to your content. On both platforms the app declares that it may ask the system whether WhatsApp, Viber or Telegram are installed (to offer “Call now”) and, on Android, which phone-maker battery settings screen exists. It can only ask whether such an app exists; it cannot read anything from it. On Android the app also declares the system's own notification display, so that it can hand it a notification's picture.


Children

Karot is not meant for children under 13, and where local law sets a higher minimum age for using a service like this without a parent, that age applies. There is no age check in the app: nothing asks for an account when it first opens, and keeping one asks for a way to sign in, never an age. We do not knowingly keep data from a child below that age. If you believe a child has an account, write to us at hello@karot.love — but please read the section above on deleting an account: one that was never kept cannot be identified from an email alone.


Your rights

Under the law of the Republic of Armenia and, where it applies, the EU General Data Protection Regulation, you have rights over the data described here: to know what is held, to correct it, to have it deleted, to object to some uses of it, and to complain to a data protection authority.

How this works in practice for an app with no sign-up:

We use your data to run the things you asked for: your profile and city, your connections, taps, what you leave with them, letters, birthdays, presence and quiet hours, notification delivery, your plan, and, if you chose to keep your account, the sign-in you chose and the mail that carries your code. We also use a small amount of it to keep the service from being abused: the wrong-code counter, limits on how many letters and invites you can create in a day, a fifteen-second pause between test notifications and a thirty-minute pause between “free now” alerts, and limits on how many sign-in codes can be sent and tried. We do not rely on your consent for any of this, and the permission prompts your phone shows are device permissions, not a legal basis. The counting described above is the one thing here that runs nothing you asked for, and the switch in Settings → About Karot is how you answer about it.


Changes to this policy

If what Karot does changes, this page changes with it, and the date at the top changes too. We will not quietly broaden what is collected and leave the old words standing. Where a change is significant — a new recipient of your data, a new kind of data, a shorter or longer retention — we will say so in the app before or when it takes effect. A change that concerns only something you choose to use, and nobody else's data, is written here from the day it arrives, before anything is collected from you for it.


Getting in touch

Write to hello@karot.love. Karot is run by Davit Vardanyan, an individual, and this policy is governed by the law of the Republic of Armenia. If you are in the EU or the UK and you think we have handled your data badly, you can also complain to your national data protection authority.

The app's “Tell us what you think” reaches us but cannot carry an answer back. For anything that needs one — a question, a request about your data — this address is the only channel, and it is read by a person.