Skip to content

Browser extension for opting out from the sale and sharing of personal information per the California Consumer Privacy Act and other privacy laws

License

Notifications You must be signed in to change notification settings

bdougherty/gpc-optmeowt

 
 

Repository files navigation

GitHub release (latest by date) GitHub Release Date GitHub last commit GitHub issues GitHub closed issues GitHub GitHub watchers GitHub Repo stars GitHub forks


OptMeowt logo

OptMeowt ๐Ÿพ

OptMeowt ("Opt Me Out") is a browser extension for opting you out from web tracking. OptMeowt works by sending Do Not Sell signals to visited websites per the Global Privacy Control (GPC) spec that we are developing at the W3C and placing opt out cookies.

Firefox Add Ons badge Chrome Web Store badge

How does OptMeowt work?

OptMeowt sends Do Not Sell signals to all sites you visit when browsing the web. Such signals must be respected for California consumers per the California Consumer Privacy Act (CCPA), Regs Section 999.315(d) but many companies also respect them when they are sent from outside of California. OptMeowt also places opt out cookies.

In detail, OptMeowt uses five methods to opt you out:

  1. The GPC header and JS property.
  2. The DNT header.
  3. The IAB CCPA Compliance Framework for Publishers & Technology Companies, implemented in a first party cookie.
  4. Third party cookies of ad networks participating in the DAA's CCPA Opt Out Tool for the Web.
  5. Custom headers and cookies used by individual websites maintained and updated in OptMeowt's Do Not Sell list.

Customizing which Sites Receive Do Not Sell Signals For every website you visit OptMeowt will automatically add its domain to the domain list meaning that the domain will receive a Do Not Sell signal. However, you can exclude domains that should not receive a Do Not Sell signal. This functionality is available on OptMeowt's settings page that you can access from OptMeowt's popup window.

Installing OptMeowt from Source

  1. Clone this repo locally, or download a zipped copy and unzip it.
  2. Follow these steps on the npm Docs to install npm.
  3. Navigate to the folder where you saved OptMeowt on your local machine from within the Terminal.
    Note: Replace ... in the command below with the location of your cloned OptMeowt folder. If you are in its parent folder, ... may be empty and you won't have to type anything.
    cd .../gpc-optmeowt/
  4. Now install all of OptMeowt's dependencies by running the following command:
    npm ci
  5. Then, build the project by running the following command:
    npm run build
    This builds the project for both Chrome and Firefox in the following directories respectively:
    .../gpc-optmeowt/dist/chrome/ and .../gpc-optmeowt/dist/firefox/

Chrome

  1. In Chrome, navigate to the extensions page at chrome://extensions/.
  2. Enable Developer mode with the slider on the top right corner of the extension page.
  3. Click the Load unpacked button in the top left of the page.
  4. Navigate to where you built OptMeowt and select the dist/chrome subfolder (the folder should contain a copy of manifest.json). I.e.,
    .../gpc-optmeowt/dist/chrome/
  5. Click to finalize the install.

Firefox

  1. In Firefox, navigate to the addons page with developer privileges at about:debugging#/runtime/this-firefox.
  2. Under Temporary extensions, click Load Temporary Add-on...
  3. Navigate to where you built OptMeowt and select the manifest file from the dist/firefox folder. I.e.,
    .../gpc-optmeowt/dist/firefox/manifest.json/
  4. Click to finalize and install OptMeowt.

Please note that OptMeowt is in active development and new features are frequently added, some of which may cause errors. You can always get the stable release version on the Chrome Web Store and on Firefox Add-Ons.

Installing OptMeowt for Developers

Follow the directions above, replacing the command in step 4 above with npm run start in order to run the npm script (located in package.json) which will call Webpack in development mode (Webpack settings in webpack.config.js). This will also initiate Webpack servers for both the Firefox and Chrome versions which will listen for changes as you work and rebuild when necessary.

In addition, instead of running npm ci in step 4 above, run npm install. Especially, if you include new dependencies, npm install will include those in the package-lock.json, which is generated from the package.json.

Notice that Webpack will build the development versions of OptMeowt into the dev subfolder instead of dist, with subfolders dev/firefox and dev/chrome accordingly.

Optional

We also like to use Debugger for Firefox from within VSCode when in development to help automate loading the built extension package. The default behavior is F5 to launch and load the extension in browser. There is a similar extension for Chrome, Debugger for Chrome. Make sure to follow the online documentation on writing the correct .vscode/launch.json file, or other necessary settings files, in order to properly load OptMeowt with the debugger.

OptMeowt's Permission Use

We do not collect any data from you. Third parties will also not receive your data. The permissions OptMeowt is using are required for opting you out. To that end, OptMeowt uses the following permissions:

"permissions": [
    "webRequest",
    "<all_urls>",
    "webRequestBlocking",
    "webNavigation",
    "storage",
    "activeTab",
    "cookies",
    "tabs"
  ]
  • webRequest: Pauses outgoing HTTP requests to append opt out headers
  • <all_urls>: Allows modification of outgoing HTTP requests
  • webRequestBlocking: Necessary for pausing outgoing HTTP requests
  • webNavigation: Similar to webRequest, allows OptMeowt to check when navigation requests are made to reset processes
  • storage: Allows OptMeowt to save your opt out preferences in your browser
  • activeTab: Allows OptMeowt to set opt out signals on your active browser tab
  • cookies: Allows OptMeowt to place opt out cookies in your browser
  • tabs: Allows OptMeowt to keep track of HTTP headers per tab to show you the opt out status of the current site in a popup

Directories in this Repo

  • src/: Main contents of the OptMeowt browser extension.
  • src/assets: Graphical elements of the extension, including logos and button images.
  • src/background: Listeners for events and logic for placing cookies.
  • src/data: Definitions of headers, cookies, and privacy flags.
  • src/options: UI elements and scripts for the supplemental options page.
  • src/popup: UI elements and scripts for the popup inside the extensions bar.
  • src/theme: Dark and light mode themes.
  • ui-mockup: Contains PDF and XD files demonstrating the preliminary mockup and analysis of OptMeowt.

Third Party Libraries

OptMeowt is dependent on various third party libraries. We thank the developers.

Developer Guide

  • When contributing, it is important to note that we manage all package dependencies with npm. Thus, it is recommended to use npm i to install packages.
  • When viewing your browser's console on a site you are sending GPC signals to, a 404 error regarding the site's GPC status file (/.well-known/gpc.json) may be shown. Note that this is perfectly normal, and will occur frequently (1) on sites that do not support GPC and (2) may even occur on sites that do respect GPC simply if the website does not host such a /.well-known/gpc.json file.
  • If you have questions about OptMeowt's functionality or have found a bug, please check out our FAQ \ Known quirks page on the Wiki first to see if we have already addressed the issue. If you cannot find what you are looking for, please feel free to open an issue and we will address it as soon as we can!

More Information ๐Ÿˆ

Learn more here.

privacy-tech-lab logo

About

Browser extension for opting out from the sale and sharing of personal information per the California Consumer Privacy Act and other privacy laws

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 71.3%
  • HTML 20.2%
  • CSS 8.5%