Skip to content
ml3devPublic

Latest commit

 

History

36 Commits

Folders and files

Repository files navigation

Drowzy icon

Drowzy

The open-source tab suspender for Chrome.
Auto-suspend inactive tabs with Chrome's own discard system. No tracking, no servers, no nonsense.

Chrome Web Store Version Chrome Web Store Users Chrome Web Store Rating MIT License GitHub Stars

Install from Chrome Web Store


Why Drowzy?

Most tab suspenders replace your tabs with custom placeholder pages. If the extension breaks, gets removed, or Chrome updates - your tabs are gone.

Drowzy is different. It uses Chrome's built-in chrome.tabs.discard() API, which means:

  • Suspended tabs are managed by Chrome itself - they survive restarts, crashes, and even uninstalling Drowzy
  • Tabs keep their place in the tab bar and full back/forward history - waking reloads the live page
  • No custom pages, no redirects, no chrome-extension:// URLs in your tab bar
  • Waking a tab is one click - Chrome reloads it in place

On top of that, Drowzy is fully open source, collects zero data, and runs entirely in your browser. No servers, no analytics, no accounts. Your tabs are yours.

Features

Core

  • Auto-suspend inactive tabs after a configurable timer (1 min - 4 hours, or manual only)
  • Smart protection - pinned, audio-playing, and whitelisted tabs are skipped by default; the pinned and audio protections are toggles you can turn off if you want those tabs to sleep too. Optional form-data protection also skips tabs with unsaved input (off by default, requires granting page access)
  • Keep this tab awake - hold a single tab awake without whitelisting the whole site. Nothing in Drowzy will sleep it until you press "Allow sleep" or close the tab, and the hold also tells Chrome's own Memory Saver to leave it alone; the hold clears when you restart your browser
  • Tells you why - when a tab can't sleep, Drowzy says which protection is stopping it and links straight to the setting that would change it, instead of quietly hiding the button. Tabs that are due but held back by unsaved input or a slow load say so in the list, and a line above the list says when auto-suspend is off
  • Whitelist sites with pattern matching and wildcards (e.g., github.com/ml3dev/*)
  • Keyboard shortcuts - suspend current, suspend others and wake all. Defaults are Alt+Shift+P, Alt+Shift+S and Alt+Shift+O on Windows, Alt+S, Alt+Shift+S and Alt+W elsewhere; change or clear them at chrome://extensions/shortcuts
  • Context menu - right-click any page for quick suspend options

Sessions & Organization

  • Save and restore sessions - bookmark your entire window state and reopen it later
  • Close duplicate tabs - one click closes tabs with exactly the same address; pinned tabs and tabs playing sound are kept
  • Tab search - filter your tab list by title or URL
  • Export and import - copy your tab list, or copy sessions as JSON and paste them back on another computer; Replace asks for a second click before it closes the current window's tabs

Polish

  • Dark and light theme - toggle in the header, preference is saved
  • Side panel - open Drowzy in Chrome's side panel from the popup header for a persistent full-height view
  • 50+ languages - UI automatically matches your browser language
  • Suspend indicator - optional [zzz] prefix on suspended tab titles (requires granting page access)
  • Suspend warning - optional on-page notice before a tab is auto-suspended (requires granting page access)
  • Stats dashboard - track how many tabs you've suspended and an estimate of the memory freed over time
  • Review prompt - a gentle, dismissable nudge that only appears after about a week of real use, with "Maybe later" and "Don't ask again" options (never on install, and a second "Maybe later" is taken as a no)

Browser support

Drowzy is built and tested for Chrome (version 120 or later). Other Chromium browsers such as Edge, Brave, Opera and Vivaldi can install it from the Chrome Web Store and the basics work the same way, though each adds its own tab features on top. In Opera and Opera GX, the automatic paths are gentler: nothing is suspended for the first 3 minutes after the browser starts, tabs are suspended one at a time, and tabs that were restored but never loaded are left to the browser. The side panel button only appears in browsers that support Chrome's side panel.

How It Works

Tab inactive for 15 min ──> Drowzy calls chrome.tabs.discard()
                                        │
                                        ▼
                              Chrome unloads the tab
                              (page unloaded, tab stays in bar)
                                        │
                                        ▼
                              User clicks tab ──> Chrome reloads it

Drowzy runs a lightweight alarm every 60 seconds. It checks each tab's last-active timestamp and suspends any that exceed your chosen threshold. The active tab, whitelisted sites and tabs you keep awake are always skipped; pinned tabs, audio tabs and tabs with unsaved form input are skipped while those protections are on. That's it - no background pages and no content scripts running on every page; between checks Drowzy does nothing.

Permissions

Drowzy requests only what it needs. Nothing is sent to external servers.

Permission Purpose
tabs List, suspend, and restore tabs
storage Save settings, stats, and sessions locally
alarms Periodic check for inactive tabs (every 60s)
contextMenus Right-click menu: suspend, whitelist
scripting Detect unsaved form data before suspending a tab
sidePanel Display Drowzy in Chrome's side panel
favicon Read Chrome's own local favicon cache so site icons show correctly. No network request is made, and Chrome shows no permission warning for it
optional_host_permissions Requested only if you enable form protection or tab marking

Full details in the Privacy Policy.

Development

Drowzy is vanilla JavaScript - no build tools, no dependencies, no node_modules. Clone and load:

git clone https://github.com/ml3dev/drowzy.git
cd drowzy
  1. Open chrome://extensions in Chrome
  2. Enable Developer mode (top right)
  3. Click Load unpacked and select the drowzy folder
  4. The extension icon appears in your toolbar - you're running from source

Project structure

drowzy/
  background.js       Service worker (suspension logic, storage, alarms)
  popup.html/js/css    Popup UI (tab list, sessions, settings)
  sidepanel.html       Side panel (same UI, different layout)
  formcheck.js         Content script (form detection, suspend warnings)
  icons.js             SVG icon library
  onboarding.html/js   First-run welcome page
  changelog.html/js    What's new page
  privacy-policy.html  Privacy policy
  _locales/            50+ language translations
  icons/               Extension icons (16-512px)
  scripts/             package.sh builds the release zip (pack.ps1 does the same on Windows)
  docs/                GitHub Pages site (landing page, uninstall feedback)
  .github/             CI: release workflow runs on every version tag

Contributing

Contributions are welcome. See CONTRIBUTING.md for guidelines.

Verifying a release

Every version on the Releases page attaches the exact .zip uploaded to the Chrome Web Store, along with its SHA-256 hash. To verify a Web Store build hasn't been tampered with:

  1. Download the published .crx from the Web Store (or grab the unpacked extension folder).
  2. Compare its contents against the matching drowzy-X.Y.Z.zip on the GitHub Releases page.
  3. The SHA-256 in the release notes is computed against that exact zip.

You can also reproduce the build yourself: git checkout vX.Y.Z, then zip the extension files (everything except .git/, .github/, *.md, docs/).

Changelog

See CHANGELOG.md for the full version history.

License

MIT - use it, fork it, learn from it.


Built by ml3dev