Skip to content
fredrikblauPublic

About

Private Chrome and Firefox clocks, alarms, timers, stopwatch laps, and Pomodoro sessions that persist across popup closure and browser restarts.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

77 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Chronly

A calm, private clock, alarm, and focus workspace for your browser toolbar.

Alarms, timers, a stopwatch, world clocks, and Pomodoro sessions that keep working when the popup closes, in Chrome and Firefox. No account, no tracking, no server.

CI License: MIT Chrome MV3 Firefox MV3 No tracking PRs welcome

Chronly overview: the time, what rings next, running timers, a focus session, quick timers, and world clocks A ringing alarm with Snooze and Dismiss buttons in the popup A Pomodoro focus session with a progress ring, Pause, Skip and Stop
More screenshots
Alarms with on/off switches, repeat days, and the new-alarm form Two timers, one running and showing when it ends, one paused, with Pause, Resume, and +1 min The stopwatch with four laps, the fastest and slowest highlighted World clocks planning a 16:00 meeting across New York, London, Tokyo, and San Francisco Settings: theme, clock face, display toggles, and the start of the Alerts section The overview in the light theme

Why Chronly

Browser timers tend to fail quietly: the popup closes, the background worker is suspended, the laptop sleeps, and the alarm never rings. Chronly is built around not letting that happen.

  • It rings. Every alarm, timer, and Pomodoro phase is stored as an absolute time and scheduled with the browser's own alarm API, so it survives a closed popup, a suspended service worker, a browser restart, and sleep.
  • You can always stop it, and it never stops by itself. Sound and a system notification fire together. If the notification is blocked, hidden by Do Not Disturb, or times out, the alarm keeps ringing: the toolbar icon shows a badge and the popup offers Snooze and Dismiss. On Firefox, where notifications have no buttons, click the notification or use the popup. If notifications are turned off for Chronly, the popup says so.
  • It stays yours. No account, analytics, ads, remote code, or host permissions. Everything is stored in your browser, and you can export it to a file.
  • It's for everyone. Keyboard shortcuts, screen-reader labels, reduced motion, adjustable text size, and an automated WCAG 2.1 AA audit of every tab in both themes.
  • It's open. MIT licensed, with over 400 unit tests and end-to-end suites that drive the real extension in both Chromium and Firefox on every pull request.

Features

Feature What you get
Overview The time, what rings next, live timers, your focus session, one-click quick timers, and a glance at world clocks.
Toolbar A badge while anything rings, a tooltip naming the next alarm, and Alt+Shift+K to open the popup from any tab.
Alarms One-off or repeating on chosen days, an on/off switch, in-place editing, a snooze length you choose, optional gentle wake that fades the sound in over 30 seconds, a Test button, and calendar export (Google Calendar or .ics).
Timers As many countdowns as you like, each showing when it ends, with an hours field, pause and resume, +1 minute, and restart.
Stopwatch Lap splits, with the fastest and slowest lap highlighted. Keeps running with the popup closed.
World clocks Type a city the way you write it ("new york", "São Paulo", "San Francisco"), and see offsets, day differences, and whether people there are at work or asleep. Meeting-planner mode checks a time across every zone.
Focus Pomodoro cycles that advance in the background, with Skip, presets, today's count, and a 7-day chart.
Sounds Eight bundled CC0 tones, or import your own MP3, WAV, OGG, M4A, AAC, FLAC, or WebM file.
Appearance Light, dark, or automatic themes; digital, analog, or both clock faces; gradients and accent colours; text size; reduced motion.
Backup Export alarms, world clocks, and appearance to a JSON file and import them on another browser.
Undo Deleting an alarm, timer, world clock, or focus session takes one click, and the message that follows offers Undo (or press Ctrl+Z).

Keyboard

Key Action
Alt+Shift+K Open Chronly from any tab (change it in your browser's extension shortcuts)
1–7 Switch tab
← → Move between tabs
Space Start or pause the stopwatch
L Record a stopwatch lap
Ctrl+Z (⌘+Z) Undo a delete while its message shows

Install

From a store: Chrome Web Store and Firefox Add-ons listings are on the way.

Try a release build: each GitHub release includes a Chrome build to load unpacked and a Firefox build to load temporarily.

From source (about two minutes):

git clone https://github.com/fredrikblau/chronly.git
cd chronly
npm install
npm run build            # or: npm run build:firefox
  • Chrome: open chrome://extensions, turn on Developer mode, choose Load unpacked, and select .output/chrome-mv3/.
  • Firefox: open about:debugging#/runtime/this-firefox, choose Load Temporary Add-on, and select any file in .output/firefox-mv3/.

Privacy and permissions

Chronly asks only for what it needs. This is the entire permissions list in the built manifest:

Permission Why
alarms Wakes the background so alarms, timers, and Pomodoro phases fire after the browser has suspended it.
notifications Shows the system notification when something rings.
storage Keeps your alarms, timers, settings, stats, and imported sounds in the browser.
offscreen (Chrome only) Lets Chrome play sound, because its background service worker has no audio API. Firefox's background page does not need it.

There are no host_permissions. Sounds are bundled, so nothing is downloaded when an alarm rings. See the privacy policy for details.

Contributing

Contributions of every size are welcome: bug reports, testing in a browser you use, docs, a city alias, an icon, or a feature. Start with CONTRIBUTING.md; it has the setup, the test commands, and recipes for common changes.

npm install
npm run dev              # Chrome with hot reload (npm run dev:firefox for Firefox)
npm run preview:popup    # the popup in a normal browser tab, no extension needed
npm run check            # typecheck, lint, format check, and unit tests
npm run test:e2e         # the built extension in real Chromium (see CONTRIBUTING.md)
npm run test:firefox     # the Firefox package in real Firefox

Good places to start:

To learn how the code fits together, see docs/ARCHITECTURE.md.

Project layout

entrypoints/   background worker, popup, and Chrome's offscreen audio page
lib/core/      framework-free logic: scheduling, storage, time zones, alerts, backup
lib/ui/        thin Svelte stores and display formatting over lib/core
components/    the popup's panels and shared pieces (Icon, RingingBanner, ...)
e2e/           Playwright specs that drive the built extension in Chromium
e2e-firefox/   WebDriver smoke tests for the Firefox package
tests/         Vitest suites for the popup shell and background worker
harness/       standalone Vite preview of the popup
scripts/       manifest checks and screenshot and store-asset generators

Firefox source review build

AMO reviewers can use Mozilla's default Ubuntu 24.04 environment with Node 24.14.0 and npm 11.9.0. From the source archive root:

npm ci
npm run build:firefox

The reviewable extension is written to .output/firefox-mv3/. The build uses the open-source packages pinned in package-lock.json and needs no network access after npm ci. Release steps are in RELEASING.md; store copy and assets are in docs/STORE_LISTING.md.

License

MIT. Bundled sounds are CC0; see docs/ASSET_LICENSES.md.

If Chronly saves you from a missed alarm, a ⭐ helps other people find it.

About

Private Chrome and Firefox clocks, alarms, timers, stopwatch laps, and Pomodoro sessions that persist across popup closure and browser restarts.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages