Privacy Policy

Joshi · version 1.5 · last updated October 2, 2026

Joshi is an app for practicing Japanese particles. All of the learning — levels, practice and progress — happens on your device and works offline. Version 1.5 adds one optional feature, the “Sentences” tab with an “AI” badge, which is the only thing that sends anything off the phone. This policy describes what the app actually does in version 1.5.

Short version: no account, no analytics, no advertising. The “Sentences” tab is the only feature that connects to our server — apart from purchases, which go through the App Store. It sends the sentence you type into it and the language the answer should come back in. The server does not store the text of your sentence; your list of sentences and results stays on your device only.

Your account

There is none. The app does not ask for an email address, does not create a profile, and does not sign you in anywhere. Installing and using it requires no personal details.

Where your study data goes

Your progress, answer history, day streak and settings are stored on your device only and never leave it. If you export a backup (Settings → Data → Export progress), the resulting file is yours — it is written wherever you choose to save it, and the app does not upload it.

What you type in the “Sentences” tab, and the answer that comes back, do not feed your progress or your reviews. The app keeps your sentences and their latest results in that tab, separately for each of the two modes — on your device only, in a separate file that it never sends anywhere and that is not part of the progress export. You delete them in the “Sentences” tab, one at a time or all at once; they also go when you delete the app. “Reset all progress” in Settings does not touch these lists — the two are separate things.

You can add a sentence from a result as an example to a particle role — it then appears under “Your examples” on that role's page. These examples also stay on your device only, in a separate file that is not part of the progress export and is deleted neither by “Reset all progress” nor by deleting sentences from the list. You remove them on the role's page.

You can also scan a sentence from a photo (with the camera or from your photo library) — from a page, subtitles or a speech bubble, for example. The text is recognized on the phone; the photo is never saved or sent anywhere — only the text you pick and correct goes into the field, and it reaches the server only when you tap Explain the particles or Check my particles. The app asks for camera access the first time you take a photo; the photo library opens through the system picker, which gives the app only the photo you choose.

Data shared with the developer's other apps

Joshi belongs to a family of Japanese-learning apps. If you have more than one of them installed, the home screen shows a Your Japanese section with one row per app.

Here is how that works: Joshi writes a small card file on your device, in an area shared by the apps in this family. The card carries five things about your studying: how much of the material you have mastered, how many days your streak runs, how many sessions you have done, one sentence about your weakest spot (in Polish and in English), and whether today's goal is already met. The field for your next reviews is always left empty by Joshi, because it does not schedule reviews by date. Plus three technical ones: which app wrote the file, in what format, and when. Nothing else. There is no answer history, no list of the roles you practiced and nothing you type in the “Sentences” tab, and your progress cannot be reconstructed from this file.

The file never leaves your device, and it is read only by the other apps in this family that you have installed on that same device. Nothing syncs between devices.

Two things worth saying plainly. First, the shared area survives uninstalling a single app — the file goes only once you remove every app in the family from the device. Second, “Reset all progress” deletes this file too, along with the rest of your progress.

Reminders

The evening reminder about today's goal is optional, off by default and entirely local. If you turn it on, iOS schedules the notification on the device; nothing is sent anywhere and no server is involved. If you decline the notification permission, the rest of the app works exactly the same.

Tracking and advertising

None. There is no analytics SDK, no advertising SDK, no crash reporter and no advertising identifier (IDFA) in the app. It does not track you across other apps or websites, and it does not sell or share any data.

Network connections

Outside the “Sentences” tab the app makes no network connections of its own; traffic for purchases and restoring purchases is handled by iOS and the App Store. The app talks to our server only for AI help, and only at these moments: when you open the “Sentences” tab, a sentence (new or from the list), the subscription screen or Settings (to show how many requests are left); when you tap Explain the particles or Check my particles, and straight afterwards, to refresh that number; when you tap Try again; and after you buy the subscription or restore purchases (so the server learns about the subscription). Never in the background and never on a timer. The text of a sentence is sent only when you tap Explain the particles or Check my particles — or Try again after a failed attempt. A sentence that already has a result in the same mode is not sent a second time: the app shows the saved result.

On a device that does not support Apple's App Attest, there is no “Sentences” tab and the app does not connect to our server at all.

The “Sentences” tab — the only feature that sends data

The “Sentences” tab is optional. Without it the app teaches and tracks progress exactly the same way. It has two modes: “Explain” — someone else's sentence, from a manga, subtitles or a photo for example, comes back with the role of each particle, named after a role from this app — and “Check mine” — your own sentence comes back with each particle marked right, wrong, or “works, but…”, with a short why and the particle to use.

When you tap Explain the particles or Check my particles, we send two things to our server at api.jd-japanese.pl: the sentence you typed (at most 120 characters) and the language the answer should come back in (Polish or English, following the interface language). The server passes them to a language model from OpenAI, and the answer comes back to the app. Nothing else is sent — not your progress, not your answer history, not the photo, and nothing that could identify you.

We do not store the text of your sentence — it goes into no database and no log; nor do we store the model's answer. The database has no column that could hold either, and adding one breaks an automated test on the server. Our request to OpenAI asks it not to retain the response. The only exception is short-lived and never touches disk: a finished answer stays in the server's memory for two minutes, so that tapping the button twice on the same sentence does not count as two requests.

What we do keep, because the feature cannot work without it:

For a shorter time we keep technical billing and maintenance data: Apple transaction identifiers and request metrics (request number, feature name, model, status, token count, response time) — for 90 days. We do not store your IP address; for abuse protection the server keeps only a keyed hash of it, for 24 hours.

When it connects, the app also attaches a one-time DeviceCheck token issued by iOS. For Joshi the server does not use it and does not store it: the free sample here is not protected against reinstalls, so the token has nothing to guard.

None of this is linked to your name, email address or an account — because the app does not know them. We do not use any of it for tracking, profiling or advertising. There is no account to delete; if you want these records gone, write to me.

Purchases

The one-off Premium purchase and the AI Help subscription are handled entirely by Apple. Joshi never sees your payment details, card number or billing information. The app reads the state of your purchases from iOS. While the AI Help subscription is active, the app passes our server the Apple-signed proof of that transaction — only so the server can check the signature itself and grant the subscription's requests. The Premium purchase is not sent to the server.

How Apple processes data is described in Apple's privacy policy.

Reporting a problem

The Suggest a feature and Report a problem buttons in Settings prepare an email you can read and edit before sending. Nothing is sent until you tap “Send” yourself. A problem report comes pre-filled with the app version, the build number, the iOS version and the device model identifier (e.g. iPhone16,1) — a name shared by millions of units, never a device identifier. You can delete those lines before sending. If you write, I will see your email address and your message; they are used only to reply.

Crash reports

The app collects no crash reports of its own. If you have Apple analytics sharing turned on in iOS settings, the system may pass an anonymous report to the developer — that happens outside the app and is governed by Apple's privacy settings.

Children

The app collects no data that could identify anyone, of any age: there is no account and it does not ask for a name, age or address. For the “Sentences” tab we keep only the technical identifiers and counters described above.

Changes

If this policy changes, the date at the top changes with it. The address of this page carries the app's version number, so older releases always point to the document that actually described them — releases before 1.5, which connect to no server at all, are described by the document at the address without a version number.

Contact

Privacy questions: joshi@jd-japanese.pl