Automatically reject cookie consent banners. Privacy-first, open source.
KoalaCookies detects cookie consent banners on any website and clicks the "Reject All" button for you β instantly, silently, and privately. No data ever leaves your browser.
| Category | Capabilities |
|---|---|
| π« Automatic Rejection | Detects banners and clicks "Reject All" / "Decline" / "Nur notwendige" β with retry and adaptive timing |
| π Smart Detection | Recognizes 12+ providers (OneTrust, Cookiebot, Usercentrics, etc.) with keyword fallback, Shadow DOM, and iframe support |
| π 10 Languages | Button keywords in English, German, French, Spanish, Italian, Dutch, Polish, Swedish, Norwegian |
| π‘οΈ Two Modes | Gentle β leaves banner visible if no reject button found; Aggressive β hides the banner entirely |
| β±οΈ Multi-level Disable | Disable permanently, for 30 minutes, 1 hour, or 24 hours β with re-enable button showing remaining time |
| π Toolbar Badge | Colored icon badge: green β = rejected, orange ! = skipped, blue β = hidden, gray β = disabled |
| π¬ Page Indicator | Small colored dot in the bottom-right corner after each action β disappears after 3 seconds |
| π― Element Picker | Hover-highlight DOM elements and capture them as custom selectors for banner detection |
| π§© Custom Selectors | User-captured selectors take priority in the detection pipeline before built-in providers |
| π Statistics | Tracks detected, rejected, skipped, and hidden banners per domain and globally |
| π Action Log | Last 10 actions with timestamp, domain, method, and button text β copyable as formatted text |
| π Dev Tools | Per-page debug info + scrollable list of all known providers with CSS selectors + Report Issue button |
| π Dark Mode | Respects your system preference automatically |
| π i18n | English and German translations for full UI including Dev tab |
| π Privacy-First | 100% local β no external connections, no tracking, no analytics, no remote rule fetching |
| π¦ Zero Dependencies | Pure vanilla JavaScript, no npm packages, no CDNs, no frameworks |
β οΈ KoalaCookies is currently in development. Load it temporarily or download from releases.
- Download the latest
koala_cookies_firefox_v*.zipfrom the releases page - Open
about:debuggingβ This Firefox β Load Temporary Add-on - Select the zip file
- Download the latest
koala_cookies_chrome_v*.zipfrom the releases page - Extract the zip to a folder
- Open
chrome://extensionsβ Enable Developer mode β Load unpacked - Select the extracted folder
User visits a website
β
βΌ
Content script injects in all frames βββΊ scans DOM
β β
β βββββββββββββ΄ββββββββββββ
β βΌ βΌ
β Provider match? Keyword match?
β (rules.json) (rules.json)
β β β
β βββββββββββββ¬ββββββββββββ
β βΌ
β Banner detected
β β
β βββββββββββββ΄ββββββββββββ
β βΌ βΌ
β Reject button found? Settings menu found?
β (clicker.js) (clicker.js)
β β β
β ββββ Retry (500ms) β
β β β
β βββββββββββββ¬ββββββββββββ
β βΌ
β Action performed
β (rejected / hidden / skipped)
β β
β βββββββββββββ΄ββββββββββββ
β βΌ βΌ
β Toolbar badge updated Page indicator shown
β β β
β βββββββββββββ¬ββββββββββββ
β βΌ
β Message sent to background
β β
β βΌ
β Stats + log written to
β chrome.storage.local
β β
βΌ βΌ
User sees result in popup (Stats / Log / Dev tabs)
KoalaCookies processes everything locally in your browser. It makes zero network requests of its own, collects no telemetry, sets no cookies, and sends no data anywhere.
All data (statistics, action log, settings, whitelist) is stored exclusively in chrome.storage.local β the browser's sandboxed local storage that never syncs to any server.
π Read the full privacy policy
- A modern browser (Firefox 109+ or Chromium-based)
- Node.js 18+ (for build scripts)
- Git
KoalaCookies/
βββ docs/ # Documentation (architecture, privacy, roadmap)
β βββ ai_init.md # Implementation plan & vision
β βββ architecture.md # Technical architecture
β βββ privacy.md # Privacy policy
βββ extension/ # Extension source code
β βββ manifest.json # Extension manifest (MV3)
β βββ rules/ # Rule database (providers + keywords)
β βββ src/ # JavaScript modules
β β βββ background.js # Service worker (message router, stats, tab state, badge, picker injection)
β β βββ content.js # Content script (DOM scan, click orchestration, retry, page indicator, SPA/iframe support)
β β βββ storage.js # chrome.storage.local abstraction + stats lock + expired disable cleanup
β β βββ rulesEngine.js # Rules loader (fetches rules/rules.json from rules/ dir, provides provider/keyword data)
β β βββ selectors.js # Banner detection (custom β providers β keywords β Shadow DOM + urlPattern filtering)
β β βββ clicker.js # Button finding + click strategies (text scoring, settings panel, adaptive wait, hide)
β β βββ picker.js # Element picker (hover highlighter + DOM element capture)
β βββ popup/ # Popup UI (Stats, Log, Dev tabs)
β β βββ popup.html
β β βββ popup.js
β β βββ popup.css
β βββ styles/ # Global CSS variables + dark mode
β βββ _locales/ # Translations (en, de)
β βββ icons/ # Extension icons
βββ scripts/ # Build & utility scripts
β βββ build.sh # Build Firefox + Chrome ZIPs
β βββ generate-icons.sh # Generate icons via Python
β βββ generate_icons.py # Python script: creates PNG icons from code
βββ .github/workflows/ # CI/CD pipelines
β βββ release.yml # Auto-builds and publishes on tag push
βββ README.md
# Build both Firefox and Chrome packages
bash scripts/build.sh
# Output is in releases/The build script:
- Reads the version from
extension/manifest.json(or$1argument) - Creates a Firefox-compatible ZIP with
browser_specific_settings.gecko(configurable via$FIREFOX_EXTENSION_ID) - Creates a Chrome-compatible ZIP (strips Firefox-specific keys)
- Injects the version number into
popup.html
- Firefox:
about:debuggingβ This Firefox β Load Temporary Add-on β Selectextension/manifest.json - Chrome:
chrome://extensionsβ Developer Mode β Load unpacked β Selectextension/folder
| Script | Purpose |
|---|---|
scripts/build.sh |
Builds Firefox + Chrome ZIP packages |
scripts/generate-icons.sh |
Regenerates extension icons from Python |
scripts/generate_icons.py |
Generates PNG icons programmatically (no external tools) |
Contributions are welcome! Here's how to get started:
- Fork the repository
- Create a feature branch (
git checkout -b feat/amazing-feature) - Make your changes (keep it vanilla JS, no external deps)
- Test locally in Firefox and Chrome
- Open a Pull Request
See docs/ai_init.md for the full implementation roadmap and coding conventions.
MIT License β see LICENSE for details.
Copyright (c) 2026 KoalaCookies Contributors