Privacy Essentials
duckduckgo.com/appSimple extension by DuckDuckGo, which grades the security of each site. Download:
Chrome
Firefox
- Homepage: duckduckgo.com/app
- GitHub: github.com/duckduckgo/duckduckgo-privacy-extension
- Privacy: tosdr.org/en/service/222
- Web info: web-check.xyz/results/duckduckgo.com
Privacy Essentials Privacy Policy
Privacy Policy Summary
- No need to register
- The service makes critical changes to its terms without user involvement
- This service provides an onion site accessible over Tor
- You can delete your account and Duck Addresses
- Instead of asking directly, this Service will assume your consent merely from your usage.
Score
Documents
- Privacy PolicyCreated 17 Jul 18, Last modified 1 year ago
- Commercial TermsCreated 12 Apr 24, Last modified 1 year ago
- Terms of ServiceCreated 01 May 25, Last modified 10 months ago
Domains Covered by Policy
- duckduckgo.com
- 3g2upl4pq6kufc4m.onion
- spreadprivacy.com
- duckduckhack.com
- donttrack.us
- duck.co
- duck.com
About the Data
This data is kindly provided by tosdr.org. Read full report at: #222
Privacy Essentials Source Code
Author
Description
DuckDuckGo Privacy Essentials browser extension for Firefox, Chrome.
Homepage
https://duckduckgo.com/appLicense
Apache-2.0
Created
11 Dec 17
Last Updated
25 Feb 26
Latest version
Primary Language
JavaScript
Size
120,402 KB
Stars
1,424
Forks
306
Watchers
1,424
Language Usage
Star History
Top Contributors
-
@jdorweiler (1017)
-
@dependabot[bot] (809)
-
@laurengarcia (718)
-
@MariagraziaAlastra (653)
-
@andrey-p (567)
-
@mrshu (381)
-
@kzar (258)
-
@jonathanKingston (206)
-
@sammacbeth (202)
-
@russellholt (189)
-
@dharb (86)
-
@moollaza (83)
-
@github-actions[bot] (64)
-
@GioSensation (34)
-
@kdzwinel (28)
-
@shakyShane (28)
-
@daxmobile (24)
-
@SlayterDev (23)
-
@Charlie-belmer (22)
-
@bsstoner (22)
-
@ladamski (15)
-
@muodov (12)
-
@alistairjcbrown (10)
-
@GuiltyDolphin (9)
-
@zachthompson (8)
-
@jeannamatthews (7)
-
@nshuba (6)
-
@Sayanc93 (5)
-
@AdamSC1-ddg (5)
-
@bbraithwaite (4)
Recent Commits
-
Maxim Tsoy (25 Feb 26)
Fix flaky tests for CPM pixels (#3417) * Clean up pixel loggers to stabilize the test * Lint * cleanup after the tests * Bring back pixel timeout * create a new buffer for every test
-
Maxim Tsoy (24 Feb 26)
Embedded release automation (#3413) * add optional parameter to the version bump script * Add a workflow to update embedded extension in the apple repo * Add a comment about PR parsing * ignore autoconsent in dependabot (we bump it manually from another workflow)
-
Maxim Tsoy (20 Feb 26)
Declare CPM content scripts via manifest (#3406) * declare CPM content scripts via manifest * Disable CPM logs in production builds * Lazy load CPM content script in the standalone extensions * reuse the same contentscript id * Move content script logic under CPM class * Run CPM only on http(s) pages
-
Maxim Tsoy (17 Feb 26)
Embedded extension tweaks (#3405) * Add a special manifest entry as per https://app.asana.com/1/137249556945/task/1213260761977169 * Add a special CPM pixel parameter in the embedded extension
-
Dave Vandyke (17 Feb 26)
Refactor the Playwright request helpers (#3367) The Playwright integration tests have some helpers for observing the requests made by the test pages. They are used for things like checking tracking requests are blocked correctly. The (work in progress) Firefox Playwright harness will intercept requests in a different way, needing access to the extension's background context, so let's start passing the background context in ready. Let's also re-use the logPageRequests helper where possible, rather than duplicating the request logging logic. That way, when we add the Firefox harness, which will need requests to be handled differently, we can just update the logPageRequests abstraction. While making these changes several improvements were necessary: - Fixed how redirected requests are recorded, that wasn't working correctly. - There's a Playwright/Chrome issue whereby requests that are redirected and then blocked, are sometimes just reported as blocked. So let's add a workaround for that. - A couple of the requests on the request blocking test page aren't reported reliably, so let's avoid failing when that happens (whilst still checking all the known requests were handled correctly.) - Let's improve the output when the (usually reliable) requests for the request blocking test page really _have_ timed out. - Ensure the tests stop listening for request events once they are done. - Add missing test host domains, which help the tests run more reliably, by ensuring requests to those domains are routed properly. Some of the individual tests needed to be improved as well: - Get the click attribution tests passing more reliably by ensuring unrelated pixel requests aren't counted, and by waiting for the extension to finish loading before the tests run. - Get the Facebook Click to Load tests passing more reliably by ensuring that we wait for the blocked iframe request events, before moving on to the test that requests are allowed when the Load buttons are clicked. Otherwise, the blocked events sometimes fire late, causing the later tests to fail.
-
Dave Vandyke (17 Feb 26)
Add an integration test for empty-config handling (#3395) We want to make sure that if an empty (but valid) remote configuration or blocklist are loaded, the extension handles that OK and doesn't break. Let's add a test that covers that situation now.
-
Dave Vandyke (17 Feb 26)
Add Playwright harness wrapper for page.addScriptTag calls (#3365) The (work in progress) Firefox Playwright harness needs to add script tags in a different way, due to Firefox using more restrictive CSP enforcement. Let's create a simple wrapper for page.addScriptTag for now, to reduce the refactoring required when we add the new Firefox harness.
-
Dave Vandyke (17 Feb 26)
Ensure manuallyWaitForFunction Promise doesn't attempt to resolve twice (#3364) The (work in progress) Firefox Playwright harness is failing sometimes, when the manuallyWaitForFunction function attempts to resolve/reject the returned Promise more than once. Let's prevent that from happening, ready for when we add the new harness.
-
Maxim Tsoy (17 Feb 26)
Embedded CPM extension (#3347) * Initial CPM * CPM pixels * PoC embedded extension with CPM * Remove CPM from the non-embedded extension * test remote config api * temporarily add macos bundled config * Extract base resource loader logic * Implement ResourceLoader backend for the embedded extension * Move IDB caching into the base resourceloader class * config caching in the embedded extension * Trigger the first config refresh * Use c-s-s Messaging for extension-native comms * Move all messaging implementation from c-s-s into the extension repo * Log native requests * Fix type errors * Mock the native comms * Add some stubs in CPM implementation * Update dashboard state * Store cpm state in session storage and request address bar animation * Notify that popup is handled * handle report message * cache subfeature state * send a missing pixel * implement pixel sending logic * Fix a message property name * Proxy pixels to native * Proxy feature status calculation to native * rename message * lint cleanup * Implement reload loop prevention in CPM extension * Simplify native messaging impl * Add default locale to the embedded extension * Decouple MessageRouter from the handler functions and reuse it in the embedded extension * Create a component encapsulating all CPM-native comms * Remove premature config class complexity * Add nativeMessaging permission * Roll back unnecessary pixel change * Clean up the embedded build * Try to send the summary pixel on suspend * Request "daily" pixels from native * CPM component for the main extension * Lint * fix package-lock * Refresh config more often * Fix a bug in config fetching * Prevent state race condition between message handlers * Make native app id configurable * Add debug logging * move messaging mock to a separate file * Use runtime.sendNativeMessage to work around webkit bugs * Fix content script registration * Add global error listeners * Don't bundle rules in cpm extension * Fix exception on apple platforms * Change error messages * Pass some logs to xcode * Add message for checking autoconsent user setting * Cache native checks to reduce the messaging noise * Native message queue with caching * minor * Lint * Log alarms * Lint * Move cpm.js out of content-scripts/ to avoid race condition wtih rsync * Add CPM to MV3 builds (still gated by the config) * Use Autoconsent exported types (see https://github.com/duckduckgo/autoconsent/pull/1151) * Tweak cache ttls * Update autoconsent * Add unit te4sts for cpm-embedded-messaging (verified) * Remove test mocks * Use senderURL as a fallback for top url * remove unnecessary test * Verify that native response is an object * Fix possible lock if the initial config refresh fails * Lint * Add integration tests for CPM * Do not check cohort for cpm subfeatures * remove unnecessary ts-ignore * Add unit tests for standalone CPM messaging * disable CPM tests in non-mv3 builds * Use tab URL provided by extension api * Better handle invalid tabId * Handle potential invalid config * Do not mute errors in NativeMessaging * Log session storage bytes * Gracefully handle session storage failures * prevent recursive errors * fix unit test * fix playwright test * Add npm scripts for embedded extension --------- Co-authored-by: Sam Macbeth <smacbeth@duckduckgo.com>
-
Dave Vandyke (12 Feb 26)
Get the integration tests for storage blocking running more reliably (#3392) The storage blocking integration tests were failing quite often. It turned out that the test page[1] loads several iframes, and gives up waiting for them to load after one second. When they don't load quickly enough, `waitForAllResults()` never resolves, and the tests will timeout after 30 seconds. Usually, the answer would be to route the iframe requests locally using Playwright. Unfortunately, in this instance we can't do that because doing so prevents the extension's cookie protections from being applied. Instead, let's workaround the issue for now by having the testpage wait for up to 10 seconds for those iframes to load instead. 1 - https://privacy-test-pages.site/privacy-protections/storage-blocking
-
Lucas Adamski (11 Feb 26)
Hosted version for product.json (#3396) * hosted version check for pixells * git ignore pixel_processing_results/ --------- Co-authored-by: Lucas Adamski <ladamski@duckduckgo.com>
-
Dave Vandyke (10 Feb 26)
Get the fire animation integration test case passing more reliably (#3363) Instead of waiting for exactly three seconds before checking that the page was redirected, instead wait for the redirection to finish.
-
Dave Vandyke (10 Feb 26)
Ensure the Playwright route handler is set up early enough (#3366) Tests were sometimes timing out for the MV3 build, waiting for `background.forAllConfiguration()` to resolve. It turned out, that occasionally the request for the HTTPS bloom filter would start before the route handler could be set up, which resulted in the request sometimes failing and therefore `https.isReady` to remain false. Let's set up the route handler as soon as possible, to avoid that from happening. Notes: - The ATB tests had to be tweaked, since with this change routing was set up early enough for the MV3 build to ensure the initial ATB request was routed and uses the mock ATB value stored in the HAR file. - It turns out that routing on the persistent context does _not_ catch extension background initiated requests for the MV2 extension, so we need to continue routing from the background page there. - There is a race condition where requests can be made between when Playwright sets up the persistent browser context, and when the routing is set up (both for MV2 and MV3). Therefore we can't always be sure if the extension-success page is going to be routed or not.
-
Dave Vandyke (10 Feb 26)
Get the HTTPS loop protection tests running more reliably (#3393) The HTTPS loop protection feature aims to protect the user from infinite redirection loops caused by upgrading HTTP navigations to HTTPS. It works by activating if seven such redirections happening within a three second window. When the integration tests were running slowly, the test page's redirections didn't happen within that three second window, so the tests would fail. Let's add a check, so that when the tests are running too slowly to work, we skip them instead.
-
Ben Moon (05 Feb 26)
Bump CSS dependency to 13.0.0 (#3388) * Bump CSS dependency * Update config types * Make duplicate tests more specific * Fix type * Fix duplicate test names * Fix unit tests * Fix duplicate test names * Bump CSS to 13.0.0
-
Ben Moon (04 Feb 26)
Add CSS dependabot group + bump PR limit (#3381) * Add group for content scope scripts * Bump PR limit
-
Ben Moon (03 Feb 26)
Add breakageData parameter to breakage reports (#3360)
-
Dave Vandyke (30 Jan 26)
Get the integration tests for GPC passing more reliably (#3362) Wait to make sure the extension's configuration has loaded and the test page has created the iframe before checking for GPC.
-
Dave Vandyke (30 Jan 26)
Get the Playwright tests running headlessly and allow retries (#3355) Let's get the Playwright tests running headlessly, since that allows folks to interact with their computer while the tests are running. Also, let's allow retries consistently when running the tests, since they flake sometimes when run locally too.
-
Dave Vandyke (30 Jan 26)
Improve Playwright harness reliability (#3358) Improve the Playwright test harness to get the tests passing more reliably: 1. There is a race condition that causes Playwright to miss the extension's background ServiceWorker sometimes. When that happens, let's restart the ServiceWorker, so that Playwright can attach to it the second time. 2. Add missing awaits from `context.route` calls, which were causing some error messages. ( H/T to @jonathanKingston, who spotted this with https://github.com/duckduckgo/duckduckgo-privacy-extension/pull/3330 .) 3. Add a missing `context.close()` call, following the example in the docs https://playwright.dev/docs/chrome-extensions#introduction. 4. Catch and ignore exceptions when routing the post-install page to the local copy. That fails sometimes, but doesn't seem too important.
-
Dave Vandyke (29 Jan 26)
Downgrade Playwright to get MV2 integration tests working again (#3359) We previously upgraded to Playwright 1.58.0, but that caused Chromium to be upgraded to 145, which no longer support MV2 extensions. Unfortunately, we'll need to downgrade to 1.54.2, since that uses Chromium 139 which still has MV2 support. In the future, we'll need to get the MV2 codepaths tested against Firefox instead. Unfortunately this also means we need to add back the `PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS` environment variable for now as well. See https://developer.chrome.com/docs/extensions/develop/migrate/mv2-deprecation-timeline
-
Dave Vandyke (29 Jan 26)
Add .claude directory to .gitignore (#3351) Claude Code seems to create a .claude/ directory within each project, let's ignore that for now.
-
Dave Vandyke (28 Jan 26)
Workaround some integration test failures (#3354) * Workaround some integration test failures I found issues running two of our integration tests: 1. The conditional matching experiment tests seem to fail since the test page entirely fails to load. That was related to the `routeFromLocalhost(page);` call, so let's get rid of the routeFromLocalhost call for now to get the test running again. 2. One of the canvas fingerprinting test cases is failing for me consistently, let's skip that test for now. * Apply suggestion from @jonathanKingston Co-authored-by: Jonathan Kingston <jonathan@jooped.co.uk> --------- Co-authored-by: Jonathan Kingston <jonathan@jooped.co.uk>
-
Dave Vandyke (28 Jan 26)
Update Playwright to 1.58.0 and remove redundant ServiceWorker env (#3353) Let's update Playwright to 1.58.0, and while we're at it let's remove the PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS environment variable, since that is now enabled by default[1]. 1 - https://github.com/microsoft/playwright/pull/37868/changes/08d98fbc73ca245954eb29a428216db581ab8025
-
Dave Vandyke (28 Jan 26)
Get the navigator.interface integration tests passing more reliably (#3352) Occasionally, `navigator.duckduckgo` would be injected by the content script too slowly, causing the test page to report the interface as missing. Let's fix that race condition in the test by waiting for the content script to finish before checking the outcome.
-
Dave Vandyke (27 Jan 26)
Update the README for the integration tests (#3349) The documentation for the integration tests was a little unclear, so let's simplify it. Also, let's add working examples for running individual tests, and also for running an individual test repeatedly (useful when checking for flakiness).
-
github-actions[bot] (12 Jan 26)
Release 2026.1.12 [ci release] (#3342) Co-authored-by: jonathanKingston <338988+jonathanKingston@users.noreply.github.com>
-
Dave Vandyke (12 Jan 26)
Hotfix for change of messaging behaviour in Chrome 145 (#3341) While testing an upcoming release against Chrome Canary, we found that core functionality of the extension was broken. Worryingly we noticed currently released version of the extension was broken with Chrome Canary too. With Chrome 145 due to ship around Feb 10th (a month away)[1], we needed to investigate that quite urgently. Bisecting Chromium builds pointed us to this commit[2] where native support for the `browser` namespace was added. We have been using the webextension-polyfill library[3] to provide that namespace so far, and to "Promisify" some of the extension APIs. It turns out that once Chrome made `browser` available, the polyfill library let Chrome take care of those APIs and the `runtime.onMessage` API started behaving slightly differently, which in turn broke this extension. The change in behaviour seems to be that when there are multiple `runtime.onMessage` listeners that provide a mix of asynchronous and synchronous responses, the synchronous response sometimes win now even when the response is `null`/`undefined`. Previously the asynchronous response would make it back to the sender OK. The Chromium issue[4] to investigate and hopefully fix that change of behaviour is still in progress, but in the mean time let's get a hotfix out to help ensure our users aren't impacted. Note: Further changes might be required in the future, since we seem to have multiple `runtime.onMessage` listeners in the codebase. This patch is just a minimal hotfix to get things working for now. 1 - https://chromiumdash.appspot.com/schedule 2 - https://chromium.googlesource.com/chromium/src/+/5d4acd02f7f6a7d79530f01f2dffce4e9c8aa490 3 - https://github.com/mozilla/webextension-polyfill 4 - https://issues.chromium.org/issues/467294033
-
Dave Vandyke (19 Dec 25)
Make reason field for Request Blocklist rules optional (#3331) While we generally want to ignore rules with missing properties, the "reason" field is kind of an exception. We might need to strip that from the configuration in the future if the configuration grows too large, so let's ensure we'd still accept the rules if we did.
-
Jonathan Kingston (18 Dec 25)
Add a lockfile check (#3329) * Add a lockfile check * Lint fix * Remove early bail out * feat: Check git dependency pins against GitHub API Co-authored-by: jkingston <jkingston@duckduckgo.com> * Fix: Improve lockfile validation error handling and messages Co-authored-by: jkingston <jkingston@duckduckgo.com> * Fix: Handle different lockfile versions for git dependencies Co-authored-by: jkingston <jkingston@duckduckgo.com> --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Privacy Essentials Website
Website
DuckDuckGo — Privacy, simplified.
The Internet privacy company that empowers you to seamlessly take control of your personal information online, without any tradeoffs.
Redirects
Redirects to https://html.duckduckgo.com/html
Security Checks
All 66 security checks passed
Server Details
- IP Address 52.149.246.39
- Location Washington, Virginia, United States of America, NA
- ISP Microsoft Corporation
- ASN AS8075
Associated Countries
-
US
Safety Score
Website marked as safe
100%
Blacklist Check
duckduckgo.com was found on 0 blacklists
- ThreatLog
- OpenPhish
- PhishTank
- Phishing.Database
- PhishStats
- URLhaus
- RPiList Not Serious
- AntiSocial Blacklist
- PhishFeed
- NABP Not Recommended Sites
- Spam404
- CRDF
- Artists Against 419
- CERT Polska
- PetScams
- Suspicious Hosting IP
- Phishunt
- CoinBlockerLists
- MetaMask EthPhishing
- EtherScamDB
- EtherAddressLookup
- ViriBack C2 Tracker
- Bambenek Consulting
- Badbitcoin
- SecureReload Phishing List
- Fake Website Buster
- TweetFeed
- CryptoScamDB
- StopGunScams
- ThreatFox
- PhishFort
Website Preview
Privacy Essentials Reviews
More Browser Extensions
-
-
-
-
Firefox Multi-Account Containers lets you keep parts of your online life separated into color-coded tabs that preserve your privacy. Cookies are separated by container, allowing you to use the web with multiple identities or accounts simultaneously. Download: Firefox
-
Provides user control over WebRTC privacy settings in Chromium, in order to prevent WebRTC leaks. Download: Chrome. For Firefox users, you can do this through browser settings. Test for WebRTC leaks, with browserleaks.com/webrtc
-
-
-
-
Enables the First Party isolation preference (Clicking the Fishbowl icon temporarily disables it) Download: Firefox
-
-
Emulates remote frameworks (e.g. jQuery, Bootstrap, Angular) and delivers them as local resource. Prevents unnecessary 3rd party requests to tracking CDNs Download: Firefox
-
-
-
Spoofs browser's User-Agent string, making it appear that you are on a different device, browser and version to what you are actually using. This alone does very little for privacy, but combined with other tools, can allow you to keep your fingerprint changing, and feed fake info to sites tracking you. Some websites show different content, depending on your user agent. Download: Chrome - Firefox - Edge - Opera - Source
-
-
Simplified HTTPS upgrades for Firefox (lightweight alternative to HTTPS-Everywhere) Download: Firefox
-
-
-
Displays a country flag depicting the location of the current website's server, which can be useful to know at a glance. Click icon for more tools such as site safety checks, whois, validation etc Download: Firefox
-
-
Helps protect web searchers from surveillance and data-profiling, through creating meaningless noise and obfuscation, outlined in their whitepaper. Controversial whether or not this is a good approach Download: Firefox - Source
-
-
Notifies you when visiting a known or potential phishing site, and detects suspicious JavaScript (including skimmers and miners). Also provides a simple rating for a given site's legitimacy and security. Great for less technical users. Netcraft also has a handy online tool: Site Report for checking what any given website is running. Download: Chrome \ Firefox \ Opera \ Edge
-
NOTE On modern browsers, this is no longer needed Forces sites to load in HTTPS, in order to encrypt your communications with websites, making your browsing more secure (Similar to Smart HTTPS). Note this functionality is now included by default in most modern browsers. Download: Chrome
Firefox -
Linguist is a privacy‑focused translation solution in-browser that has an embedded offline translator and lets users create custom translators to use any translation API, even if it's locally deployed. Full-page translation, selected text translation, dictionary, history, and other features you may expect of a full-featured translation solution in-browser. Download: Chrome / Firefox
About the Data: Privacy Essentials
API
You can access Privacy Essentials's data programmatically via our API.
Simply make a GET request to:
https://api.awesome-privacy.xyz/security-tools/browser-extensions/privacy-essentials The REST API is free, no-auth and CORS-enabled. To learn more, view the Swagger Docs or read the API Usage Guide.
About the Data
Beyond the user-submitted YAML you see above, we also augment each listing with additional data dynamically fetched from several sources. To learn more about where the rest of data included in this page comes from, and how it is computed, see the About the Data section of our About page.
Share Privacy Essentials
Help your friends compare Browser Extensions, and pick privacy-respecting software and services.
Share Privacy Essentials and Awesome Privacy with your network!