These are the Chrome APIs that Otto uses in the background to function smoothly. Some of them may sound technical or even a little alarming at first glance, so I wanted to explain—openly and simply how and why Otto needs them.
downloads
Allows you to export your focus data as a CSV file and save it directly to your computer. It’s only used when you actively choose to download your data.
host permissions
Otto needs to know the website address (URL) you’re visiting so it can check whether the site is on your blocked list. A content script runs on all sites and, if needed, replaces the page with a blank screen to support the point system.
scripting
Sometimes Chrome restarts its background worker, which can make timers unresponsive. To keep things seamless, Otto dynamically injects a script into pages so features like the always-on-top timer continue working without you having to reload.
- A small static script is also used for the rare case where a new tab doesn’t automatically get the dynamic script. This script simply tells the worker to inject the proper one.
activeTab
Used to quickly inject a script into the tab you’re currently viewing, ensuring features work right away. Without it, you’d need to manually refresh the page.
alarms
Otto uses Chrome’s alarm system instead of setInterval
because Manifest V3 no longer supports persistent background workers. Alarms make sure your focus and autoblock timers run reliably, even in the background.
storage
Used to save your app settings and states, so Otto remembers your preferences between sessions.
declarativeNetRequest
This API makes website blocking possible. Otto dynamically blocks sites you’ve chosen, using Chrome’s recommended and secure blocking system.
tabs
Otto sometimes needs to know the active tab and its website name so it can display the right timer or apply your settings.
notifications
When enabled, Otto can send you a gentle notification at the end of each Pomodoro session. This is optional and can be turned off in settings.
offscreen
Since Chrome extensions can’t directly play audio in the background, Otto uses an offscreen document to play sounds (like the timer chime).
unlimitedStorage
Otto stores your focus history and task analytics in IndexedDB, which allows much more space than local storage. This ensures you don’t lose your data as you track progress over time.