High-performance network diagnostics with a beautiful real-time UI
NekroTrace is a desktop network diagnostic application that combines a Rust-based tracing and probing engine with a modern SvelteKit frontend. The backend performs traceroute discovery and then continuously cycles through the discovered hops, pinging each one sequentially with roughly one-second pauses between sweeps. Latency and status events stream to the frontend via Tauri event channels for real-time visualization.
NekroTrace is a polished, modern GUI front-end for traditional traceroute / tracert utilities — designed to make route discovery and per-hop latency inspection fast, intuitive, and visually clear. It is cross-platform and works on both Windows and Linux.
hop_list_updated, new_ping_data) consumed by the UI for live charts and animated lists.Desktop GUI: NekroTrace provides a visually-oriented UI for traceroute/tracert workflows — showing hop lists, per-hop charts, and live status updates in a single window.
Cross-Platform: Officially supported on Windows and Linux (native binaries for both platforms are available in releases).
src-tauri/src/ — Rust + Tauri. The core network engine lives in src-tauri/src/network_engine.rs. It runs traceroute, spawns per-hop ping loops, and emits events using the Tauri event API.src/ — SvelteKit app. The UI subscribes to Tauri events, keeps global state in src/lib/stores.js, and renders components from src/lib/components/.The backend emits two primary events over Tauri's event system. The frontend expects these payloads:
hop_list_updated
hop (number): Time-To-Live value / hop index.ip (string): IP address discovered at that hop.hostname (string): reverse DNS result, or the IP string when PTR lookup fails.new_ping_data
ip (string): target hop IP for this ping sample.latency (number | null): measured round-trip time in milliseconds, or null when the attempt times out or errors.status (string): one of ok, timeout, error, or invalid_ip.src/routes/+page.svelte subscribes to these events, updates the shared stores in src/lib/stores.js, and re-renders the UI components in real time.
new_ping_data for every attempt.Pings are issued sequentially per hop. After each full sweep, the loop sleeps for one second, so an individual hop's sampling interval equals the sweep duration plus that pause.
npm i -g @tauri-apps/cli) — required for building the desktop bundletraceroute and ping binaries are installed and runnable by your user (the app shells out to them instead of opening raw sockets itself).You do not need to build from source to use NekroTrace. Download the latest prebuilt release for your platform from this repository's Releases page and run the provided binary:
.exe from the latest release and run it normally.ping/traceroute, run NekroTrace with elevated permissions or adjust those utilities accordingly.Using a release binary is the simplest way to try the application without installing the development toolchain.
Install JavaScript dependencies:
npm install
Run the app in development mode (select the command applicable to your platform):
npm run dev:windows # Windows
npm run dev:linux:x11 # Linux (X11)
npm run dev:linux:wayland # Linux (Wayland)
These scripts start the SvelteKit dev server and the Tauri dev runner so changes in both frontend and backend are live.
Create a production build and package the desktop application using Tauri:
npm run build
npm run tauri:build
Output binaries are placed in the Tauri build output (e.g. src-tauri/target/release/).
NekroTrace invokes the host system's traceroute and ping executables rather than opening raw sockets directly. On mainstream distributions those utilities already carry the necessary privileges (setuid root or cap_net_raw), so running NekroTrace as an unprivileged user typically works out of the box.
Only modify capabilities if your environment removes those defaults. Options include:
sudo.ping/traceroute binaries.cap_net_raw to the built NekroTrace binary:sudo setcap cap_net_raw+ep ./src-tauri/target/release/nekrotrace
The final option is rarely necessary but remains available for hardened environments.
src/ — SvelteKit frontendsrc/lib/stores.js — central Svelte stores for hops and seriessrc/lib/components/ — Chart.svelte, HopList.svelte, InputBar.sveltesrc/routes/ — Svelte pages and Tauri event wiring (+page.svelte, +layout.svelte)src-tauri/ — Rust backend and Tauri configsrc-tauri/src/network_engine.rs — traceroute orchestration, sequential ping loops, event emissionsrc-tauri/src/main.rs — Tauri command registration and bootstrapsrc-tauri/tauri.conf.json — Tauri configuration for bundlingContributions are welcome. Recommended workflow:
Development notes:
The application depends on the host traceroute and ping binaries, so it inherits whatever security posture those tools already have on your system. In a standard setup you can run NekroTrace as a regular user and rely on the system utilities' existing capabilities. If you harden or replace those tools, adjust their permissions or run NekroTrace with elevated privileges so they can continue to operate. Never grant additional capabilities to untrusted binaries.
Built with Tauri, SvelteKit, Rust, and ApexCharts.
This project is distributed under the terms of the repository LICENSE file.