Skip to content

Latest commit

 

History

25 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🌐 GeoSpot - Modern IP & Leak Tester

Platform Platform License

A sleek, modern, and transparent privacy dashboard for your browser. GeoSpot provides an instant, live analysis of your IP address, geolocation, DNS leaks, and WebRTC leaks for both Chrome and Firefox.

GeoSpot Popup Screenshot
(Chrome screenshot)

GeoSpot Popup Screenshot
(Firefox screenshot)


✨ Key Features

  • Cross-Browser Support: Fully functional on both Google Chrome and Mozilla Firefox, from a single shared codebase.
  • Live IP & Geolocation: Instantly view your current public IP address, city, and country — with the last result cached briefly so re-opening the popup is instant instead of re-querying every time.
  • Live DNS Leak Test: Automatically checks if your DNS queries are leaking and reveals the ISP of the leaking server.
  • Transparent WebRTC Leak Test: Performs a live test to see if your browser is leaking your real IP via WebRTC, matching both IPv4 and IPv6 candidates. A same-family mismatch (e.g. your real IPv4 leaking despite a VPN) is reported as Leaking; a public IPv6 address exposed alongside an IPv4 VPN connection — which isn't necessarily a leak on a dual-stack connection — is reported separately as IPv6 Exposed rather than a false alarm.
  • One-click leak fix (Chrome): When a WebRTC leak is found, a "Fix this leak" button appears that sets Chrome's webRTCIPHandlingPolicy to disable_non_proxied_udp, closing the leak for new connections. (No equivalent extension API exists in Firefox, so the button only appears where it can actually do something.) The privacy permission is requested on demand, not at install.
  • Manual refresh: A refresh button forces an immediate re-check, bypassing the cache.
  • Dynamic Country Icon: The extension icon is a dynamic, code-generated badge showing the two-letter country code of your current IP. It updates automatically via the alarms API.
  • Localized UI: English and Persian (فارسی) out of the box, via standard WebExtension _locales.
  • Modern & Minimalist UI: A clean, visually appealing interface with a custom background and a locked-down, app-like feel.
  • Zero Configuration: Works out of the box with no settings to configure.

🚀 Installation

You can load this extension in developer mode in your browser of choice.

For Google Chrome

  1. Download: Download or clone the repository and find the chrome folder.
  2. Open Chrome Extensions: Open Google Chrome and navigate to chrome://extensions.
  3. Enable Developer Mode: In the top right corner, toggle on "Developer mode".
  4. Load Unpacked: Click the "Load unpacked" button.
  5. Select Folder: Select the chrome folder.

For Mozilla Firefox

  1. Download: Download or clone the repository and find the firefox folder.
  2. Open Firefox Debugging: Open Firefox and navigate to about:debugging.
  3. Select "This Firefox": Click on the "This Firefox" tab on the left.
  4. Load Temporary Add-on: Click the "Load Temporary Add-on..." button.
  5. Select File: Navigate into the firefox folder and select the manifest.json file.

🛠️ How It Works

GeoSpot is built on the standard WebExtensions API, ensuring core functionality works seamlessly on both Chrome and Firefox with minimal manifest adjustments.

  • IP & Geolocation: Fetches data from FreeIPAPI (free.freeipapi.com) — HTTPS, no API key, no registration, 60 requests/minute on the free tier. The result is cached in storage.local for ~55 seconds so the popup and the periodic background refresh don't double up on requests; a 429 response is surfaced to the user as "Rate Limited" rather than a generic failure.
  • DNS Leak Test: Uses the ipleak.net JSON API to get a list of DNS servers.
  • WebRTC Leak Test: Implemented using the RTCPeerConnection API, waiting for ICE gathering to complete (not a fixed timer) and matching both IPv4 and IPv6 candidate addresses against the reported public IP, family-by-family (see Key Features above).
  • Leak remediation: On Chrome, chrome.privacy.network.webRTCIPHandlingPolicy can be set at the user's request to stop the leak at the source, via an on-demand optional_permissions request rather than an install-time prompt.
  • Dynamic Icon: The icon is generated on-the-fly using the OffscreenCanvas API, refreshed periodically via the alarms API (not setInterval, which is not reliable in a Manifest V3 service worker that can be suspended).
  • Localization: UI strings are pulled from _locales/<lang>/messages.json via i18n.getMessage, following the browser's own language setting.

📁 File Structure

The Chrome and Firefox builds only genuinely differ in manifest.json (background script registration, CSP, browser_specific_settings). Everything else — popup.js, background.js, popup.html, and shared images — lives once under shared/ and is written against the promise-based browser.* namespace (Chrome is aliased to it automatically, see the shim at the top of popup.js/background.js).

GeoSpot-Project/
│
├── LICENSE
├── README.md
├── build.js            # syncs shared/ into chrome/ and firefox/
├── .github/workflows/
│   └── verify-build-sync.yml   # CI: fails if chrome/firefox drift from shared/
├── shared/
│   ├── background.js
│   ├── popup.html
│   ├── popup.js
│   ├── _locales/
│   │   ├── en/messages.json
│   │   └── fa/messages.json
│   └── images/
│       ├── background.jpg
│       └── icon16.png / icon48.png / icon128.png
├── chrome/
│   ├── manifest.json    # hand-maintained, Chrome-specific
│   ├── background.js    # generated — do not edit directly
│   ├── popup.html        # generated
│   ├── popup.js           # generated
│   ├── _locales/           # generated
│   └── images/              # generated + browser-specific screenshot
│
└── firefox/
    ├── manifest.json    # hand-maintained, Firefox-specific
    ├── background.js    # generated — do not edit directly
    ├── popup.html         # generated
    ├── popup.js            # generated
    ├── _locales/            # generated
    └── images/               # generated + browser-specific screenshot

Development

Edit files under shared/ (or add a new _locales/<lang>/messages.json), then run:

node build.js

to sync the change into both chrome/ and firefox/. Never edit popup.js, background.js, popup.html, or _locales/ directly inside chrome/ or firefox/ — those copies are overwritten on the next build. A GitHub Actions check (.github/workflows/verify-build-sync.yml) runs build.js on every push/PR and fails if it produces a diff, so drift between the two builds can't be merged silently again.


📄 License

This project is licensed under the MIT License.


Created with ❤️ by GeekNeuron

About

A modern browser extension for Chrome & Firefox that provides live analysis of your IP address, geolocation, DNS leaks, and WebRTC leaks.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages