ii2d/my-ip-info

Multi-source IP intelligence and network connectivity diagnostic suite

1

stars

39

commits

TypeScript

primary language

Sep 14, 2026

updated

ip.ii2d.com

README

🌐 my-ip-info

A high-performance IP intelligence and network connectivity diagnostic suite built as a unified Cloudflare Worker with Static Assets.

🚀 Website: https://ip.ii2d.com

CI License: MIT Cloudflare Workers Hono React 19 TypeScript PWA Ready Biome

Most IP lookup tools query a single remote server. my-ip-info cross-validates IP data across your self-hosted Cloudflare edge backend, public APIs (Cloudflare Trace, ipify, ipwho.is, IP.SB, ip.guide, SeeIP, icanhazip.com, IPIP.net), and browser WebRTC STUN candidates to detect VPN/proxy leaks, diagnose coordinate variations across geolocation databases, and measure real-time latency.


✨ Features

  • Unified Cloudflare Worker: Front-end (React SPA) and Edge API (Hono) deploy together under a single origin. Static assets are served via Cloudflare's edge cache (free & unlimited quota), while API requests run on the edge.
  • Zero-Latency Edge Intelligence: Automatically extracts city, region, coordinates, ASN (AS6327), ISP organization, and airport datacenter code (colo) directly from the edge TLS connection without external database lookups.
  • 🗺️ Geolocation Convergence Map: Interactive dark Leaflet map plotting coordinates reported by each provider to visualize database discrepancies.
  • 🛡️ Dual-Stack WebRTC & DNS Leak Inspector: Interrogates STUN ICE candidates (IPv4/IPv6) and resolves one-time nonce subdomains to uncover upstream DNS resolvers and detect VPN/proxy leaks.
  • 📜 Local IP Connection History: 100% on-device timeline tracking with automatic deduplication, manual snapshots, and safe CSV / JSON data export.
  • ⚙️ Custom Endpoints & Provider Toggles: Enable or disable specific public providers, or register user-defined private backend endpoints in in-app settings.
  • ⏱️ Latency & Network Benchmark: Measures round-trip time (RTT) to global Anycast edge nodes.
  • 📱 Progressive Web App (PWA): Installable directly from the browser on desktop and mobile with standalone window support, offline UI shell caching, and automatic refetching on network reconnect.

📱 Progressive Web App (PWA)

my-ip-info can be installed directly as a standalone desktop or mobile application without needing third-party app stores.

Why Use the PWA?

  • Zero App Store Friction: Install immediately without having to search, download, or authenticate through the Apple App Store or Google Play Store.
  • Cross-Platform Consistency: Provides a unified, native app experience across macOS, Windows, Linux, iOS, and Android from a single shared web standard.
  • Fast App Launch & Offline Shell: Static app shell assets (HTML, CSS, JS, fonts, and icons) are pre-cached locally using Workbox Service Workers, delivering near-instant loading even on slow or intermittent network connections.
  • Always-Fresh Network Diagnostics: Specifically architected with strict cache-busting and API bypass rules (navigateFallbackDenylist) so dynamic IP and geo lookups are never served from stale caches. Real-time window focus and network reconnect listeners automatically re-probe your IP when toggling VPNs or switching Wi-Fi networks.

How to Install & Use

  • Desktop (Chrome / Edge / Brave / Opera): Click the Install icon in the browser address bar (or navigate to menu ...Install my-ip-info). The application will launch in its own dedicated, borderless desktop window and can be pinned to your Dock or Taskbar.
  • Desktop (Safari on macOS Sonoma+): Go to FileAdd to Dock.
  • Mobile (iOS Safari): Tap the Share button (box with an upward arrow) → scroll down and tap Add to Home Screen.
  • Mobile (Android Chrome): Tap the menu → select Add to Home screen or Install app.

📁 Project Structure

my-ip-info/
├── src/
│   ├── client/       # React SPA (components, hooks, styling)
│   ├── server/       # Cloudflare Worker entrypoint & Hono API (/api/v1/*, CLI detection)
│   └── shared/       # Shared TypeScript types and IP utilities
├── public/           # Static assets, favicon, redirects
├── test/             # Unit tests (node:test)
├── index.html        # SPA entry HTML
├── vite.config.ts    # Client build configuration
├── wrangler.toml     # Unified Cloudflare Worker configuration with [assets]
└── Dockerfile        # Standalone Node/Docker server image

🚀 Quick Start

1. Install Dependencies

pnpm install

2. Run Locally

# Boot frontend (http://localhost:5173) and Cloudflare Worker (http://localhost:8787) concurrently
pnpm dev

# Or run services individually:
pnpm dev:client  # Vite SPA with HMR (proxies /api to :8787)
pnpm dev:worker  # Cloudflare Worker via Wrangler / workerd
pnpm dev:node    # Standalone Node.js server (:3000)

3. Testing & Code Quality

pnpm test           # Run 34 unit tests across core, worker pipeline, and providers
pnpm test:coverage  # Run tests with V8 code coverage report
pnpm typecheck      # Validate TypeScript types without emit
pnpm lint           # Check code against Biome rules
pnpm format:check   # Verify code formatting

☁️ Deployment

Deploying requires zero environment variables:

# Build frontend and deploy unified worker
pnpm deploy

Wrangler will authenticate via your browser or respect your standard CLOUDFLARE_API_TOKEN environment variable.

Custom Domain (Optional)

To bind a custom domain in your Cloudflare zone, uncomment the route in wrangler.toml:

routes = [
  { pattern = "ip.yourdomain.com", custom_domain = true }
]

Cloudflare Workers will automatically configure the DNS record and provision SSL certificates with zero external tools needed.


🗑️ Teardown

To delete the deployed worker and its assets:

pnpm undeploy # or: npx wrangler delete

📡 API Reference

All backend API routes are versioned under /api/v1:

RouteMethodContent-TypeDescription
/GETtext/html or text/plainServes React SPA to browsers; returns raw client IP to CLI tools (curl, wget)
/ipGETtext/plain; charset=utf-8Shorthand endpoint returning raw public IP with defensive security headers
/api/v1/infoGETtext/plain or application/json or text/yamlSmart content negotiation: returns plaintext for CLI or JSON for browsers. Supports explicit query override: ?format=json, ?format=yaml, ?format=text, ?format=ip
/api/v1/ipGETtext/plain; charset=utf-8Returns raw public client IP address with a trailing newline
/api/v1/geoGETapplication/jsonGeolocation data (city, region, country, lat/lon, ASN, datacenter colo)
/api/v1/yamlGETtext/yaml; charset=utf-8Client metadata and network details formatted as safe YAML
/api/v1/healthGETapplication/jsonHealth check endpoint returning status and provider identifier

📄 License

MIT License. Contributions and PRs welcome!

Contributors

donileong

39 commits

ii2d/my-ip-info

Multi-source IP intelligence and network connectivity diagnostic suite

1

stars

39

commits

TypeScript

primary language

Sep 14, 2026

updated

ip.ii2d.com

README

🌐 my-ip-info

A high-performance IP intelligence and network connectivity diagnostic suite built as a unified Cloudflare Worker with Static Assets.

🚀 Website: https://ip.ii2d.com

CI License: MIT Cloudflare Workers Hono React 19 TypeScript PWA Ready Biome

Most IP lookup tools query a single remote server. my-ip-info cross-validates IP data across your self-hosted Cloudflare edge backend, public APIs (Cloudflare Trace, ipify, ipwho.is, IP.SB, ip.guide, SeeIP, icanhazip.com, IPIP.net), and browser WebRTC STUN candidates to detect VPN/proxy leaks, diagnose coordinate variations across geolocation databases, and measure real-time latency.


✨ Features

  • Unified Cloudflare Worker: Front-end (React SPA) and Edge API (Hono) deploy together under a single origin. Static assets are served via Cloudflare's edge cache (free & unlimited quota), while API requests run on the edge.
  • Zero-Latency Edge Intelligence: Automatically extracts city, region, coordinates, ASN (AS6327), ISP organization, and airport datacenter code (colo) directly from the edge TLS connection without external database lookups.
  • 🗺️ Geolocation Convergence Map: Interactive dark Leaflet map plotting coordinates reported by each provider to visualize database discrepancies.
  • 🛡️ Dual-Stack WebRTC & DNS Leak Inspector: Interrogates STUN ICE candidates (IPv4/IPv6) and resolves one-time nonce subdomains to uncover upstream DNS resolvers and detect VPN/proxy leaks.
  • 📜 Local IP Connection History: 100% on-device timeline tracking with automatic deduplication, manual snapshots, and safe CSV / JSON data export.
  • ⚙️ Custom Endpoints & Provider Toggles: Enable or disable specific public providers, or register user-defined private backend endpoints in in-app settings.
  • ⏱️ Latency & Network Benchmark: Measures round-trip time (RTT) to global Anycast edge nodes.
  • 📱 Progressive Web App (PWA): Installable directly from the browser on desktop and mobile with standalone window support, offline UI shell caching, and automatic refetching on network reconnect.

📱 Progressive Web App (PWA)

my-ip-info can be installed directly as a standalone desktop or mobile application without needing third-party app stores.

Why Use the PWA?

  • Zero App Store Friction: Install immediately without having to search, download, or authenticate through the Apple App Store or Google Play Store.
  • Cross-Platform Consistency: Provides a unified, native app experience across macOS, Windows, Linux, iOS, and Android from a single shared web standard.
  • Fast App Launch & Offline Shell: Static app shell assets (HTML, CSS, JS, fonts, and icons) are pre-cached locally using Workbox Service Workers, delivering near-instant loading even on slow or intermittent network connections.
  • Always-Fresh Network Diagnostics: Specifically architected with strict cache-busting and API bypass rules (navigateFallbackDenylist) so dynamic IP and geo lookups are never served from stale caches. Real-time window focus and network reconnect listeners automatically re-probe your IP when toggling VPNs or switching Wi-Fi networks.

How to Install & Use

  • Desktop (Chrome / Edge / Brave / Opera): Click the Install icon in the browser address bar (or navigate to menu ...Install my-ip-info). The application will launch in its own dedicated, borderless desktop window and can be pinned to your Dock or Taskbar.
  • Desktop (Safari on macOS Sonoma+): Go to FileAdd to Dock.
  • Mobile (iOS Safari): Tap the Share button (box with an upward arrow) → scroll down and tap Add to Home Screen.
  • Mobile (Android Chrome): Tap the menu → select Add to Home screen or Install app.

📁 Project Structure

my-ip-info/
├── src/
│   ├── client/       # React SPA (components, hooks, styling)
│   ├── server/       # Cloudflare Worker entrypoint & Hono API (/api/v1/*, CLI detection)
│   └── shared/       # Shared TypeScript types and IP utilities
├── public/           # Static assets, favicon, redirects
├── test/             # Unit tests (node:test)
├── index.html        # SPA entry HTML
├── vite.config.ts    # Client build configuration
├── wrangler.toml     # Unified Cloudflare Worker configuration with [assets]
└── Dockerfile        # Standalone Node/Docker server image

🚀 Quick Start

1. Install Dependencies

pnpm install

2. Run Locally

# Boot frontend (http://localhost:5173) and Cloudflare Worker (http://localhost:8787) concurrently
pnpm dev

# Or run services individually:
pnpm dev:client  # Vite SPA with HMR (proxies /api to :8787)
pnpm dev:worker  # Cloudflare Worker via Wrangler / workerd
pnpm dev:node    # Standalone Node.js server (:3000)

3. Testing & Code Quality

pnpm test           # Run 34 unit tests across core, worker pipeline, and providers
pnpm test:coverage  # Run tests with V8 code coverage report
pnpm typecheck      # Validate TypeScript types without emit
pnpm lint           # Check code against Biome rules
pnpm format:check   # Verify code formatting

☁️ Deployment

Deploying requires zero environment variables:

# Build frontend and deploy unified worker
pnpm deploy

Wrangler will authenticate via your browser or respect your standard CLOUDFLARE_API_TOKEN environment variable.

Custom Domain (Optional)

To bind a custom domain in your Cloudflare zone, uncomment the route in wrangler.toml:

routes = [
  { pattern = "ip.yourdomain.com", custom_domain = true }
]

Cloudflare Workers will automatically configure the DNS record and provision SSL certificates with zero external tools needed.


🗑️ Teardown

To delete the deployed worker and its assets:

pnpm undeploy # or: npx wrangler delete

📡 API Reference

All backend API routes are versioned under /api/v1:

RouteMethodContent-TypeDescription
/GETtext/html or text/plainServes React SPA to browsers; returns raw client IP to CLI tools (curl, wget)
/ipGETtext/plain; charset=utf-8Shorthand endpoint returning raw public IP with defensive security headers
/api/v1/infoGETtext/plain or application/json or text/yamlSmart content negotiation: returns plaintext for CLI or JSON for browsers. Supports explicit query override: ?format=json, ?format=yaml, ?format=text, ?format=ip
/api/v1/ipGETtext/plain; charset=utf-8Returns raw public client IP address with a trailing newline
/api/v1/geoGETapplication/jsonGeolocation data (city, region, country, lat/lon, ASN, datacenter colo)
/api/v1/yamlGETtext/yaml; charset=utf-8Client metadata and network details formatted as safe YAML
/api/v1/healthGETapplication/jsonHealth check endpoint returning status and provider identifier

📄 License

MIT License. Contributions and PRs welcome!

Contributors

donileong

39 commits

Languages

TypeScript

92.7%

CSS

6.5%