
Parallel multi-target traceroute tool that traces IPv4/IPv6 routes with ICMP, TCP or UDP probes, resolves hop ASNs, and exports MTR-style tables and map links.
Trace several targets at once and see every hop on a map.
English · 简体中文 · 繁體中文(台灣) · 繁體中文(香港) · 繁體中文(澳門)
xmtr traces several targets at the same time with trippy, stops each route once its path is stable, and uploads the routes to xmsl.dev IPMap. IPMap places every hop on a map and replays the route.
https://github.com/user-attachments/assets/b2152647-3396-4f2c-86d4-267c2b11e529
The link at the end of a run opens the map:
https://github.com/user-attachments/assets/b675a8f5-dff1-460a-bb3c-ca7b3e4ff412
curl -fsSL https://raw.githubusercontent.com/Alice39s/xmtr/main/install.sh | bash
sudo xmtr 1.1.1.1 cloudflare.com
The second command traces 1.1.1.1 and cloudflare.com, over IPv4 and IPv6 when the host has both, and prints the routes and an IPMap link. Windows and package managers are covered in Install, and Privileges lists who may trace on each system.
macOS, Linux, FreeBSD, Termux
curl -fsSL https://raw.githubusercontent.com/Alice39s/xmtr/main/install.sh | bash
The script is POSIX sh, so | sh works on systems without bash. On OpenWrt, use the native package repository. As a regular user it installs into /usr/local/bin through sudo, so sudo xmtr finds the binary; sudo may ask for your password. Without sudo rights it installs into ~/.local/bin.
Windows
powershell -c "irm https://raw.githubusercontent.com/Alice39s/xmtr/main/install.ps1|iex"
Both scripts pick the build for your system, check it against the release SHA256SUMS, and run a small installer that places a single xmtr binary and then deletes itself. Nothing else is written, except the user PATH entry on Windows. Downloads use HTTPS, unless XMTR_RELEASES names an http:// mirror.
| System | Default location |
|---|---|
| Linux, macOS, FreeBSD | /usr/local/bin; ~/.local/bin without sudo rights |
| Termux | $PREFIX/bin |
| Windows | %LOCALAPPDATA%\Programs\xmtr |
Pass installer options after bash -s --:
curl -fsSL https://raw.githubusercontent.com/Alice39s/xmtr/main/install.sh | bash -s -- --dir ~/bin --version v0.3.6
XMTR_INSTALL_DIR sets the directory, and XMTR_RELEASES points both the script and the installer at a mirror of the releases page. On Windows these two variables are the only way to pass options.
| Manager | Command | |
|---|---|---|
| Homebrew (macOS, Linux) | brew install alice39s/tap/xmtr | |
| Scoop (Windows) | scoop bucket add alice39s https://github.com/Alice39s/scoop-bucket then scoop install alice39s/xmtr | |
| WinGet (Windows) | winget install Alice39s.xmtr | |
| Chocolatey (Windows) | choco install xmtr | |
| npm | npm install --global @xmtr/cli, or npx @xmtr/cli 1.1.1.1 | |
| PyPI | uv tool install xmtr, pipx install xmtr or pip install xmtr | |
| Cargo | cargo binstall xmtr for the release binary, or cargo install xmtr to build it | |
| mise | mise use --global github:Alice39s/xmtr | |
| Nix | nix run github:Alice39s/xmtr -- 1.1.1.1, or nix profile install github:Alice39s/xmtr | |
| Docker | docker run --rm ghcr.io/alice39s/xmtr 1.1.1.1 |
The npm package and the PyPI wheels hold the same binaries as the release archives; npm picks the @xmtr/<platform> package for your system. The Docker image holds only the static binary and is built for amd64, arm64, armv7, armv6, 386, riscv64 and loong64. Docker grants raw sockets to containers by default; with Podman add --cap-add NET_RAW.
The deb, rpm and apk packages install /usr/bin/xmtr and grant it raw sockets with setcap, so every user can trace without root. They are attached to each release and served from signed repositories:
| System | Architectures | |
|---|---|---|
| Debian, Ubuntu | amd64, arm64, armhf, i386, riscv64, loong64 | |
| Fedora, RHEL | x86_64, aarch64, armv7hl, i686, riscv64, loongarch64 | |
| Alpine | x86_64, aarch64, armv7, armhf, x86, riscv64, loongarch64 |
# Debian, Ubuntu
sudo curl -fsSL -o /usr/share/keyrings/xmtr.gpg https://alice39s.github.io/xmtr/xmtr.gpg
echo "deb [signed-by=/usr/share/keyrings/xmtr.gpg] https://alice39s.github.io/xmtr/deb stable main" | sudo tee /etc/apt/sources.list.d/xmtr.list
sudo apt update && sudo apt install xmtr
# Fedora, RHEL
sudo curl -fsSL -o /etc/yum.repos.d/xmtr.repo https://alice39s.github.io/xmtr/rpm/xmtr.repo
sudo dnf install xmtr
# Alpine
wget -qO /etc/apk/keys/xmtr.rsa.pub https://alice39s.github.io/xmtr/apk/xmtr.rsa.pub
echo https://alice39s.github.io/xmtr/apk >> /etc/apk/repositories
apk add xmtr
The repositories are signed with the keys in packaging/keys. The release workflow publishes every channel above except mise and Nix, which read the GitHub release and the flake directly.
Native packages are built for OpenWrt 24.10 (opkg) and 25.12 (APK v3), covering x86-64, x86 with SSE2, ARM64, ARMv7 hard-float and soft-float, and MIPS 24Kc in both byte orders. The OpenWrt guide lists the exact package architectures, signed feed setup and update commands. Run xmtr as root on OpenWrt.