Skip to content

About

Reminders that don't give up. They keep nagging until you actually mark them done.

Resources

Stars

3 stars

Watchers

1 watching

Forks

Latest commit

 

History

329 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Persistent

Persistent

Reminders that don't give up — they keep nagging until you actually mark them done.

Get Persistent for Android on Google Play

Download Persistent for Windows from the Microsoft Store Download Persistent for Linux (AppImage and Debian)

Open the web app at persistent.dynamic-solutions.ca

Current reminders in Enjoy Light Checklist and reminder controls in Enjoy Dark Sharing dialog with a staged sample recipient in Enjoy Dark

Most reminder apps fire once and are easy to swipe away. Persistent keeps nagging — a notification that won't dismiss, or a full alarm that loops — until you actually mark it done. It's built for the things you can't afford to miss.

Choose your appearance in Settings > Theme: Match system is the default and automatically switches between Enjoy Light and Enjoy Dark with your device. Choose either Enjoy theme to keep one appearance. Classic Light and Classic Dark retain the previous styling, and Forest and Plum offer colored palettes. Each palette recolors the whole app, including cards and dialogs. Navy keeps the original dark blue surfaces and teal accents. Doodles are enabled by default. The Enjoy themes use warm gray surfaces, blue accents, rounded headings and controls, quiet surfaces, and soft shadows inspired by Enjoy's app. Native alarm screens inherit their colors; their fonts and shapes follow the platform. For a plain Enjoy appearance, choose No doodles without changing your saved palette. The Doodle background dropdown offers Match theme, No doodles, and doodle line colors from pale shades for Light or dark shades for the darker themes. The page background follows your theme. Your choices are saved on each device.

Existing Navy settings and retired Navy variants switch to Match system once, keeping their doodle preferences. You can select Navy again afterward.

Settings > Account brings your account details, passkeys, sign-out, and permanent deletion together. Settings > Apps > Our other apps lists our other products with platform labels and links, including Windows apps.

What makes it different

  • Your language and formats. English (US/Canada), Spanish (Spain), French (France/Canada), German, Simplified Chinese, Brazilian Portuguese and Japanese. Match the device or choose an interface language in Settings. Date formatting, 12/24-hour display, account time zone and email language remain independent. Reminder text and medication details stay as entered. See localization for native compatibility and verification limits.
  • It won't be ignored. On Android, choose a persistent notification that re-sounds, or a full-screen alarm that rings continuously until you confirm, even with the phone locked. Windows and Linux offer persistent alerts while the app runs and your computer is awake.
  • Escalation. If you still haven't acted, it can escalate to a louder alarm on your devices and email a chosen contact — with your covering message and what is actually overdue, so they can act on it — and you can silence that alarm without losing the reminder, so it keeps nagging quietly.
  • Nothing slips through. Every firing is tracked on its own. If a reminder has several times of day, each one nags and is confirmed separately — confirming the 1:00 firing never silently clears the 9:00 one you missed.
  • Works offline. The Android app schedules exact on-device alarms, so reminders fire even with no signal, and sync across your devices.
  • Flexible. Remind me now with no date to pick, a one-time or repeating schedule — daily, weekdays, every N days, or monthly on the days you choose (including the last day of every month) — or never at all, for something you want to keep but never be reminded about. Multi-line notes that stay multi-line wherever you read them; custom snooze and re-nag intervals, separate tones for a reminder firing and for its follow-up nags (and any single reminder can use its own tones instead of your device's), per-reminder notification-shade prominence (Android), and a history of what you've done. Open a completed entry in History and choose Undo done to resume its reminders after an accidental completion. This works for personal and shared reminders of every type.
  • Checklists. A reminder can cover several things at once — a morning routine, a packing list. Tick items off as you go; each firing tracks its own ticks, so a repeating checklist starts fresh every time, and the notification lists only what you have left. Hide the ticked ones to see just what's outstanding — a long list stays collapsed the way you left it, on every device you use. Ticking everything still doesn't confirm it; only you do. Reminder cards open a reading dialog; click a title or note body to edit its text, or add, reorder, rename, and remove checklist items there. A typed, nonempty new item saves when you leave its field or close the reading dialog. Edit opens the full form when you need it; new rows there are included on Save.
  • Share a reminder. Invite someone by email, including someone who has not signed up yet. Everyone with access can edit it and mark a firing done for the group. Snoozes and alarm escalation are personal, so one person's snooze does not silence another person's alert. Reminders shared with you appear in Current, Upcoming, Notes, and History as appropriate; Settings has a full Shared with me list. The usual reading view supports checklist ticks, Done, Snooze, and de-escalation. Share lists the owner and members, lets any member invite someone else, and offers Leave to recipients. The owner and the person who invited someone can remove their access. Android shade prominence is personal.
  • Edit together safely. Shared notes and checklists refresh live. Different checklist items can be edited independently; conflicting text or full-editor saves show an error and keep the draft in the open editor for review.
  • Assign a reminder. Create one for a single other person. They own its alerts and actions; you can see when each firing was handled in Assigned by me. They can decline it.
  • Medication reminders. Keep a medicine name and dose with a reminder. Persistent helps you remember; it does not provide medical advice.
  • Simple sign-in. A one-time email code, a passkey, or Sign in with Google — there is no password to forget or leak.
  • Your data stays yours. No ads or third-party trackers. Administrators can view aggregate service activity and feature usage. Delete your account and everything in it from Settings, at any time; see the privacy policy.

Get it

Android

Recommended for alarms that can sound offline. Requires Android 7.0 or newer. Install Persistent from Google Play. The app can sound previously scheduled alarms even while offline. During detected phone or voice/video calls, alarms wait quietly as notifications and resume after the call if you have not handled them.

Desktop

Persistent is available for Windows and Linux, with installation details for each below. Both keep the same reminder interface in the tray, with a tall, resizable flyout for viewing, editing, sharing and confirming reminders. You can enable Persistent notifications on this PC in Settings; notifications are off by default on both platforms. Once enabled, the app restores dismissed reminders, repeats configured nags and loops alarm audio for Alarm reminders and escalations. Notifications offer Done, Snooze and De-escalate where applicable. On Linux, Snooze opens the app's full picker; Windows offers a notification dropdown.

These alerts work while the app runs and the computer is awake. Both apps catch up after reconnecting, but cannot alert you while closed or while the computer is asleep. Use Android for previously scheduled alarms that must sound offline.

Windows

Install: get Persistent from the Microsoft Store, or download the portable ZIP for your computer (x64 or ARM64) from the Windows releases. Unzip and run the portable app; it needs no installation.

Updates: the Microsoft Store keeps its build up to date. The portable app checks for new Windows releases and links to the download, which you replace manually.

Desktop integration: the Store build also provides a Windows 11 widget with the next two reminders at small size, four compact rows at medium size, or four expanded rows at large size.

Linux

Install: download an AppImage or Debian package from the Linux releases. Both formats are available for Intel/AMD 64-bit and ARM64 computers.

Computer AppImage filename ends with Debian/Ubuntu filename ends with
64-bit Intel or AMD x86_64.AppImage amd64.deb
ARM64 arm64.AppImage arm64.deb

For AppImage, mark the download executable and run it. Use --install to add a user-level application-menu launcher and keep a stable path for updates; no Node toolchain is needed. On Debian/Ubuntu, open the .deb with your package installer; installation needs administrator approval. See Linux installation details for requirements and troubleshooting.

Updates: the app can check automatically or manually, then asks separately before downloading and installing. AppImage updates are user-level; Debian updates need administrator approval.

Desktop integration: targets KDE Plasma and GNOME with AppIndicator support, on X11 and Wayland. GNOME may require double click to open the flyout. XWayland is the default on Wayland desktops for tray-corner placement; native Wayland lets the compositor choose placement. Tray and notification presentation vary by desktop.

Web

Open persistent.dynamic-solutions.ca in any browser and sign up free. It installs as a web app for managing reminders, with the same account and live data as every other surface. Browser notifications are not supported; install a native app to be alerted.

Developers

Setup, architecture, and the release/deploy workflow are in docs/development.md. Both desktop apps host the web interface and add optional native notifications and alarm audio:

License

Licensed under the PolyForm Noncommercial License 1.0.0. Copyright (c) 2026 Ryan Ewen.

Remote development with Devkit

Devkit v0.14 keeps *.localhost as the default and can add secondary domains in the machine's ~/.config/devkit/host.json. For a remote server, configure secondaryDomains: ["server.home"] and preferredDomain: "server.home"; npm run dev then uses the preferred hostname while retaining localhost aliases. The DNS wildcard must point to the server, and an existing nginx server can forward those names to Devkit's private proxy listener. Run devkit nginx --allow <client-subnet> to generate that forwarding configuration. See the Devkit README for bootstrap options and Docker networking.

Use npm run dev:doctor to see this checkout's preferred and alternate URLs. The domain preference is machine configuration; project settings stay portable.

About

Reminders that don't give up. They keep nagging until you actually mark them done.

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages