A cross-platform desktop application built with Tauri (Rust + Web) that monitors network connectivity by pinging configurable targets and logging the results with real-time statistics and charts.
- π― Configurable Ping Targets: Add custom IP addresses or hostnames, with preset options for popular DNS servers (Cloudflare, Google, Quad9, OpenDNS)
- π Real-time Charts: Live latency visualization using Chart.js with multi-target support
- π Comprehensive Statistics: Min/Max/Avg latency, jitter, packet loss percentage, and total pings
- π JSON Logging: Automatic daily log rotation with JSON Lines format for easy parsing
- π Cross-Platform: Works on Windows, macOS, and Linux
- π¨ Modern UI: Dark theme dashboard with responsive design
- Real-time latency chart
- Target status indicators with color-coded latency
- Statistics panel with key metrics
- Control buttons for start/stop/reset
- Manage ping targets
- Quick-add presets
- Configure ping interval and timeout
- Rust (1.70 or later)
- Node.js (for development)
- Platform-specific dependencies:
- Windows: No additional dependencies
- macOS: Xcode Command Line Tools
- Linux:
webkit2gtk,libappindicator3,librsvg2
# Ubuntu/Debian
sudo apt update
sudo apt install libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf
# Fedora
sudo dnf install webkit2gtk4.1-devel libappindicator-gtk3-devel librsvg2-devel
# Arch
sudo pacman -S webkit2gtk-4.1 libappindicator-gtk3 librsvg- Clone the repository:
git clone https://github.com/yourusername/ping-connectivity.git
cd ping-connectivity- Build the application:
cd src-tauri
cargo build --release- Run the application:
cargo run --releaseFor development with hot-reload:
# Install Tauri CLI
cargo install tauri-cli
# Run in development mode
cargo tauri dev- Launch the application
- Click the Start button to begin pinging
- Watch real-time latency updates in the chart and target cards
- Click + Add Target to add a custom target
- Or click Settings to access full target management
- Use the checkboxes to enable/disable specific targets
- Click the trash icon to remove a target
In Settings, use the preset buttons to quickly add popular DNS servers:
- Cloudflare DNS (1.1.1.1)
- Google DNS (8.8.8.8)
- Quad9 DNS (9.9.9.9)
- OpenDNS (208.67.222.222)
- Select a target from the dropdown to view its specific statistics
- Statistics include:
- Min Latency: Lowest recorded latency
- Max Latency: Highest recorded latency
- Avg Latency: Average latency
- Jitter: Latency variation (standard deviation)
- Packet Loss: Percentage of failed pings
- Total Pings: Number of pings sent
Click Open Logs to open the log directory in your file explorer.
Log files are stored in:
- Windows:
%APPDATA%\ping-connectivity\logs\ - macOS:
~/Library/Application Support/ping-connectivity/logs/ - Linux:
~/.local/share/ping-connectivity/logs/
Log format (JSON Lines):
{"timestamp":"2025-12-25T12:00:00.000Z","target":"1.1.1.1","target_label":"Cloudflare DNS","latency_ms":12.5,"success":true,"sequence":1,"error":null}- Interval: Time between pings (default: 1000ms, minimum: 100ms)
- Timeout: Maximum wait time for ping response (default: 5000ms)
- Select "All Targets" to view all enabled targets on the chart
- Or select a specific target to focus on its latency
ping-connectivity/
βββ src-tauri/ # Rust backend
β βββ src/
β β βββ main.rs # Entry point
β β βββ lib.rs # Library exports
β β βββ commands.rs # Tauri commands
β β βββ state.rs # Application state
β β βββ models.rs # Data models
β β βββ ping/ # Ping module
β β βββ logging/ # JSON logging
β β βββ stats/ # Statistics calculator
β βββ Cargo.toml
βββ src/ # Web frontend
β βββ index.html
β βββ styles.css
β βββ main.js
βββ README.md
The application uses the system's native ping command for cross-platform compatibility without requiring elevated privileges:
- Windows:
ping -n 1 -w <timeout> <target> - macOS:
ping -c 1 -t <timeout> <target> - Linux:
ping -c 1 -W <timeout> <target>
- Jitter: Calculated as the standard deviation of latency values
- Packet Loss:
(failed_pings / total_pings) * 100
The backend emits events to the frontend:
ping-result: Emitted after each ping with the resultstats-update: Emitted with updated statistics for all targets
- Ensure you have network connectivity
- Check if the target is reachable from your network
- Some networks may block ICMP packets
- Check your network connection
- Try pinging a closer server
- Check for network congestion
- Ensure all dependencies are installed
- Check the console for error messages
- Try rebuilding the application
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the MIT License - see the LICENSE file for details.
