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)