{"id":23770,"library":"fuzzfetch","title":"fuzzfetch","description":"A Python library for downloading Firefox, Thunderbird, and jsshell builds from Mozilla's Taskcluster. Currently at version 16.1.0, with frequent releases (multiple per year). Requires Python >=3.10.","status":"active","version":"16.1.0","language":"python","source_language":"en","source_url":"https://github.com/MozillaSecurity/fuzzfetch","tags":["firefox","mozilla","taskcluster","build-downloader","fuzzing"],"install":[{"cmd":"pip install fuzzfetch","lang":"bash","label":"Install from PyPI"},{"cmd":"pip install fuzzfetch[all]","lang":"bash","label":"Install with all extras (e.g., for tests)"}],"dependencies":[{"reason":"HTTP requests to Taskcluster API","package":"requests","optional":false},{"reason":"Sentry error tracking (optional, for automation)","package":"sentry-sdk","optional":true}],"imports":[{"note":"FuzzFetch is a class, not a module.","wrong":"import FuzzFetch","symbol":"FuzzFetch","correct":"from fuzzfetch import FuzzFetch"},{"note":"Common enum for build parameters.","symbol":"BuildFlags","correct":"from fuzzfetch import BuildFlags"},{"note":"Class representing a downloaded build.","symbol":"BrowserBuild","correct":"from fuzzfetch import BrowserBuild"}],"quickstart":{"code":"from fuzzfetch import FuzzFetch, BuildFlags\n\nff = FuzzFetch()\n# Fetch the latest Firefox nightly for Linux64\nbuild = ff.fetch(\n    build=BuildFlags.FIREFOX,\n    platform='linux64',\n    branch='mozilla-central'\n)\nprint(build.binary_path)\n# Or fetch with specific date:\nbuild = ff.fetch(\n    build=BuildFlags.FIREFOX,\n    platform='linux64',\n    branch='mozilla-central',\n    date='2025-01-15'\n)\nprint(build.binary_path)","lang":"python","description":"Basic usage: create FuzzFetch instance, call fetch() with build flags and platform."},"warnings":[{"fix":"Review any code that catches exceptions for ambiguous builds; now the newest build is always returned.","message":"Version 14.0.0 changed behavior to return the newest build matching requested parameters, instead of raising an error if multiple builds found. Code that relied on the old error handling may silently get a different build.","severity":"breaking","affected_versions":">=14.0.0"},{"fix":"Upgrade Python to 3.10 or later. Pin fuzzfetch<16 if necessary.","message":"Version 16.0.0 dropped support for Python 3.9. Users on Python 3.9 must upgrade to 3.10+.","severity":"breaking","affected_versions":">=16.0.0"},{"fix":"Use from_date and to_date for date ranges, or catch FuzzFetchException if exact date fails.","message":"When using the 'date' parameter, be aware that only builds indexed from that exact date are returned; if no build exists, an exception is raised. Use 'from_date' and 'to_date' for ranges.","severity":"gotcha","affected_versions":"All"},{"fix":"Configure network/proxy settings or use FuzzFetch(max_retries=3, timeout=60).","message":"fuzzfetch depends on network access to Mozilla's Taskcluster. Running without a network or behind a strict proxy may cause timeouts or failures. Consider using retry logic (built-in since v11.1.0) or custom timeout.","severity":"gotcha","affected_versions":"All"}],"env_vars":null,"last_verified":"2026-05-01T00:00:00.000Z","next_check":"2026-07-30T00:00:00.000Z","problems":[{"fix":"Use: from fuzzfetch import FuzzFetch","cause":"Using 'import fuzzfetch' instead of 'from fuzzfetch import FuzzFetch'","error":"AttributeError: module 'fuzzfetch' has no attribute 'FuzzFetch'"},{"fix":"Run: pip install fuzzfetch --upgrade","cause":"Missing install or virtual environment not activated","error":"pkg_resources.DistributionNotFound: The 'fuzzfetch' distribution was not found"},{"fix":"Check internet connectivity and proxy settings. Try increasing timeout or retries.","cause":"No network access or Taskcluster endpoint unreachable","error":"requests.exceptions.ConnectionError"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}