Timezones is a native GTK4 / Libadwaita app that shows a grid of cities and timezones on one shared timeline, so a glance tells you who is asleep, who is at work, and what an hour of your day looks like everywhere at once. Park the cursor on a given time and every row reads that same instant to plan your next meeting.
- One shared grid. Easily compare at glance what a given time represent on different timezones.
- Scrub to compare. Move the pointer across the list and every row previews its local time for the instant under the cursor, marked in accent color so a preview is never mistaken for the real current time.
- Park an hour. Click (or press Enter) to pin the instant. A bar names the reading and stays until you discard it; the rows keep showing that moment while you compare them.
- Daylight shading. Cells are colored by whether the sun is actually above the horizon over that city — computed from the zone's own coordinates, so it holds inside the polar circles too — with sunrise and sunset markers on the strip.
- Date flags. A timezone whose day rolls over inside the visible window carries a date pill naming the day that begins there, so a "tomorrow" is never silent.
- Daylight-saving warnings. A row spending the day on both sides of a
transition says so in words ("Clocks in Cairo move back 1 hour…") and shows
both abbreviations, e.g.
EDT → EST. - Offset pills. Each non-reference row shows how far ahead of or behind the reference it is — not just UTC, which is rarely the number you want.
The timeline is a single focusable control, the way a slider is: Tab to the list, then drive it with the arrows.
| Key | Action |
|---|---|
| Tab | Focus the timeline list (it takes focus itself before its rows) |
| ← / → | Scrub 15 minutes at a time, snapped to quarter hours |
| Enter / Space | Park the cursor on the hour it is on |
| Esc | Discard the parked time (from anywhere in the window) |
| Ctrl+N | Add a timezone |
| Ctrl+T | Back to today |
| Ctrl+, | Preferences |
| Ctrl+Q | Quit |
Arrows work from wherever the cursor already is — the keyboard's own position, a parked selection, the pointer, or simply now — and nudging a parked time adjusts it in place rather than unpinning it first.
- Jump to any date from the calendar button, and the whole list moves with it, daylight-saving changes included. A "Today" button appears only while you are parked somewhere else.
- Copy all times for the parked instant to the clipboard as an aligned block, one line per city, with a date in brackets on any row that is on a different day.
- Save a calendar event. A parked instant becomes a 30-minute
.icsinvite, timed in UTC, with the whole per-city comparison in its description, handed to whatever application handles calendar files (through the portal under Flatpak).
- Search ~400 zones by city, country, abbreviation or zone id, each result showing its current time and offset.
- Label a row — "You", "Family", "Team" — and it keeps the city name beside the label everywhere it is shared.
- Pick the reference row, the one the timeline's hours and every offset are measured from.
- Reorder by dragging a row onto another, by the row menu's Move up / Move down, or from the reorder dialog in Preferences.
- The list persists to
~/.config/timezones/cities.json, including an empty one.
- Light, dark, or follow the system.
- 12 or 24-hour clocks, from the header toggle or Preferences.
- Offset pills and daylight shading can each be turned off.
- Adaptive layout. Below 880px the rows restack for a phone-width window instead of being squeezed; past 1180px the surplus becomes margin, so an hour reads at the same scale on an ultrawide as on a laptop.
On a phone-width screen each row stacks its timeline under the city, and the header drops the 12/24h toggle (it stays in Preferences):
Get it on Flathub, from GNOME Software or with:
flatpak install flathub io.github.hernantz.timezonesThe app also has its own Flatpak repository, which gets new releases as soon as they are tagged, before Flathub builds them:
flatpak install --user https://hernantz.github.io/timezones/io.github.hernantz.timezones.flatpakrefOr download timezones-<version>.flatpak from the
releases page and open it;
it installs from the same repository, so it updates the same way. Either way
the GNOME runtime comes from Flathub, which is added if missing.
Installed from this repository and want to move to Flathub?
flatpak install --reinstall flathub io.github.hernantz.timezones switches it
over and keeps your cities and settings.
Also listed on FlatPark, a community Flatpak repository:
flatpak --user remote-add --if-not-exists flatpark https://dl.flatpark.org/flatpark.flatpakrepo
flatpak --user install flatpark io.github.hernantz.timezonessudo dnf copr enable hernantz/timezones
sudo dnf install timezonesFedora 43 or newer.
timezones in the AUR, e.g. yay -S timezones.
make setup # meson setup builddir
make install # meson install -C builddirTo build the Flatpak from the source tree instead (needs the
org.gnome.Platform and org.gnome.Sdk runtimes, version 51):
flatpak-builder --user --install --force-clean build-flatpak packaging/flatpak/io.github.hernantz.timezones.json
flatpak run io.github.hernantz.timezonesPull requests are welcome. CONTRIBUTING.md covers running the app from source, the code layout, what to test, translations and how releases are made.
GPL-3.0-or-later.





