KasyKasy

Local Notifications

Reminders the user schedules on their own device, no server involved.

A local notification is a reminder the user schedules on their own device, no server involved, no FCM. Example: "remind me to drink water at 9am every day."

Only works on native (iOS and Android). Not available on web.

Implementation

Via MCP: ask your assistant "add local_reminders to my project". It runs add_feature for you. See Kasy MCP.

  1. Run:

    kasy add local_reminders
  2. Done. The settings screen, persisted state, and translations already come ready (see what's included in Information).

  3. To change the reminder text (and the Home → Features demo notification), without hand-editing an i18n file:

    kasy notifications text

    Via MCP: ask "change the reminder text to X" and the assistant runs set_notification_texts for you. See Kasy MCP.

Information

The four texts and where they show up

TextWhere it appears
Demo, titleCard on Home → Features and the title of the instant test notification
Demo, descriptionCard subtitle and the body of the test notification
Reminder, titleTitle of the scheduled notification (Settings → Reminders)
Reminder, bodyBody of the scheduled notification

Time, day and frequency stay with the end user on the Reminders screen. Through the CLI you set the message only.

To skip the prompts, pass everything as flags:

kasy notifications text \
  --demo-title "Local notification test" \
  --demo-body "An alert on this device only." \
  --reminder-title "Reminder" \
  --reminder-body "Time to drink some water."
OptionDescription
--locale pt|en|es|allWhich i18n files to update (default all, same text in all three)
--demo-titleDemo title on Home → Features
--demo-bodyDemo description and body
--reminder-titleScheduled reminder title
--reminder-bodyScheduled reminder body

Use --locale once per language when the app is genuinely multilingual:

kasy notifications text --locale en --reminder-title "Reminder" --reminder-body "Time to drink some water."
kasy notifications text --locale pt --reminder-title "Lembrete" --reminder-body "Está na hora de beber água."

--locale is separate from the CLI's -l/--lang, which only changes the language of the terminal prompts. The command updates lib/i18n/{pt,en,es}.i18n.json and runs dart run slang at the end. If you'd rather edit by hand, the keys are home.cards.notification_title, home.cards.notification_description and dailyReminder.title / dailyReminder.body.

Which language the reminder arrives in

The app doesn't pick the text by notification type: it uses the app's active language. If the user picked a language in Settings, that wins; otherwise it follows the device or browser language; and if that isn't pt, en or es, it falls back to the base locale in slang.yaml. A scheduled reminder stores its title and body in whatever language was active when the user saved it.

What comes ready

  • Settings screen (ReminderPage) accessible from onboarding and settings
    • On/off toggle
    • Type: Daily, Weekly, or Specific date
    • Hour and minute picker
    • For weekly: day-of-week selector
    • For a specific date: DatePicker + TimePicker
  • State persisted in SharedPreferences via ReminderNotifier
  • Translations in PT, EN, and ES

Available methods

On LocalNotifier:

MethodUse
scheduleDailyAt(hour, minute)Every day at the same time
scheduleWeekly(dayOfWeek, hour, minute)Same day of the week, same time
scheduleAt(date)Exact date and time (one-off)
cancel(notificationId)Cancel by ID
cancelAll()Cancel all
listPendingNotifications()See pending schedules

Difference from Push

Push NotificationLocal Notification
Who triggers itServerThe device itself
Needs internetYesNo
Works with the app closedYesYes
Personalized per userNo (except deep link)Yes (the user picks the time)
WebNoNo

Last updated on 08/23/2026