Written locally, first
Every reminder goes into a SQLite database on your device through SQLDelight. That write is the source of truth, which is why the app is instant and works in a tunnel.
Features
String is one Kotlin Multiplatform codebase compiled for Android, Wear OS and WebAssembly. The phone, the watch and the browser share the same domain logic, so a list behaves identically wherever you open it.
Set a one-time reminder for a moment, or a recurrent one that comes back on your schedule. String asks Android for exact alarms, so a 9:00 reminder arrives at 9:00 rather than whenever the battery optimiser gets around to it.
Reminders survive a reboot. The watch app re-registers everything on boot too, so nothing is quietly dropped overnight.
Break a task into sub-items and put them in the order you will actually do them. Tick the last one, and String completes the parent for you — because you already did the work, and ticking it twice is busywork.
Go the other way and tick the parent while sub-items are still open, and it asks first, then closes the whole thing out in one move. Reorder sub-items any time with the arrows in the editor.
Some things are faster said than typed. Tap record, talk, and String saves the clip against the reminder.
Recordings are written to your device's own storage and are not uploaded anywhere — not to us, not to a transcription service, not to sync. The microphone permission is only requested the first time you actually open the voice notes screen, never at launch.
Voice notes are available on Android and Wear-paired phones. The web version does not record audio.
Start a focus interval and String runs it as a foreground service with a wake-locked alarm, so the countdown does not die when the screen sleeps or the app drops to the background.
The Wear OS app ships two tiles and a watch face complication, so your next reminder is one glance away. It is a standalone app — it installs and runs on the watch without needing the phone app present.
Offline-first is not a slogan here — it is the storage architecture.
Every reminder goes into a SQLite database on your device through SQLDelight. That write is the source of truth, which is why the app is instant and works in a tunnel.
Create an account and String mirrors your reminders to Google Cloud Firestore so your phone, watch and browser agree. Skip the account and that mirror never exists.
You can hand a reminder or a collection to someone else. That is an explicit action on a specific item — nothing is shared in the background.
A browser version is in development — the same code compiles to WebAssembly and keeps its database in your browser — but it is not hosted anywhere yet. The privacy policy spells out exactly which services receive what, on every platform.