A powerful, lightweight browser extension for managing alarms, timers, and stopwatches directly from your browser.
Built as a Manifest V3 WebExtension with offline support and background alarm handling.
- ⏰ Alarms — Schedule alarms to notify you at specific times.
- ⏱️ Timers — Create countdown timers for tasks, study sessions, cooking, workouts, and more.
- ⏲️ Stopwatch — Track elapsed time directly from the extension.
- 🔔 Notifications — Receive browser notifications when alarms and timers trigger.
- 🔊 Alarm sounds — Supports configurable notification sounds, volume, and repeats.
- 😴 Snooze — Snooze notifications for 5–10 minutes.
- 📍 Notification positioning — Configure where notification windows appear.
- 💾 Persistent settings — Uses browser storage to retain extension preferences.
- 📴 Offline support — Core functionality works without an internet connection.
- ⌨️ Keyboard command — Quickly open the extension interface using a browser command.
- 🖱️ Context-menu integration — Provides browser context-menu functionality.
The extension uses modern WebExtension and Manifest V3 APIs.
The current Firefox configuration specifies:
Firefox 148.0 or newer
The extension also uses browser APIs including:
alarmsstorageidlecontextMenusoffscreen
- Clone the repository:
git clone https://github.com/brian-girko/alarm.git-
Open the browser's extension management page.
-
Enable Developer Mode.
-
Choose Load unpacked (or the equivalent option in your browser).
-
Select the
v3directory:
alarm/
└── v3/
- The extension should now appear in your browser's installed extensions.
v3/
├── _locales/
│ └── en/
│ └── messages.json
│
├── data/
│ ├── icons/
│ ├── popup/
│ ├── options/
│ ├── notify/
│ └── offscreen/
│
├── manifest.json
└── worker.js
| File / Directory | Purpose |
|---|---|
_locales/ |
Localization and translated extension messages |
data/ |
Extension interface and supporting resources |
manifest.json |
Manifest V3 configuration and extension metadata |
worker.js |
Background service worker responsible for extension logic |
The extension uses a Manifest V3 service worker as its background component.
The service worker handles background tasks such as scheduling and processing alarms.
When an alarm notification needs to play audio, the extension can create an offscreen document to handle audio playback when normal page playback is restricted by browser autoplay policies.
This allows alarm sounds to continue working in situations where a visible extension page cannot directly initiate audio playback.
The extension requests the following permissions:
| Permission | Purpose |
|---|---|
storage |
Store extension settings and preferences |
alarms |
Schedule and trigger alarms |
idle |
Work with browser idle-state information |
contextMenus |
Provide browser context-menu functionality |
offscreen |
Support background audio playback |
The extension also declares offline support in its manifest.
The extension is configured with:
"offline_enabled": trueThis allows its core functionality to operate without requiring an active internet connection.
Modern browsers restrict certain forms of automatic audio playback.
To handle this, the extension can use the browser's Offscreen API and an offscreen document for alarm audio playback.
The implementation includes:
- Audio playback
- Configurable volume
- Repeated playback
- Stopping active alarm sounds
- Fallback handling when the Offscreen API is unavailable
Version: 0.3.2
Manifest: Manifest V3
Contributions are welcome!
If you'd like to improve the project:
- Fork the repository.
- Create a branch for your change.
- Make your changes.
- Test the extension in a supported browser.
- Commit your changes with a clear commit message.
- Open a Pull Request.
Documentation improvements are also welcome, including:
- Fixing typos
- Improving explanations
- Adding usage examples
- Improving installation instructions
- Clarifying browser compatibility
- Improving developer documentation
If you encounter a bug or have an idea for improving the extension, please open an issue in the repository with enough information to reproduce or understand the problem.
When reporting a bug, consider including:
- Browser and version
- Operating system
- Steps to reproduce
- Expected behavior
- Actual behavior
- Relevant console errors or screenshots
Please refer to the repository's license information for the applicable licensing terms.
Repository: https://github.com/brian-girko/alarm
Extension homepage: https://webextension.org/listing/alarm.html
Made with ❤️ for a better way to manage time.