Skip to main content

foxglove

Foxglove is a Firefox wrapper with two purposes:

  1. Programmatically generate Firefox profiles with preferences that disable, where possible, Firefox's built-in advertising, pop-ups, telemetry, experiments, and similar features. Generated profiles are stored in ~/.foxglove/profiles.

  2. Optionally ssh to a remote host and configure the Firefox profile to use that connection as a SOCKS proxy.

Installation

Requires Python 3.10+.

pip install foxglove

Usage

usage: foxglove [-h] [--chrome path] [--content path] [-d] [-e] [-a add-on]
                profile [host]

foxglove - a Firefox profile and proxy manager

positional arguments:
  profile         the name of the foxglove-managed profile to use or create
  host            SSH server hostname; foxglove will connect via ssh(1) and
                  configure Firefox to use it as a SOCKS proxy

options:
  -h, --help      show this help message and exit
  --chrome path   path to a userChrome.css file to add to the profile
  --content path  path to a userContent.css file to add to the profile
  -d              dry run (don't launch Firefox)
  -e              ephemeral (delete profile on exit)
  -a add-on       download and install an add-on from addons.mozilla.org;
                  repeatable

Add-ons (-a) — The value for -a is the URL slug after /firefox/addon/ on the Mozilla Add-ons page; for example, https://addons.mozilla.org/firefox/addon/ublock-origin/ → -a ublock-origin. You can pass -a multiple times to install several extensions.

To use the "host" argument, configure a corresponding Host entry in your ~/.ssh/config such that you can ssh to it with no additional arguments. The remote host must allow port forwarding.

Foxglove launches Firefox via a subprocess call to "firefox". On macOS, the Firefox binary is not typically in PATH, so foxglove first appends /Applications/Firefox.app/Contents/MacOS to PATH. Prepending another directory to PATH may be used to select a particular Firefox installation. For example, you might launch Firefox Nightly on macOS like this:

PATH="/Applications/Firefox Nightly.app/Contents/MacOS:$PATH" foxglove example

Development

Requires uv.

uv sync

# Lint
uv run ruff check .

# Format
uv run ruff format .

# Test
uv run pytest

Preferences

Foxglove preferences target Firefox 135+ and are cross-referenced with arkenfox user.js. See prefs.js for the full list.

Preference changes made to a foxglove-managed profile will reset to foxglove's default values on the next run. To retain changes, you can either use the generated profile as a normal Firefox profile without foxglove, or modify your installation of foxglove's prefs.js file with your desired preferences.

Some foxglove defaults to consider changing:

Key Default Foxglove Comments
dom.event.clipboardevents.enabled true false May break copy/paste on some sites
media.peerconnection.enabled true false Breaks video calls
network.trr.mode 0 0 Set to 2 or 3 to enable DNS-over-HTTPS

Related projects

Metadata

Release files for foxglove 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for foxglove 0.2.1
File Size Uploaded
foxglove-0.2.1.tar.gz 12.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for foxglove 0.2.1
File Interpreter ABI Platform
foxglove-0.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 22.0 kB

Release files / foxglove-0.2.1.tar.gz

Download URL foxglove-0.2.1.tar.gz
Size 12.7 kB
Tags Source
SHA-256 checksum
How to use checksums
3f3d7d8289d7b983949adfd3f06c66b21435ef6cdc64e71ae590d47a56fb8826
BLAKE2b-256 checksum
How to use checksums
6cc812227466a75e79dab5121c669ec680647ea96978dedb45f9cf8074c89b01
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 5, 2026.

Transparency log

Release files / foxglove-0.2.1-py3-none-any.whl

Download URL foxglove-0.2.1-py3-none-any.whl
Size 9.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b5019fccf6f52a66023eee5c4834c98776d628b82339ae7bf3883e2952b91724
BLAKE2b-256 checksum
How to use checksums
90b0abfac74a549ddff575b5b420f16f0c2dc1bc67be73e95598698009ca9623
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 5, 2026.

Transparency log
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page