Alert template syntax

Variables for customising alert titles and notifications in templates. See Reminders and alerts for where these templates are set and when they fire.

Format: %<letter><modifier>


Event identity

Code Result Example
%t Event title "Team Standup"
%T Alert title "10 min reminder"

Time to event

Time relative to the event, adapting to whichever phase the alert fires in:

  • Before the event starts: time remaining until it starts.
  • During the event (after it starts, before it ends): time elapsed since it started.
  • After the event ends: time elapsed since it ended.

The same variables work whether the alert is configured to fire before, during, or after the event; no separate codes are needed for each phase.

These come in two flavours: a bare value (just a number) and a sentence form, whose code ends in l, that reads as a phrase and picks its own tense — see Sentence forms below.

Code Result Example
%tm Minutes until/since 15
%ts Seconds until/since 900
%th Hours until/since 0.25
%td Days until/since 1
%tf Broken into units "1 day, 3 hours, 10 minutes"

%tf accepts a style parameter: %tf{compact}"1d 3h 10m".

With the bare values you write the connecting words yourself, and you must phrase each phase separately — the number adapts, but "in"/"ago" won't:

"%t in %tm minutes"          (before) -> "Client call in 45 minutes"
"%t started %tm minutes ago" (during) -> "Client call started 12 minutes ago"
"%t ended %tm minutes ago"   (after)  -> "Client call ended 5 minutes ago"

To have one code do all three, use the sentence form %tml instead.

Live updates: an alert whose title contains any time-relative code (%tm, %ts, %th, %td, %tf, or a sentence form) is re-rendered once a minute while it is showing, so the value counts down/up rather than freezing at its fire-time snapshot. Updates pause while the phone is asleep and catch up the moment the screen comes back on. Note this cadence means the seconds codes (%ts, %tsl) still only refresh once a minute — they show exact seconds, not a ticking countdown.


Event duration

How long the event lasts. Duration isn't relative to "now", so its sentence forms carry no tense — they just add the unit word.

Code Result Example
%dm Duration in minutes 90
%ds Duration in seconds 5400
%dh Duration in hours 1.5
%df Broken into units "1 hour, 30 minutes"
%dml Minutes, worded "90 minutes"
%dsl Seconds, worded "5400 seconds"
%dhl Hours, worded "1.5 hours"
%dfl Broken into units, worded "1 hour, 30 minutes"

%df, %dfl and the worded forms all accept the style parameter: %df{compact}"1h 30m", %dml{short}"90 mins".


Sentence forms

Add l to any time code to get its sentence form: a ready-made phrase that picks the right tense automatically from the phase the alert fires in. No need to write separate templates for before, during and after.

Code Before During After
%tml in 15 minutes started 15 minutes ago ended 15 minutes ago
%tsl in 900 seconds started 900 seconds ago ended 900 seconds ago
%thl in 3 hours started 3 hours ago ended 3 hours ago
%tdl in 1 day started 1 day ago ended 1 day ago
%tfl in 1 day, 3 hours started 1 day, 3 hours ago ended 1 day, 3 hours ago
"%t %tml"
  (before) -> "Client call in 15 minutes"
  (during) -> "Client call started 15 minutes ago"
  (after)  -> "Client call ended 15 minutes ago"

Words are pluralised for you (1 minute vs 15 minutes).


Style parameter

The broken-into-units and sentence forms accept an optional {…} parameter that sets how verbose the unit words are. The default is long.

Style second minute hour day
{long} (default) seconds minutes hours days
{short} secs mins hrs days
{compact} s m h d
{clock} digits-only stopwatch reading — see below
"%tml"          -> "in 15 minutes"
"%tml{short}"   -> "in 15 mins"
"%tml{compact}" -> "in 15m"

"%tf{compact}"  -> "1d 3h 10m"
"%df{short}"    -> "1 hr, 30 mins"

An unrecognised style (e.g. %tml{huge}) is left in the text untouched, so typos are easy to spot.

{clock}

Renders %tf/%df as a stopwatch: MM:SS under an hour, H:MM:SS beyond it. Days roll up into hours, so a day and a half reads 36:00:00.

"%tf{clock}"   -> "04:59"
"%tfl{clock}"  -> "in 04:59"
"%df{clock}"   -> "1:30:00"

{clock} needs at least two fields to be a clock, so on a single-unit code (%tm, %tml, …) it falls back to the default wording rather than emitting a bare number.

Where seconds actually tick. The ringing alarm screen re-resolves every second when the template asks for second-level detail (%ts or {clock}). Notifications still refresh only once a minute, so a {clock} there shows an exact value that then holds for a minute before jumping. For a genuinely ticking notification countdown, use a Countdown alert instead — the system ticks that one natively, at no battery cost.


Event date and time

Date and time of the event.

Code Result Example
%Ed Event date (locale format) "29 May 2026"
%ED Event date short "29/05/26"
%Ei Event date ISO "2026-05-29"
%Ew Day of week "Thursday"
%EW Day of week short "Thu"
%Et Event time 24-hour "14:00"
%ET Event time AM/PM "2:00 PM"
%Ee Event end time "15:00"

Event properties

Code Result Example
%l Location "Meeting Room A"
%L Location short (before comma) "Meeting Room"
%g Tag name "Work"
%G Tag colour (hex) "#9C6B2E"

System

Code Result Example
%n Current time "09:45"
%N Current date "29 May 2026"

Examples

Simple reminders

"%t alert"
→ "Team Standup alert"

"%t in %tm minutes"
→ "Client call in 45 minutes"

Full descriptions

"%t - %tf to start"
→ "Q2 Planning - 1 day, 3 hours to start"

"%t (%df{compact} total)"
→ "Sprint Review (2h 30m total)"

With date and time

"%t at %Et on %Ew"
→ "Conference trip at 09:00 on Saturday"

"%t %Ew %Ed %ET"
→ "Board meeting Thursday 29 May 2:00 PM"

With location

"%t at %l"
→ "Team Standup at Meeting Room B"

"%t @ %L"
→ "Client call @ Conference Room"

Complex example

"%t tomorrow at %Et (%tf away)"
→ "Project kickoff tomorrow at 14:00 (1 day, 2 hours away)"

Escaping

To include a literal %, use %%:

"100%% done with %t"
→ "100% done with Team Standup"

Unknown variables

If a variable is used but not available (e.g., %l when no location is set), it resolves to an empty string.

"%t at %l"
→ "Team Standup at "   (if location not set)