TraceRT is a cross-platform desktop application built with Tauri v2 and Rust that provides real-time visualization of network traceroute data. The application combines powerful backend networking tools with an intuitive React frontend to visualize network paths and latency measurements on interactive maps.
- Real-time Traceroute Visualization: Watch network packets travel across the globe in real-time
- Interactive World Map: Visualize hop locations and route paths on a dynamic world map
- Network Topology View: See the network path in a structured topology diagram
- Detailed Hop Information: View latency, IP addresses, and geographic locations for each hop
- Cross-platform Support: Built with Tauri for native performance on Windows, macOS, and Linux
- Geolocation Integration: Automatically resolves IP addresses to geographic locations
- Performance Metrics: Displays accurate latency measurements as integers for clarity
- Backend: Rust, Tauri v2, Tokio async runtime
- Frontend: React, TypeScript, Vite
- Styling: Tailwind CSS, shadcn/ui
- Maps: AmCharts 5 with geodata
- Geolocation: MaxMind GeoLite2 database
- Build Tools: Cargo, npm, TypeScript
- Streaming Architecture: Real-time event-driven updates using Tauri events
- Smart State Management: Proper hop state preservation using Map-based storage
- Accurate Parsing: Robust Windows
tracertand Unixtracerouteoutput parsing - Geographic Filtering: Intelligent filtering of private IPs and invalid coordinates
- Performance Optimization: Integer-based latency display for cleaner UI
- Backend Processing: Rust handles traceroute execution, output parsing, and geolocation lookup
- Event System: Real-time updates via Tauri events (
trace:line,hop:update,trace:complete) - Frontend State: React hooks manage streaming data and maintain consistent UI state
- Map Logic: Smart origin point detection (first public hop with valid geo coordinates)
- Node.js and npm
- Rust and Cargo
- Git
- Internet connection to download the geolocation database
# Clone the repository
git clone <REPO_URL>
# Navigate to the project directory
cd TraceRT
# Install JavaScript dependencies
npm install
# Install Rust dependencies (if needed)
cargo check
# Start the development server
npm run devThe application requires the MaxMind GeoLite2 City database (GeoLite2-City.mmdb) for IP geolocation services. This database file needs to be placed in the appropriate application data directory:
Automatic Download: The application can automatically download the database file when needed. If you encounter geolocation issues, you can trigger a manual download by using the download functionality in the app.
Manual Download:
- Download the
GeoLite2-City.mmdbfile from: https://github.com/P3TERX/GeoLite.mmdb/raw/download/GeoLite2-City.mmdb - Place it in the appropriate directory based on your operating system:
- Windows:
%APPDATA%\TraceRT\GeoLite2-City.mmdb(typicallyC:\Users\<username>\AppData\Roaming\TraceRT\GeoLite2-City.mmdb) - macOS:
~/Library/Application Support/TraceRT/GeoLite2-City.mmdb - Linux:
~/.local/share/TraceRT/GeoLite2-City.mmdbor~/.config/TraceRT/GeoLite2-City.mmdb
- Windows:
# Build the application
npm run tauri build- Trace Initiation: User enters a target IP or domain name
- Backend Execution: Rust executes the appropriate traceroute command for the OS
- Real-time Parsing: Output is parsed line-by-line as it's generated
- Geolocation Lookup: IP addresses are resolved to geographic coordinates
- Event Streaming: Hop data is streamed to the frontend via Tauri events
- Visualization: Interactive maps and tables update in real-time
- Completion: Final results are aggregated and displayed when tracing completes
- Origin Point Detection: Map automatically centers on the first public hop with valid geo coordinates
- Private IP Handling: Properly identifies and handles private IP ranges (10.x, 192.168.x, 172.16-31.x)
- State Preservation: Maintains accurate geo data even when streaming updates occur
- Clean Latency Display: Rounds latency values to integers for improved readability
- Robust Parsing: Handles various traceroute output formats including domain-before-IP notation
Contributions are welcome! Feel free to submit pull requests or report issues.
MIT
