foxglove
Foxglove is a Firefox wrapper with two purposes:
-
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. -
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)
| File | Size | Uploaded | |
|---|---|---|---|
| foxglove-0.2.1.tar.gz | 12.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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 logRelease 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