Releases: tonhe/viaduct
Release list
v0.2.0
via v0.2.0 — IPv6 Support & Comprehensive Test Suite
Highlights
- IPv6 traceroute with single-family auto-select and
-4/-6force flags - Cross-platform CI on Ubuntu, macOS, and Windows (Go 1.25.6)
- ~700 tests across unit, golden snapshot, teatest e2e, integration, mutation, and fuzz layers
- Per-package coverage floors enforced in CI
- Zero breaking changes from v0.1.0
New
- IPv6 traceroute —
vianow runs over IPv4 or IPv6. Auto-select prefers IPv6 when both target AAAA and local v6 transport are available.
via google.com # auto (prefers v6 if available)
via -4 google.com # force IPv4
via -6 google.com # force IPv6
When -6 is requested but the target has no AAAA (or the host has no v6 transport), via exits with a clear error rather than silently falling back.
- IP family config —
ip_family = "auto" | "4" | "6"in~/.config/via/config.toml; also available in the Settings menu (Esc → Probe Settings → IP family). - Dynamic v6 column width — the IP column widens automatically for v6 addresses in both the live TUI and report mode.
- v6 in every export format — JSON, CSV, and DOT all handle v6 addresses correctly (DOT node IDs sanitized to remain valid graphviz).
- v6 ASN enrichment — uses
origin6.asn.cymru.comfor AAAA hops.
Quality
- Cross-platform CI matrix on every push and PR
- Weekly fuzz workflow across every parser (
ParseInnerHeader,TCPChecksum,parseTCPResponse,parseOriginResponse,parseASNameResponse,config.Load) - 72% mutation kill rate baseline — the test suite catches deliberate code corruptions
- Opt-in
make soak-testfor real-network validation (never on CI)
Install
Homebrew
brew upgrade tonhe/tap/viaduct
From source
git clone https://github.com/tonhe/viaduct.git
cd viaduct
git checkout v0.2.0
make install
Linux users can avoid sudo by granting raw-socket capability once:
sudo setcap cap_net_raw+ep $(which via)
Changelog
- d09ad60 release: v0.2.0 — IPv6 support and cross-platform test suite
v0.0.3
What's New
Display Modes
- Three view modes — cycle with
Vbetween Default, Extended, and Compact layouts - Each mode shows a different set of columns tuned for the terminal width
Sparklines
- Per-hop latency sparklines rendered with heat-colored block characters
- Color ramps from green (low) through yellow to red (high latency)
- Sparklines fed from ping supplement data for rate-limited hops
Alert Engine
- Real-time threshold alerting for latency spikes and packet loss
- State machine tracks per-hop alert state (OK → Warning → Alert → Cleared)
- Configurable via
--alert-latencyand--alert-lossCLI flags
New Metrics
- Geometric Mean — robust central tendency less sensitive to outliers
- Jitter / Jitter Mean — inter-probe latency variation
- Hop Delta — latency difference from the previous hop
- Trend — sliding-window linear regression showing latency direction (↑↓→)
Responsive Layout
- Budget-based column fitting — gracefully scales columns from 40ch terminals to 160ch+ ultrawide
- Progressive disclosure: narrow terminals show core metrics, wider terminals add sparklines, ASN, jitter, trend
Windows Installer
- Native Windows installer (.exe) for both amd64 and arm64
- Adds
viato PATH automatically on install - Clean uninstall via Windows Add/Remove Programs
Install
macOS (Homebrew):
brew install tonhe/tap/viaduct
Windows (Installer):
Download via_0.0.3_windows_amd64_installer.exe from the release assets and run it.
Windows (Manual):
Download viaduct_0.0.3_windows_amd64.zip, extract, and add to PATH.
Linux (deb):
sudo dpkg -i via_0.0.3_amd64.deb
Linux (rpm):
sudo rpm -i via_0.0.3_amd64.rpm
v0.0.2
via v0.0.2
Three protocols. Smarter diagnostics. Network context at a glance.
Protocol Modes (-P)
Choose how via probes the network:
- UDP (default) — ECMP multipath discovery via source-port variation
- TCP SYN — reaches targets behind firewalls that block UDP/ICMP (port 443 default,
-pto change) - ICMP — classic single-path traceroute
- Auto — starts with UDP for ECMP discovery, automatically falls back to ICMP if no responses after ~3 seconds
via -P tcp google.com # TCP SYN probes
via -P auto cloudflare.com # auto-detect best protocolASN Enrichment
Every hop now shows its AS number and organization (e.g., AS13335 Cloudflare). AS boundary transitions — where traffic crosses from one network to another — are highlighted so you can see exactly where your packets change hands.
Zero configuration. No API keys. Powered by Team Cymru DNS.
Disable with --no-asn if you don't need it.
Automatic Rate-Limit Detection & Ping Supplement
Many routers rate-limit ICMP TTL Exceeded responses, causing tools like mtr to show phantom packet loss at intermediate hops. This is the most common source of misdiagnosis in traceroute output.
via automagically detects devices that are rate-limiting TTL Exceeded responses and switches their monitoring to direct ICMP Echo Requests (ping), replacing misleading loss stats with accurate data. The † dagger next to the loss column marks hops using ping-derived stats.
No configuration needed — it just works. Disable with --no-ping if you prefer raw TTL Exceeded data.
UI Improvements
- ASN column with AS boundary highlighting (muted gold)
- First AS in the path is also highlighted
- Column-aligned indicators (everything fits within defined column widths)
Changelog
- 57a84d6 release: via v0.0.2 — Protocol Modes, ASN Enrichment, Ping Supplement
v0.0.1
Initial Release -- via v0.0.1
A modern, terminal-native traceroute with real-time ECMP multipath discovery.
via replaces traceroute, mtr, and paris-traceroute with a single tool that reveals all the parallel paths your packets actually take through load-balanced networks.
Highlights
- ECMP multipath discovery — Paris-traceroute-style UDP probing with per-flow source port variation discovers all parallel paths through load-balanced routers. 6 flows by default, configurable with
--paths. - ICMP rate-limit detection — Automatically distinguishes false packet loss (routers throttling TTL Exceeded replies) from real loss. Rate-limited hops display
~N%instead of triggering false alarms. - Live TUI with tree rendering — Divergence points auto-expand with
├──/└──connectors. Path stability badges ([100%]) show how consistent each path is over a 50-round rolling window. - Full mtr-class statistics — Snt, Avg, Best, Wrst, StDev, Last, Loss% columns with Welford's online algorithm for numerically stable standard deviation.
Features
- ECMP on by default,
--no-pathsfor single-path mode - Viewport scrolling (
j/k), jump to top/bottom (g/G) - Adaptive column layout based on terminal width
- Async DNS resolution with worker pool, dedup, and caching
- Report mode (
-r) for scripted/non-interactive output - Auto-sudo when raw socket permissions are missing
- Configurable interval, count, TTL range, and packet size
- Clean exit with final summary on
qorCtrl-C
Install
Homebrew
brew tap tonhe/tap
brew install viaductFrom source
Requires Go 1.25+:
git clone https://github.com/tonhe/viaduct.git
cd viaduct
make installQuick Start
# Default trace with ECMP multipath
via google.com
# 12 ECMP flows
via --paths 12 google.com
# Single-path mode
via --no-paths 8.8.8.8
# Report mode, 5 rounds, no DNS
via -r -c 5 -n 8.8.8.8What's Next
- UDP/TCP probe modes, ASN enrichment, ping supplement for rate-limited hops
- Display mode cycling, sparklines, multi-target, JSON/CSV/DOT export
- Theme engine with 20 built-in color themes