{"id":47165037,"url":"https://github.com/anthonysgro/geospoof","last_synced_at":"2026-05-27T07:00:38.366Z","repository":{"id":341499175,"uuid":"1170325630","full_name":"anthonysgro/geospoof","owner":"anthonysgro","description":"Browser extension to spoof your geolocation, timezone, and prevent WebRTC IP leaks.","archived":false,"fork":false,"pushed_at":"2026-05-26T04:51:29.000Z","size":56418,"stargazers_count":29,"open_issues_count":7,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-05-26T06:33:15.524Z","etag":null,"topics":["browser","firefox","gecko","geolocation","privacy","security","spoof","spoofing","spoofing-detection","timezone","vpn"],"latest_commit_sha":null,"homepage":"https://www.geospoof.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/anthonysgro.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-02T02:00:24.000Z","updated_at":"2026-05-26T04:37:35.000Z","dependencies_parsed_at":null,"dependency_job_id":"cf6ae90c-121b-4ba7-89fb-93af620d88c2","html_url":"https://github.com/anthonysgro/geospoof","commit_stats":null,"previous_names":["anthonysgro/geospoof"],"tags_count":37,"template":false,"template_full_name":null,"purl":"pkg:github/anthonysgro/geospoof","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anthonysgro%2Fgeospoof","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anthonysgro%2Fgeospoof/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anthonysgro%2Fgeospoof/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anthonysgro%2Fgeospoof/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/anthonysgro","download_url":"https://codeload.github.com/anthonysgro/geospoof/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anthonysgro%2Fgeospoof/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33554780,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-27T02:00:06.184Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["browser","firefox","gecko","geolocation","privacy","security","spoof","spoofing","spoofing-detection","timezone","vpn"],"created_at":"2026-03-13T04:05:57.968Z","updated_at":"2026-05-27T07:00:38.354Z","avatar_url":"https://github.com/anthonysgro.png","language":"TypeScript","funding_links":["https://buymeacoffee.com/sgro"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"assets/icon.png\" alt=\"GeoSpoof\" width=\"100\" height=\"100\"\u003e\n\n# GeoSpoof\n\n**Your VPN changes your IP address. Your browser is still telling websites where you actually are.**\n\n[![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)\n[![Website](https://img.shields.io/badge/Website-geospoof.com-4caf50.svg?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABTElEQVQ4T41TS1LDMAyV3AXZsGPJJbgGC5qkoXG5Vi/AsAAS8uMi3AdmYiE5dRK7LoMzGSey9J70JCNcWLpNaSQDG1RA/FS7T4y5nhnL5oGQgxARiMjusuR7NAQfjz6QB6DbLQHgEnQ6Rba6NRqAuujnOA/g0GXWldiqFMDrdnI89IXwgwO6SW6T4/3xW85mAN1n5Bze8oVhXbcjEG3qkyYLAIvm2Kt8iAomAKKFZOh8Zsc918/SgWHFHXqouu6YhGmiAOWQk2KV1+mFAHMJ3Jk66yy53wXWwabIb5iFblJCNWW4LtED2FshufeSJu9VMfV87g7bzEZBnU7sZxmIwWkRDpKchexRADGWLJYI6ibRgcXaG22XbnZ3qMyXAxDVE7r+ec5frkJhowDi9DTwVHKkvQN8N+qs/d9l8iaPWysA71l8Mi9qEKb51/8vRNquEc5KgXwAAAAQZGVCRzg1RUVEM0EzRkYzNEI0MzTcy3bJAAAAAElFTkSuQmCC)](https://geospoof.com)\n[![Firefox](https://img.shields.io/badge/Firefox-140%2B-FF7139.svg?logo=firefox-browser)](https://addons.mozilla.org/firefox/addon/geo-spoof/)\n[![Chrome](https://img.shields.io/badge/Chrome-available-4285F4.svg?logo=googlechrome)](https://chromewebstore.google.com/detail/geospoof/dgdbdodafgaeifgajaajohkjjgobcgje)\n[![Safari](https://img.shields.io/badge/Safari-available-006CFF.svg?logo=safari)](https://apps.apple.com/app/geospoof/id6765719745)\n[![Version](https://img.shields.io/github/package-json/v/anthonysgro/geospoof?color=green)](https://github.com/anthonysgro/geospoof/releases)\n\n  \u003cp\u003e\n    \u003cimg src=\"assets/chrome-store/screenshot1.png\" alt=\"GeoSpoof main view\" width=\"960\" /\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n## Getting started\n\n### Install\n\n|                                                                                     Browser                                                                                     | Store                                                                                                  | Works on                                                                                                             |\n| :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | ------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------- |\n|               [\u003cimg src=\"assets/github/firefox-store-icon.png\" alt=\"Get GeoSpoof for Firefox\" height=\"55\"\u003e](https://addons.mozilla.org/firefox/addon/geo-spoof/)                | [Firefox Add-ons](https://addons.mozilla.org/firefox/addon/geo-spoof/)                                 | Firefox 140+ on desktop and Android                                                                                  |\n| [\u003cimg src=\"assets/github/chrome-store-icon.png\" alt=\"Get GeoSpoof for Chrome\" height=\"55\"\u003e](https://chromewebstore.google.com/detail/geospoof/dgdbdodafgaeifgajaajohkjjgobcgje) | [Chrome Web Store](https://chromewebstore.google.com/detail/geospoof/dgdbdodafgaeifgajaajohkjjgobcgje) | Chrome, Brave, Edge, Opera, and other Chromium browsers                                                              |\n|              [\u003cimg src=\"assets/github/ios-store-icon.svg\" alt=\"Download GeoSpoof on the App Store\" height=\"55\"\u003e](https://apps.apple.com/app/geospoof/id6765719745)              | [App Store](https://apps.apple.com/app/geospoof/id6765719745)                                          | Safari on iOS, iPadOS, and macOS                                                                                     |\n|           [\u003cimg src=\"assets/github/dmg-install-icon.png\" alt=\"Download GeoSpoof DMG for macOS\" height=\"55\"\u003e](https://github.com/anthonysgro/geospoof/releases/latest)           | [GitHub Releases (macOS DMG)](https://github.com/anthonysgro/geospoof/releases/latest)                 | Safari on macOS — direct download, no Apple ID required — [setup below](#from-github-releases-macos-direct-download) |\n|             [\u003cimg src=\"assets/github/github-store-icon.svg\" alt=\"Get GeoSpoof from GitHub Releases\" height=\"55\"\u003e](https://github.com/anthonysgro/geospoof/releases)             | [GitHub Releases](https://github.com/anthonysgro/geospoof/releases)                                    | Firefox self-hosted signed XPI — [setup below](#from-github-releases-firefox-self-hosted)                            |\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eSafari setup\u003c/strong\u003e — enabling after install\u003c/summary\u003e\n\n\u003cbr\u003e\n\nAfter installing on Safari, tap the puzzle piece icon (or go to Safari Settings → Extensions) and enable GeoSpoof for the sites you want to protect. On iOS/iPadOS, you can also enable it per-site from the **AA** menu in the address bar.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eOther install paths\u003c/strong\u003e — macOS DMG, self-hosted XPI, from source\u003c/summary\u003e\n\n#### From GitHub Releases (macOS direct download)\n\nIf you'd rather not sign in to the App Store, you can install GeoSpoof from a notarized DMG distributed through GitHub Releases. Same code as the App Store build — signed with our Developer ID and notarized by Apple, so Gatekeeper accepts it on first launch.\n\n1. Go to the [Releases](https://github.com/anthonysgro/geospoof/releases) page\n2. Download `geospoof-macos-v\u003cversion\u003e.dmg` from the latest release\n3. Double-click the DMG and drag **GeoSpoof.app** to your **Applications** folder\n4. Launch GeoSpoof once from `/Applications` (the first launch enables the Safari extension)\n5. Open Safari → Settings → Extensions, enable **GeoSpoof**, and grant the website permissions you want\n\n\u003e **First launch:** macOS will ask \"GeoSpoof was downloaded from the internet — are you sure you want to open it?\" the first time. Click **Open** — this only appears once. The wrapper app's window just confirms the extension is active; you'll spend the rest of your time in Safari.\n\n\u003e **Updates:** the direct-download build does not auto-update. To upgrade, re-download the latest DMG and replace `GeoSpoof.app` in `/Applications`. Your settings persist across upgrades. If you'd prefer auto-updates, install from the [App Store](https://apps.apple.com/app/geospoof/id6765719745) instead.\n\n\u003e **Requirements:** macOS 11+ on Apple Silicon or Intel. iOS / iPadOS users still need the [App Store](https://apps.apple.com/app/geospoof/id6765719745) build — Apple does not allow sideloading Safari extensions on those platforms.\n\n#### From GitHub Releases (Firefox self-hosted)\n\nEach release includes a self-hosted signed XPI alongside the AMO submission. The self-hosted XPI uses a 4-segment version (e.g., `1.18.0.42`) to avoid collisions with the AMO listing.\n\n1. Go to the [Releases](https://github.com/anthonysgro/geospoof/releases) page\n2. Download `geospoof-firefox-v\u003cversion\u003e-signed.xpi` from the latest release\n3. In Firefox, open `about:addons`\n4. Click the gear icon (⚙) and select **Install Add-on From File…**\n5. Select the downloaded `.xpi` file\n\nThe signed XPI works on standard Firefox with no extra configuration. Once installed, Firefox automatically checks for and installs new versions via the self-hosted update manifest. If you later install from AMO, Firefox will auto-upgrade to it since AMO releases use a higher base version.\n\n\u003e **Note:** An unsigned `geospoof-firefox-v\u003cversion\u003e-unsigned.xpi` is also included in each release for Firefox forks that don't support AMO signatures. Most users should use the signed version.\n\n#### From source\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for build instructions.\n\n\u003c/details\u003e\n\n### Usage\n\n1. Click the GeoSpoof icon in your toolbar\n2. Search for a city, enter coordinates manually, or use \"Sync with VPN\" to auto-detect your VPN exit region\n3. Enable \"Location Protection\" and \"WebRTC Protection\"\n4. Refresh open tabs to apply\n5. Confirm it's working at [geospoof.com/test](https://geospoof.com/test) — a live dashboard that shows every signal GeoSpoof overrides, running 110 tests against your browser\n\nSee [docs/USER_GUIDE.md](docs/USER_GUIDE.md) for details.\n\n## Why GeoSpoof?\n\nA VPN changes your IP, but your browser still leaks your real location through the Geolocation API, timezone offsets, `Intl.DateTimeFormat`, WebRTC, and more. Sites cross-reference these signals against your IP — when they don't match, you're flagged.\n\nGeoSpoof overrides every one of those channels so your browser reports a consistent, chosen location instead of your real one. Set it to match your VPN, mismatch it on purpose, or pick anywhere in the world.\n\n- **VPN Region Sync** — detects your VPN exit IP and sets your location to match. One click.\n- **Manual control** — search for a city or enter coordinates directly.\n- **Full signal alignment** — geolocation, timezone, Date APIs, Intl, Temporal, and WebRTC all report the same place.\n- **Anti-fingerprinting** — overrides are disguised to pass native code checks used by real-world fingerprinting scripts.\n- **Cross-browser** — Firefox, Chrome, Brave, Edge, and Safari. Single codebase, MV3.\n\n\u003e **Note:** Use of this tool may violate the Terms of Service of certain websites. Use responsibly.\n\n### What This Does NOT Do\n\nGeoSpoof is designed to work alongside a VPN, not replace one.\n\n- Does NOT spoof your IP address (use a VPN for that)\n- Does NOT change browser language or locale\n- Does NOT bypass server-side detection (IP, payment info, account history)\n- Does NOT track your browsing activity, collect telemetry, or store data on external servers. Some features (city search, VPN sync) call third-party APIs to function. See [External Services](#external-services) for exactly what's sent and to whom.\n- Does NOT provide forensic-level anti-fingerprinting. Web Workers run in an isolated thread that extensions cannot inject into, meaning timezone can leak through that channel. Engine-level API tampering is also detectable by dedicated tools. For extreme threat models, use [Tor Browser](https://www.torproject.org/) or [Mullvad Browser](https://mullvad.net/browser) instead. GeoSpoof's goal is to present a plausible, consistent location identity — not to defeat forensic fingerprinting.\n\n## Overridden APIs\n\nWhen protection is enabled, GeoSpoof overrides browser APIs synchronously at `document_start` before any page JavaScript runs. Covered APIs include:\n\n- **Geolocation** — `navigator.geolocation.getCurrentPosition/watchPosition`, `navigator.permissions.query`\n- **Date \u0026 Timezone** — `Date` constructor, `Date.parse`, all `Date.prototype` getters and formatters, `getTimezoneOffset`\n- **Intl** — `Intl.DateTimeFormat` constructor and `resolvedOptions`\n- **Temporal** — `Temporal.Now.*` (feature-detected)\n- **WebRTC** — via browser privacy API, no script injection needed\n- **Anti-fingerprinting** — `Function.prototype.toString` returns `[native code]` for all overrides; iframes patched on insertion\n\nFor the full API reference, see [docs/API.md](docs/API.md).\n\n## External Services\n\n| Service                                                            | When                           | What's sent                                                            | Source                                                                 |\n| ------------------------------------------------------------------ | ------------------------------ | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- |\n| [Nominatim](https://nominatim.org/) (OpenStreetMap)                | City search, reverse geocoding | Search query or coordinates                                            | [GitHub](https://github.com/osm-search/Nominatim)                      |\n| [browser-geo-tz](https://www.npmjs.com/package/browser-geo-tz) CDN | Timezone resolution            | HTTPS range requests for boundary data chunks (coordinates stay local) | [GitHub](https://github.com/kevmo314/browser-geo-tz)                   |\n| [ipify](https://www.ipify.org/)                                    | VPN sync enabled               | HTTPS request to detect your public IP                                 | [GitHub](https://github.com/rdegges/ipify-api)                         |\n| [GeoJS](https://www.geojs.io/)                                     | VPN sync enabled               | Your public IP (to geolocate VPN exit region)                          | [GitHub](https://github.com/jloh/geojs)                                |\n| [FreeIPAPI](https://freeipapi.com/)                                | VPN sync fallback              | Your public IP (fallback geolocation service)                          | Closed source ([Privacy Policy](https://freeipapi.com/privacy-policy)) |\n| [ReallyFreeGeoIP](https://reallyfreegeoip.org/)                    | VPN sync fallback              | Your public IP (fallback geolocation service)                          | [GitHub](https://github.com/reallyfreegeoip/reallyfreegeoip)           |\n| [ipinfo.io](https://ipinfo.io/)                                    | VPN sync fallback              | Your public IP (fallback geolocation service)                          | Closed source ([Privacy Policy](https://ipinfo.io/privacy-policy))     |\n\n\u003e **VPN Sync privacy note:** When you enable \"Sync with VPN,\" your public IP is sent to `api.ipify.org` and up to four geolocation services (`get.geojs.io`, `free.freeipapi.com`, `reallyfreegeoip.org`, `ipinfo.io`) in parallel over HTTPS to determine your VPN exit region. Your IP is never saved to disk — it's held only in memory and cleared when you disable VPN sync. See [PRIVACY_POLICY.md](PRIVACY_POLICY.md) for full details.\n\nNo data is sent to the extension developer. See [PRIVACY_POLICY.md](PRIVACY_POLICY.md).\n\n## Development\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for setup, scripts, testing, and the release pipeline.\n\n## Legal\n\nUsing location spoofing may violate terms of service of streaming, financial, or e-commerce platforms. You are responsible for compliance. See [PRIVACY_POLICY.md](PRIVACY_POLICY.md) for full details.\n\n## License\n\nMIT — see [LICENSE](LICENSE).\n\n## Links\n\n- [Website — geospoof.com](https://geospoof.com)\n- [Verify your protection — geospoof.com/test](https://geospoof.com/test)\n- [User Guide](docs/USER_GUIDE.md)\n- [API Documentation](docs/API.md)\n- [How Browsers Track Location](docs/BACKGROUND.md)\n- [Privacy Policy](PRIVACY_POLICY.md)\n- [Contributing](CONTRIBUTING.md)\n- [Report Issues](https://github.com/anthonysgro/geospoof/issues)\n- [Buy me a coffee](https://buymeacoffee.com/sgro)\n\n## Acknowledgments\n\n- [Nominatim](https://nominatim.org/) for geocoding\n- [browser-geo-tz](https://github.com/kevmo314/browser-geo-tz) for timezone boundary-data lookup\n- [BrowserLeaks](https://browserleaks.com/) for testing tools\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanthonysgro%2Fgeospoof","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fanthonysgro%2Fgeospoof","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanthonysgro%2Fgeospoof/lists"}