Skip to content

Releases: tonhe/viaduct

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 11 Jul 03:17

via v0.2.0 — IPv6 Support & Comprehensive Test Suite

Highlights

  • IPv6 traceroute with single-family auto-select and -4/-6 force 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 traceroutevia now 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 configip_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.com for 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-test for 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

Choose a tag to compare

@github-actions github-actions released this 13 Mar 05:44

What's New

Display Modes

  • Three view modes — cycle with V between 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-latency and --alert-loss CLI 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 via to 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

Choose a tag to compare

@github-actions github-actions released this 10 Mar 15:44

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, -p to 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 protocol

ASN 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

Choose a tag to compare

@github-actions github-actions released this 09 Mar 23:51

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-paths for 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 q or Ctrl-C

Install

Homebrew

brew tap tonhe/tap
brew install viaduct

From source

Requires Go 1.25+:

git clone https://github.com/tonhe/viaduct.git
cd viaduct
make install

Quick 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.8

What'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