While we cannot compel others to avoid a particular browser, we can take steps to reduce its data collection. To that end, I created a script that disables telemetry features in Mozilla’s Gecko-based browsers and removes the associated telemetry.sqlite
database file to eliminate stored telemetry data.
#!/bin/sh
# disable_gecko_browser_telemetry.sh — Disable telemetry for Gecko-based browsers
set -eu
log() { echo "[*] $1"; }
warn() { echo "[!] $1" >&2; }
error() { echo "[✘] $1" >&2; exit 1; }
show_help() {
cat <<EOF
disable_gecko_browser_telemetry.sh – Disable telemetry in Firefox, Waterfox, LibreWolf, Mullvad, and Tor Browser
Usage:
./disable_gecko_browser_telemetry.sh
./disable_gecko_browser_telemetry.sh --help
Features:
- Locates supported Gecko-based browser profiles
- Backs up existing user.js files
- Writes hardened telemetry-disabling settings
- Removes telemetry-related artifacts (sqlite, crash reports, etc.)
EOF
exit 0
}
backup_user_js() {
PROFILE="$1"
USER_JS="$PROFILE/user.js"
if [ -f "$USER_JS" ]; then
BACKUP="$USER_JS.bak.$(date +%Y%m%d_%H%M%S)"
cp "$USER_JS" "$BACKUP" || error "Failed to back up $USER_JS"
log "Backed up existing user.js to $BACKUP"
fi
}
write_user_js() {
PROFILE="$1"
USER_JS="$PROFILE/user.js"
if [ ! -d "$PROFILE" ]; then
warn "Profile directory not found: $PROFILE"
return
fi
backup_user_js "$PROFILE"
cat > "$USER_JS" <<EOF
// Hardened privacy: disable telemetry in Gecko-based browsers
user_pref("toolkit.telemetry.enabled", false);
user_pref("toolkit.telemetry.unified", false);
user_pref("toolkit.telemetry.archive.enabled", false);
user_pref("toolkit.telemetry.newProfilePing.enabled", false);
user_pref("toolkit.telemetry.shutdownPingSender.enabled", false);
user_pref("toolkit.telemetry.updatePing.enabled", false);
user_pref("toolkit.telemetry.bhrPing.enabled", false);
user_pref("toolkit.telemetry.firstShutdownPing.enabled", false);
user_pref("datareporting.healthreport.uploadEnabled", false);
user_pref("datareporting.policy.dataSubmissionEnabled", false);
user_pref("app.shield.optoutstudies.enabled", false);
user_pref("browser.discovery.enabled", false);
user_pref("browser.ping-centre.telemetry", false);
user_pref("browser.newtabpage.activity-stream.feeds.telemetry", false);
user_pref("browser.newtabpage.activity-stream.telemetry", false);
EOF
log "Telemetry disabled for: $PROFILE"
}
clean_telemetry_artifacts() {
PROFILE="$1"
for ITEM in crashes datareporting healthreport.sqlite telemetry.sqlite telemetry-shutdown-ping.txt; do
TARGET="$PROFILE/$ITEM"
[ -e "$TARGET" ] && rm -rf "$TARGET" && log "Removed: $TARGET"
done
}
process_profiles() {
BROWSER_NAME="$1"
PROFILE_PATH_GLOB="$2"
FOUND=0
for PROFILE in $PROFILE_PATH_GLOB; do
if [ -d "$PROFILE" ]; then
FOUND=1
log "Processing $BROWSER_NAME profile: $PROFILE"
write_user_js "$PROFILE"
clean_telemetry_artifacts "$PROFILE"
fi
done
if [ "$FOUND" -eq 0 ]; then
warn "No $BROWSER_NAME profiles found at: $PROFILE_PATH_GLOB"
fi
}
main() {
[ "${1:-}" = "--help" ] && show_help
log "Starting telemetry disabling for supported Gecko-based browsers..."
process_profiles "Firefox" "$HOME/.mozilla/firefox/*.default*"
process_profiles "Waterfox" "$HOME/.waterfox/profiles/*.default*"
process_profiles "LibreWolf" "$HOME/.librewolf/*.default*"
process_profiles "Mullvad Browser" "$HOME/.mullvad-browser/Browser/MullvadBrowser/Profiles/*.default*"
process_profiles "Tor Browser" "$HOME/.tor-browser/Browser/TorBrowser/Data/Browser/profile.default"
log "Completed. Please restart browsers for changes to apply."
}
main "$@"