Guide
Shareable timer links
The query-string presets the four engine timers accept, the duration token forms they understand, and why a mangled link still opens a working timer.
A link instead of setup instructions
Four of the timers on WRLD CLOCK — the Pomodoro, speech, interval and countdown timers — can be configured entirely from the query string, the part of the address after the question mark, so a coach, teacher or conference organiser can hand out a bookmark instead of setup instructions. The Copy preset link button under each of those four builds such a link from the settings as they stand; a link can equally be typed by hand. The alarm and the stopwatch read nothing from the address. Nothing is stored on a server: the settings travel in the URL and are parsed entirely in your browser when the page opens.
The links the four timers produce for their own defaults — every one of which can be changed on the page before the link is copied — computed here by the same functions the buttons call, are:
- Pomodoro timer:
?work=25m&break=5m&long=15m&every=4&goal=8&auto=1— 6 keys for 6 settings - Speech timer:
?d=20m&warn=5m&final=1m&mode=down— 4 keys for 4 settings - Interval timer:
?prepare=10s&work=40s&rest=20s&rounds=8&cooldown=1m— 5 keys for 5 settings - Countdown:
?d=5m— 1 key for 4 settings
The Pomodoro, speech and interval links name every setting their timer has, so each stands on its own: whoever opens it gets the same configuration. The countdown link is shorter, because its share function writes only the key for the mode the timer is in and adds the message only when one is set. The default countdown with the message “Doors close” shares as ?d=5m&msg=Doors+close; a count to 2026-12-25T09:00 with no message shares as ?at=2026-12-25T09%3A00. The sections below take the parser apart.
The three forms a duration token can take
A duration token can be compound (a number of hours, minutes and seconds, each followed by its unit letter), clock-style (minutes and seconds separated by a colon, or hours, minutes and seconds) or a bare number. The parser lowercases a token and trims the space around it before reading it, so 25M reads as 25m does, and 25m with space on either side parses to the same value as the trimmed token. Fractions are allowed in the compound and bare forms. Each form, read by the engine and rendered with the timers' own display formatter:
| Token | Display | In words |
|---|---|---|
90s | 01:30 | 1 minute 30 seconds |
25m | 25:00 | 25 minutes |
1h | 01:00:00 | 1 hour |
1h30m | 01:30:00 | 1 hour 30 minutes |
1h30m10s | 01:30:10 | 1 hour 30 minutes 10 seconds |
2m30s | 02:30 | 2 minutes 30 seconds |
1.5h | 01:30:00 | 1 hour 30 minutes |
05:00 | 05:00 | 5 minutes |
1:30:00 | 01:30:00 | 1 hour 30 minutes |
25M | 25:00 | 25 minutes |
Bare numbers and the default unit
A bare number carries no unit, so each timer supplies one. The interval timer reads bare numbers as seconds; the Pomodoro timer, the speech timer and the countdown read them as minutes. The same token 40 therefore means 00:40 (40 seconds) in an interval link and 40:00 (40 minutes) in a Pomodoro link. A fraction is read in the same unit: 0.5 on a minutes timer is 00:30.
Writing the unit removes the question: 40s parses to 40 seconds on the interval timer and 40 seconds on the others, the same value either way.
Forgiving about form, strict about validity
Parsing is deliberately forgiving about form and strict about validity: anything the parser cannot understand is ignored and the default is kept, so a mangled link still opens a working timer. “Ignored” is literal — a bad token produces no value at all, rather than zero or a guess. Each of these tokens, read by the engine, yields:
| Token | Yields | Result |
|---|---|---|
abc | nothing | default kept |
25mm | nothing | default kept |
-5m | nothing | default kept |
5m- | nothing | default kept |
1e3 | nothing | default kept |
m | nothing | default kept |
99:99 | nothing | default kept |
ninety | nothing | default kept |
This happens per value, not per link. A link of ?work=50m&break=banana&every=3 opens the Pomodoro timer with a focus interval of 50:00 and a long break after every 3 intervals, while the short break, whose token could not be read, stays at 05:00, the default. A link in which nothing is readable, ?work=banana&goal=99&auto=perhaps, yields an empty preset, and the settings the timer then opens with are identical to its defaults — as if there had been no query string at all.
When a link spells the same setting two ways, the engine takes the first spelling in its own list. ?work=50m&w=10m opens with a focus interval of 50:00, because work is listed before w.
Two ceilings: the token's and the setting's
Two separate limits apply to a duration, and they belong to different parts of the engine. The first is the token ceiling. A token the parser can read but which names an absurd length is held at a fixed ceiling, so the value is never infinite and the link still works. The table is the engine's own answer for three such tokens:
| Token | Held at |
|---|---|
500h | 100 hours |
999:00:00 | 100 hours |
99999999 | 100 hours |
All three are held at the same ceiling, 100 hours. The second limit belongs to the setting itself. A preset is merged over the timer's defaults and then put through the same normalise step the settings form uses, which bounds each setting to the range that timer allows. A valid token can therefore be read correctly and still be moved: 1s reads as 00:01, but the Pomodoro timer's focus interval opens at 00:05, its floor; 50h reads as 50:00:00 and opens at 04:00:00, its ceiling. The token passed the first gate and was bounded at the second; neither gate reports an error.
Counts, switches, direction and the message
Counts — the long-break cadence, the session goal and the number of rounds — are read as whole numbers only, inside a range. Probing the parser with every whole number from 0 to 200 at build time, every accepts 2 to 12, goal accepts 1 to 24 and rounds accepts 1 to 99. Outside those ranges, or with a fraction, the count is dropped: goal=99 is ignored, rounds=0 is ignored and every=3.5 is ignored.
Switches — the Pomodoro timer's auto-advance and the speech timer's count-up — accept the common spellings of yes and no, in any case:
| Token | Switch |
|---|---|
1 | on |
true | on |
yes | on |
on | on |
TRUE | on |
0 | off |
false | off |
no | off |
off | off |
maybe | ignored |
The speech timer also accepts mode=up or mode=down. ?mode=up gives count up; an unknown word, ?mode=sideways, gives nothing, so the default stands; and when both are present, as in ?mode=up&up=0, the explicit up flag wins: count down.
The countdown's message is the one free-text value. ?msg=Doors+close arrives as “Doors close” — the plus sign in the link is read as a space — and a message is cut to 120 characters, so a 400-character message opens as 120 characters.
Each timer's keys
Each timer reads its own keys, and most settings have more than one spelling. The Keys column lists every spelling the parser accepts, in the order it checks them; the Written column is the key the share button uses, read here from the share functions themselves. The other spellings are accepted when a link is typed by hand.
| Timer | Setting | Keys | Written |
|---|---|---|---|
| Pomodoro timer (bare numbers: minutes) | Focus interval | work, w, focus | work |
| Short break | break, short, s | break | |
| Long break | long, l | long | |
| Long break after every | every, cycle, cycles | every | |
| Session goal | goal, sessions | goal | |
| Auto-advance | auto | auto | |
| Speech timer (bare numbers: minutes) | Talk length | d, total, talk | d |
| Wrap-up threshold | warn, amber | warn | |
| Final threshold | final, red | final | |
| Direction | up, mode | mode | |
| Interval timer (bare numbers: seconds) | Get ready | prepare, prep | prepare |
| Work | work, w | work | |
| Rest | rest, r | rest | |
| Cool down | cooldown, cool | cooldown | |
| Rounds | rounds, n | rounds | |
| Countdown (bare numbers: minutes) | Duration | d, duration, t | d |
| Target | at, target, until | at | |
| Message | msg, message, label | msg |
One setting is written under a key that is not first in the parser's list: the speech timer's direction. The parser checks an explicit up flag before it looks at mode, which is why up wins when both are present, but the share button writes mode. A link typed with either spelling opens the same timer; only the shared link is fixed in form.
The countdown's two modes are chosen by which key is present. A readable duration selects duration mode and a readable target selects target mode; a valid target wins when both are given, so ?d=25m&at=2026-12-25T09:00 opens in target mode with the duration 25:00 kept alongside it, and ?at=2026-12-25T09:00 alone opens in target mode. A target is a datetime-local string as the engine reads it: the date, then the letter T or a space, then hours and minutes, with seconds optional. Each of these, read by the same parser the link reader calls, is:
| Target value | What it is | Verdict |
|---|---|---|
2026-12-25T09:00 | the date, the letter T, hours and minutes | accepted |
2026-12-25 09:00 | a space instead of the T | accepted |
2026-12-25T09:00:30 | with seconds | accepted |
The target must also be a real date: ?at=christmas yields nothing, and ?at=2026-02-31T09:00, a day February does not have, yields nothing. A zero duration, ?d=0s, yields nothing: a countdown needs something to count.
What the share button writes back
Copy preset link writes the current settings back into a query string, using its own key for each setting — the Written column above — whatever spelling the link it was opened from used, and renders each duration in the shortest token that round-trips: hours, minutes and seconds with their unit letters, each part omitted when it is zero.
| Typed | Shared as |
|---|---|
1:30:00 | 1h30m |
90s | 1m30s |
05:00 | 5m |
0.5 | 30s |
1h0m0s | 1h |
A zero length is written as 0s, never as an empty value. A Pomodoro link opened from ?work=50m&break=10m&long=25m&every=3&goal=6&auto=0 is shared back as ?work=50m&break=10m&long=25m&every=3&goal=6&auto=0, and parsing that again gives settings identical to the ones it was written from. An interval link of ?work=45&rounds=12 — bare seconds, 2 of the timer's 5 settings — is shared as ?prepare=10s&work=45s&rest=20s&rounds=12&cooldown=1m: the 00:45 work interval gains its unit, and the settings the link left alone are written out, so the shared link is complete. The speech link ?talk=18m&amber=4m&red=90s, typed with the colour aliases, is shared as ?d=18m&warn=4m&final=1m30s&mode=down.
A countdown in target mode with a message is shared as ?at=2026-12-25T09%3A00&msg=Doors+close. The share function writes the colon in the time in the encoded form shown, and the engine reads the target and the message back unchanged.
Where a link stops
A link carries settings and only settings. The running state of a timer — the instant it is counting toward, or the balance it was paused with — is saved in the browser the timer is running in, as epochs rather than “seconds left”, and that is what a reload in that browser resumes from. None of it is in the link. Opening a preset link on another device opens the timer already configured, not already running, and the tab it runs in must stay open for it to run, exactly as with a timer set up by hand. The one thing that outranks a link is a session still under way in the browser it is opened in: following a link while one is running resumes that session rather than replacing it, so reset the running session first, then open the link again, if you want the link's settings.
A target-mode link carries the datetime-local string itself, and the countdown parses that string in the viewer's own time zone. The link therefore names a wall-clock time, not an instant: the same at= link opened in two zones counts to the same clock reading in each. The guide on counting down across daylight saving follows that behaviour further.
Questions
- What happens if I mistype a value in a link?
- That value is ignored and its default is kept; every other value in the link still applies. ?work=50m&break=banana&every=3 opens with a 50:00 focus interval and the default 05:00 short break, because break=banana could not be read. A link in which nothing can be read opens the timer with its defaults. In every case a session still under way in that browser outranks the link; reset it and open the link again.
- Does a bare number mean minutes or seconds?
- It depends on the timer. The interval timer reads bare numbers as seconds, so work=40 is 00:40 there; the Pomodoro timer, the speech timer and the countdown read them as minutes, so the same token is 40:00. Writing the unit, 40s or 40m, removes the ambiguity.
- Does a link start the timer, or carry one that is already running?
- Neither. A link carries settings only. Running state is saved as epochs in the browser the timer runs in and is never part of the link; the tab must stay open for a timer to run.
- Are the settings in a link sent to a server?
- No. The settings travel in the URL and are parsed entirely in your browser when the page opens; nothing is stored on a server.
- Why does the shared link not look like the one I typed?
- It writes each setting under the share button's own key, in the shortest token that round-trips: 05:00 becomes 5m and 90s becomes 1m30s. On the Pomodoro, speech and interval timers the settings you left alone are written out too, so the link is complete; the countdown writes only the key for its current mode, plus the message when one is set. Parsing the shared link gives settings identical to the ones it was written from.
- Will an at= countdown link count to the same moment for someone in another time zone?
- No. The link carries the datetime-local string, and the countdown parses it in the viewer's own zone, so it names a wall-clock time rather than an instant: two viewers in different zones each count to that reading on their own clock.
Everything here runs in your browser: the figures above were computed from the engine when the site was built, and the timers themselves run on this device's own clock. The methodology page describes the whole engine, and the guides index lists the other guides.