Visual traceroute desktop application built with Tauri v2 and React. VisTracer executes traceroute locally, enriches hops with GeoIP, ASN, and external registry metadata, and animates hop-to-hop routes on a 3D globe alongside an interactive hop timeline.
Pre-built binaries are available on the Releases page:
| Platform | Format |
|---|---|
| macOS | .dmg |
| Windows | .exe (NSIS installer) |
| Linux | .AppImage, .deb |
VisTracer is built as a native desktop application (Tauri v2 + Rust) rather than a web app because traceroute requires native system access. Web browsers cannot execute system commands like traceroute or tracert for security reasons. As a Tauri app, VisTracer can:
- Spawn native traceroute/tracert processes directly on your local machine
- Access system binaries with proper permissions (ICMP requires elevated privileges)
- Read and parse real-time output from the traceroute process
- Provide a true "from your network" perspective for diagnosing connectivity issues
This architecture ensures you get authentic network diagnostics from your actual location and ISP, rather than relying on remote servers or limited browser APIs.
- Cross-platform Tauri v2 shell with Rust backend and type-safe IPC to the React frontend.
- Native traceroute execution (ICMP/UDP/TCP) via system binaries with cancellation support.
- Streaming progress updates: hop data appears in the UI as traceroute output is parsed.
- GeoIP/ASN enrichment via local MaxMind GeoLite2 databases with persistent caching.
- Optional secondary enrichment through Team Cymru, RDAP, RIPE Stat, and PeeringDB to fill gaps and validate MaxMind output.
- 3D globe (Three.js) visualising hop arcs, coloured by latency bands, plus per-hop markers.
- Detailed hop table with RTT stats, packet loss, location and ASN metadata (including PeeringDB facility context when available).
- Snapshot and animation exports saved directly to your downloads folder (PNG/JPG/WebP for stills, WebM/GIF for animated routes).
- Node.js 22+ (LTS recommended)
- npm 9+
- Access to the system
traceroute(macOS/Linux) ortracert(Windows) binary. - GeoLite2 databases (optional, but recommended - see below)
VisTracer can provide rich geographic visualization and network details when MaxMind GeoLite2 databases are available. The application will work without them, but it falls back to public registries, so location and ASN accuracy may drift.
Quick Setup:
- Create a free MaxMind account at https://www.maxmind.com/en/geolite2/signup
- Download
GeoLite2-City.mmdbandGeoLite2-ASN.mmdb - Launch VisTracer, open the settings gear beside the traceroute form, and browse to the downloaded files under GeoIP databases
For detailed setup instructions, including custom paths and troubleshooting, see GEOLITE2_SETUP.md.
If databases are missing, a warning banner will appear in the footer. The same settings modal can be opened directly from the banner or the gear icon—no restart required.
In addition to GeoLite2, VisTracer can cross-check hop metadata using several public registry services:
| Provider | Purpose | Credentials |
|---|---|---|
| Team Cymru | IP ↔ ASN mapping via whois | none |
RDAP (default https://rdap.org/ip) |
Registry owner/country data | optional custom base URL |
| RIPE Stat | Prefix + ASN holder context | identifies as VisTracer |
| PeeringDB | Facility/operator details for known ASNs | optional API key for higher rate limits |
Use the Integrations toggles above the advanced traceroute options to enable or disable each provider. The settings modal exposes credential fields for the services that support them. VisTracer logs every lookup in the application log so it is easy to verify which providers responded for a given hop.
npm installRun the Tauri + Vite development environment:
npm run tauri:devThe command starts the Vite dev server for the frontend and compiles/launches the Rust backend. Frontend changes benefit from hot-reload; Rust changes trigger an automatic recompile.
npm run buildTauri bundles native installers for each platform:
npm run tauri:build # builds frontend + Rust backend and produces platform installerBuild artifacts are placed in src-tauri/target/release/bundle/.
Cross-building tip: Creating Windows installers from macOS/Linux (or vice versa) requires the platform-specific toolchain (
xcode-select --installon macOS,wine/monofor Windows targets,fpmfor Debian packages). For the most reliable output, run the matching command on that operating system or inside a CI runner/VM that provides the necessary dependencies.
npm run lint # ESLint across main + renderer sources
npm run typecheck # TypeScript project references for both processes
npm run test # Vitest + Testing Library (renderer-focused)src/
renderer/ React application (modules, state store, Three.js globe, hooks)
common/ Shared TypeScript contracts (bridge, IPC types, net utils)
src-tauri/
src/ Rust backend (commands, persistence, traceroute, geo, DNS)
assets/ Static assets (globe textures, GeoJSON, logo)
Open the settings modal from the gear icon beside the traceroute form (or the footer banner, if shown) to review the current GeoLite2 status and edit paths. The modal displays the last update time along with success/error badges for each file.
- Configure databases: Browse to new
.mmdbfiles at any time; VisTracer will reload them immediately. - Update databases: Download newer versions from MaxMind and point the modal to the new paths or replace the files in place.
- No restart required: Changes take effect as soon as you save.
For detailed instructions on downloading, installing, and updating databases, see GEOLITE2_SETUP.md.
Note: The application works without databases but provides limited information (no geographic coordinates, city names, or ASN details).
The 3D globe features a real-time day/night terminator that accurately reflects which parts of Earth are currently in darkness based on UTC time. This visualization:
- Updates every second to show the actual position of the sun
- Calculates solar position using declination (seasonal north-south variation ±23.5°) and hour angle (east-west rotation based on time)
- Smoothly blends between the day texture and city lights texture on the dark side
- Accurately represents seasonal variations (solstices and equinoxes) and time of day
The terminator position uses a simplified solar algorithm that provides accuracy within a few degrees—perfect for visualization. The shader compares each surface point's normal with the calculated sun direction to determine illumination.
- Click Download export in the footer to capture the current globe.
- Still images support PNG, JPG, and WebP. Animated exports support WebM (hardware-accelerated via
MediaRecorder) and GIF (bundled encoder). - Configure the dwell time per hop for animated formats; the tooltip stays on-screen with ASN, PeeringDB, and location details for each hop.
- Files are saved to your system's default download location (typically
~/Downloadson macOS/Linux orC:\Users\<username>\Downloadson Windows). - Filenames follow the pattern
vistracer-snapshot-YYYY-MM-DDTHH-MM-SS.extfor stills andvistracer-route-YYYY-MM-DDTHH-MM-SS.extfor animations. - The export button is available once a traceroute run has completed, and MP4 export is intentionally not supported (WebM/GIF cover animation needs without extra codecs).
- Scheduled GeoLite2 refresh (auto-download via license key works; periodic refresh is not yet automated)
- Provider rate-limit handling and retry UX for external enrichment APIs
- MP4 export remains out of scope; use WebM or GIF instead.
- Advanced heuristics (anycast detection, jitter visualisation, comparison view) are planned but not implemented in this build
- Windows environments rely on
tracert; ensure it is available onPATH
See CONTRIBUTING.md for development setup, coding standards, and PR workflow.
- GEOLITE2_SETUP.md - Complete guide to downloading and configuring GeoLite2 databases
- CLAUDE.md - Architecture overview and development guide for contributors
- CHANGELOG.md - Release history

