TimeNotify is a VS Code extension that combines a live status bar clock with configurable date/time-based reminders, including advance alerts, snooze, toast or modal delivery, duplicate suppression, and automatic config reload.
- Live status bar clock
- Custom clock format tokens
- Rule-based reminders by exact date, yearly date, monthly day, weekday list, and weekday range
- Advance reminders with
advanceMinutes - Toast or modal reminder delivery
- Global defaults with per-event overrides
- Snooze actions with configurable delay
- Duplicate suppression using
dedupeSeconds - Automatic reload when
timenotifysettings change - Output channel logging for config errors and trigger activity
timenotify.showNowcommandtimenotify.insertNowcommand with configurable backend-friendly time formats
Open your VS Code settings JSON and add a minimal configuration like this:
{
"timenotify.enabled": true,
"timenotify.events": [
{
"title": "Standup",
"date": "workdays",
"time": "10:00:00"
}
]
}Once enabled, TimeNotify starts polling automatically and will show reminders when an event becomes due.
{
"timenotify.enabled": true,
"timenotify.clockFormat": "HH:mm:ss",
"timenotify.statusBarAlignment": "right",
"timenotify.dedupeSeconds": 300,
"timenotify.notificationMode": "toast",
"timenotify.snoozeMinutes": 5,
"timenotify.insert": ["timestampMs", "timestampSec", "iso", "dateTime"],
"timenotify.events": [
{
"title": "Standup",
"message": "Daily sync starts now",
"date": "workdays",
"time": "10:00:00",
"advanceMinutes": 5,
"notificationMode": "modal",
"snoozeMinutes": 5
},
{
"title": "Birthday",
"date": "12/25",
"time": "09:00:00"
},
{
"title": "Pay rent",
"date": "1",
"time": "08:00:00"
},
{
"title": "Gym",
"date": "Mon,Wed,Fri",
"time": "18:30:00"
}
]
}timenotify.enabledEnables or disables scheduled reminders.timenotify.clockFormatControls the status bar clock display format.timenotify.statusBarAlignmentControls whether the clock appears on theleftorrightside of the status bar.timenotify.dedupeSecondsSuppresses repeated triggers for the same event within the configured window.timenotify.notificationModeSets the global default reminder delivery mode:toastormodal.timenotify.snoozeMinutesSets the global default snooze duration in minutes.timenotify.insertControls which time formats are offered by theTimeNotify: Insert Current Timecommand. One valid item inserts directly; multiple valid items open a Quick Pick.timenotify.eventsDefines the list of reminder events.
Required:
titledatetime
Optional:
messageadvanceMinutesnotificationModesnoozeMinutes
Behavior:
- Event-level
notificationModeoverrides the globaltimenotify.notificationModedefault. - Event-level
snoozeMinutesoverrides the globaltimenotify.snoozeMinutesdefault. snoozeMinutes: 0disables the snooze action for that event.advanceMinutesadds an early reminder before the scheduled event time, and the event still reminds again at the scheduled time.- If
messageis omitted, the reminder shows only the event title.
YYYY/MM/DDexact dateMM/DDyearly recurringDDmonthly recurringlastDayOfMonthmonthly recurring on the final calendar dayMonsingle weekdayMon-Friweekday rangeMon-Sunfull week, equivalent to every dayFri-Monwrapped weekday range across week boundariesMon,Wed,Friweekday listMon-Fri,Sunmixed weekday range and listeverydayalias forMon-Sunworkdaysalias forMon-Friweekendsalias forSat,Sun
Weekday ranges are circular, so ranges that cross Sunday are valid.
HH:mm:ss
timenotify.insert accepts any combination of:
timestampMs->1712390400123timestampSec->1712390400iso->2026-04-06T08:14:55.123ZisoDate->2026-04-06dateTimeMs->2026-04-06 16:14:55.123dateTime->2026-04-06 16:14:55time->16:14:55compactDateTime->20260406161455compactDate->20260406date->2026-04-06
Notes:
- Run
TimeNotify: Insert Current Timeto insert a configured current-time value into the active editor. - There are 10 built-in insert format keys in total.
isoalways uses UTC.isoDateuses the UTC calendar date portion of ISO time.dateTimeMs,dateTime,time,compactDateTime,compactDate, anddateuse the local machine time zone.- Invalid configured values are ignored.
- Duplicate configured values are currently kept, so repeated keys can produce repeated Quick Pick entries.
- In the Quick Pick, the main label is a friendly name, the short description shows the config key, and the detail line shows a live preview.
- If
timenotify.insertresolves to one valid item,insertNowinserts it directly. - If it resolves to multiple valid items,
insertNowshows a Quick Pick to let you choose.
YYYYyearMMmonthDDdayHH24-hour clockhh12-hour clockmmminutessssecondsAuppercase meridiem (AM/PM)alowercase meridiem (am/pm)dddweekday short nameddddweekday full name
- The scheduler checks reminders on a fixed polling interval.
- Advance reminders trigger before the configured event time, and events with
advanceMinutesstill trigger again at the configured time. - Duplicate suppression prevents rapid repeated notifications for the same event.
- Snoozing schedules the same reminder again after the configured delay.
- Changes under the
timenotifysettings namespace are reloaded automatically. - Invalid config entries are reported in the
TimeNotifyoutput channel.
TimeNotify: Show NowShows the current local time immediately.TimeNotify: Insert Current TimeInserts the current time at the cursor, or replaces the current selection. Uses the configuredtimenotify.insertformats, inserts directly when there is one valid option, and shows a Quick Pick when there are multiple valid options.
npm install
npm run compile
npm run test