## File: README.md

## Quick Start

See the [getting started](https://trippy.rs/start/getting-started) guide.

### Install

Trippy runs on Linux, BSD, macOS, and Windows. It can be installed from most package managers, precompiled binaries, or
source.

For example, to install Trippy from `cargo`:

```shell
cargo install trippy --locked
```



All package managers

### Cargo

[](https://crates.io/crates/trippy/0.13.0)

```shell
cargo install trippy --locked
```

### APT (Debian)

[](https://tracker.debian.org/pkg/trippy)

```shell
apt install trippy
```

> ⓘ Note:
>
> Only available for Debian 13 (`trixie`) and later.

### PPA (Ubuntu)

[](https://launchpad.net/~fujiapple/+archive/ubuntu/trippy/+packages)

```shell
add-apt-repository ppa:fujiapple/trippy
apt update && apt install trippy
```

> ⓘ Note:
>
> Only available for Ubuntu 24.04 (`Noble`) and 22.04 (`Jammy`).

### Snap (Linux)

[](https://snapcraft.io/trippy)

```shell
snap install trippy
```

### Homebrew (macOS)

[](https://formulae.brew.sh/formula/trippy)

```shell
brew install trippy
```

### WinGet (Windows)

[](https://github.com/microsoft/winget-pkgs/tree/master/manifests/f/FujiApple/Trippy/0.13.0)

```shell
winget install trippy
```

### Scoop (Windows)

[](https://github.com/ScoopInstaller/Main/blob/master/bucket/trippy.json)

```shell
scoop install trippy
```

### Chocolatey (Windows)

[](https://community.chocolatey.org/packages/trippy)

```shell
choco install trippy
```

### NetBSD

[](https://pkgsrc.se/net/trippy)

```shell
pkgin install trippy
```

### FreeBSD

[](https://www.freshports.org/net/trippy/)

```shell
pkg install trippy
```

### OpenBSD

[](https://openports.pl/path/net/trippy)

```shell
pkg_add trippy
```

### Arch Linux

[](https://archlinux.org/packages/extra/x86_64/trippy)

```shell
pacman -S trippy
```

### Gentoo Linux

[](https://packages.gentoo.org/packages/net-analyzer/trippy)

```shell
emerge -av net-analyzer/trippy
```

### Void Linux

[](https://github.com/void-linux/void-packages/tree/master/srcpkgs/trippy)

```shell
xbps-install -S trippy
```

### ALT Sisyphus

[](https://packages.altlinux.org/en/sisyphus/srpms/trippy/)

```shell
apt-get install trippy
```

### Chimera Linux

[](https://github.com/chimera-linux/cports/tree/master/user/trippy)

```shell
apk add trippy
```

### Nix

[](https://github.com/NixOS/nixpkgs/blob/master/pkgs/by-name/tr/trippy/package.nix)

```shell
nix-env -iA trippy
```

### Docker

[](https://hub.docker.com/r/fujiapple/trippy/)

```shell
docker run -it fujiapple/trippy
```

### All Repositories

[](https://repology.org/project/trippy/versions)



See the [installation](https://trippy.rs/start/installation) guide for details of how to install Trippy on your system.

### Run

To run a basic trace to `example.com` with default settings, use the following command:

```shell
sudo trip example.com
```

See the [usage examples](https://trippy.rs/guides/usage) and [CLI reference](https://trippy.rs/reference/cli) for
details of how to use Trippy. To use Trippy without elevated privileges, see
the [privileges](https://trippy.rs/guides/privileges) guide.

## Documentation

Full documentation is available at [trippy.rs](https://trippy.rs).



documentation links

## Getting Started

See the [Getting Started](https://trippy.rs/start/getting-started/) guide.

## Features

See the [Features](https://trippy.rs/start/features/) list.

## Distributions

See the [Distributions](https://trippy.rs/start/installation/) list.

## Privileges

See the [Privileges](https://trippy.rs/guides/privileges/) guide.

## Usage Examples

See the [Usage Examples](https://trippy.rs/guides/usage/).

## Command Reference

See the [Command Reference](https://trippy.rs/reference/cli/).

## Theme Reference

See the [Theme Reference](https://trippy.rs/reference/theme/).

## Column Reference

See the [Column Reference](https://trippy.rs/reference/column/).

## Configuration Reference

See the [Configuration Reference](https://trippy.rs/reference/configuration/).

## Locale Reference

See the [Locale Reference](https://trippy.rs/reference/locale/).

## Versions

See the [Version Reference](https://trippy.rs/reference/version/).

## Frequently Asked Questions

### Why does Trippy show "Awaiting data..."?

See the [Awaiting Data](https://trippy.rs/guides/faq/) guide.

<a name="windows-defender"></a>

### How do I allow incoming ICMP traffic in the Windows Defender firewall?

See the [Windows Defender Firewall](https://trippy.rs/guides/windows_firewall/) guide.

### What are the recommended settings for Trippy?

See the [Recommended Tracing Settings](https://trippy.rs/guides/recommendation/) guide.



## Acknowledgements

Trippy is made possible by [ratatui](https://github.com/ratatui-org/ratatui) (
formerly [tui-rs](https://github.com/fdehau/tui-rs)),
[crossterm](https://github.com/crossterm-rs/crossterm) as well
as [several](https://github.com/fujiapple852/trippy/blob/master/Cargo.toml) foundational Rust libraries.

Trippy draws heavily from [mtr](https://github.com/traviscross/mtr) and also incorporates ideas
from both [libparistraceroute](https://github.com/libparistraceroute/libparistraceroute)
& [Dublin Traceroute](https://github.com/insomniacslk/dublin-traceroute).

The Trippy networking code is inspired by [pnet](https://github.com/libpnet/libpnet) and some elements of that codebase
are incorporated in Trippy.

The [AS][autonomous_system] data is retrieved from
the [IP to ASN Mapping Service](https://team-cymru.com/community-services/ip-asn-mapping/#dns) provided
by [Team Cymru](https://team-cymru.com).

The [trippy.cli.rs](https://trippy.cli.rs) CNAME hosting is provided by [cli.rs](https://cli.rs).

The Trippy chat room is sponsored by [Zulip](https://zulip.com).

Trippy logo designed by [Harun Ocaksiz Design](https://www.instagram.com/harunocaksiz).

## License

This project is distributed under the terms of the Apache License (Version 2.0).

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in time by you, as defined
in the Apache-2.0 license, shall be licensed as above, without any additional terms or conditions.

See [LICENSE](LICENSE) for details.

Copyright 2022 [Trippy Contributors](https://github.com/fujiapple852/trippy/graphs/contributors)

[autonomous_system]: https://en.wikipedia.org/wiki/Autonomous_system_(Internet)

---

## File: crates/README.md

## Crates

The following is a list of the crates defined by Trippy and their purposes:

### `trippy`

A binary crate for the Trippy application and a library crate. This is the crate you would use if you wish to install
and run Trippy as a standalone tool.

```shell
cargo install --locked trippy
```

It can also be used as library for crates that wish to use the Trippy tracing functionality.

> [!NOTE]
> The `trippy` crate has `tui` as a default feature and so you should disable default features when using it as a
> library.

```shell
cargo add trippy --no-default-features --features core,dns
```

### `trippy-core`

A library crate providing the core Trippy tracing functionality. This crate is used by the Trippy application and is
the crate you would use if you wish to provide the Trippy tracing functionality in your own application.

```shell
cargo add trippy-core
```

### `trippy-packet`

A library crate which provides packet wire formats and packet parsing functionality. This crate is used by the Trippy
application and is the crate you would use if you wish to provide packet parsing functionality in your own application.

```shell
cargo add trippy-packet
```

### `trippy-dns`

A library crate for performing forward and reverse lazy DNS resolution. This crate is designed to be used by the Trippy
application but may also be useful for other applications that need to perform forward and reverse lazy DNS resolution.

```shell
cargo add trippy-dns
```

### `trippy-privilege`

A library crate for discovering platform privileges. This crate is designed to be used by the Trippy application but
may also be useful for other applications.

```shell
cargo add trippy-privilege
```

### `trippy-tui`

A library crate for the Trippy terminal user interface.

```shell
cargo add trippy-tui
```

---

## File: docs/src/content/docs/guides/faq.md

---
title: Frequently Asked Questions
sidebar:
  order: 6
---

## Why does Trippy show "Awaiting data..."?

:::caution
If you are using Windows you _must_ [configure](/guides/windows_firewall)
the Windows Defender firewall to allow incoming ICMP traffic
:::

When Trippy shows “Awaiting data...” it means that it has received zero responses for the probes sent in a trace. This
indicates that either probes are not being sent or, more typically, responses are not being received.

Check that local and network firewalls allow ICMP traffic and that the system `traceroute` (or `tracert.exe` on
Windows) works as expected. Note that on Windows, even if `tracert.exe` works as expected, you
_must_ [configure](/guides/windows_firewall) the Windows Defender
firewall to allow incoming ICMP traffic.

For deeper diagnostics you can run tools such as https://www.wireshark.org and https://www.tcpdump.org to verify that
icmp requests and responses are being send and received.

<a name="windows-defender"></a>

---

## File: docs/src/content/docs/guides/privileges.md

---
title: Privileges
sidebar:
  order: 2
---

Trippy normally requires elevated privileges due to the use of raw sockets. Enabling the required privileges for your
platform can be achieved in several ways, as outlined below. Trippy can also be used without elevated privileged on
certain platforms, with some limitations.

## Unix

### Run via `sudo`

Run as `root` user via `sudo`:

```shell
sudo trip example.com
```

:::note
When running `trip` via `sudo` you must ensure that the (optional) configuration file is stored relative to the `root`
user or specify the location of the configuration file via the `-c` (`--config-file`) command line argument. See
the [configuration reference](/reference/configuration).
:::

### Set the `setuid` bit

`chown` `trip` as the `root` user and set the `setuid` bit:

```shell
sudo chown root $(which trip) && sudo chmod +s $(which trip)
```

### [Linux only] Set capabilities

Set the `CAP_NET_RAW` capability:

```shell
sudo setcap CAP_NET_RAW+p $(which trip)
```

:::note
Trippy is a capability aware application and will add `CAP_NET_RAW` to the effective set if it is present in the allowed
set. Trippy will drop all capabilities after creating the raw sockets.
:::

## Windows

Trippy must be run with Administrator privileges on Windows.

## Unprivileged mode

Trippy allows running in an unprivileged mode for all tracing modes (`ICMP`, `UDP` and `TCP`) on platforms which support
that feature.

:::note
Unprivileged mode is currently only supported on macOS. Linux support is possible and may be added in the future.
Unprivileged mode is not supported on NetBSD, FreeBSD or Windows as these platforms do not support the `IPPROTO_ICMP`
socket type. See [#101](https://github.com/fujiapple852/trippy/issues/101) for further information.
:::

The unprivileged mode can be enabled by adding the `--unprivileged` (`-u`) command line flag or by adding the
`unprivileged` entry in the `trippy` section of the [configuration file](/reference/configuration):

```toml
[trippy]
unprivileged = true
```

:::note
The `paris` and `dublin` `ECMP` strategies are not supported in unprivileged mode as these require manipulating the
`UDP` and `IP` and headers which in turn requires the use of a raw socket.
:::

---

## File: docs/src/content/docs/guides/recommendation.md

---
title: Recommended Tracing Settings
sidebar:
  order: 3
---

Trippy provides a variety of configurable features which can be used to perform different types of analysis. The choice
of settings will depend on the analysis you wish to perform and the environment in which you are working. This guide
lists some common options along with some basic guidance on when they might be appropriate.

:::note
The Windows `tracert` tool uses ICMP by default, whereas most Unix `traceroute` tools use UDP by default.
:::

## ICMP

By default Trippy will run an ICMP trace to the target. This will typically produce a consistent path to the target (a
single flow) for each round of tracing which makes it easy to read and analyse. This is a useful mode for general
network troubleshooting.

However, many routers are configured to rate-limit ICMP traffic which can make it difficult to get an accurate picture
of packet loss. In addition, ICMP traffic is not typically subject to ECMP routing and so may not reflect the path that
would taken by other protocols such as UDP and TCP.

To run a simple ICMP trace:

```shell
trip example.com
```

Due to the rate-limiting of ICMP traffic, some people prefer to hide the `Loss%` and `Recv` columns in the Tui as
these are easy to misinterpret.

```shell
trip example.com --tui-custom-columns hosavbwdt
```

These settings can be made permanent by adding them to the Trippy configuration file:

```toml
[tui]
custom-columns = "hosavbwdt"
```

:::note
The `Sts` column shows different color codes to reflect packet loss at intermediate vs the target hop, see the
[Column Reference](/reference/column) for more information.
:::

#### UDP/Dublin with fixed ports

UDP tracing provides a more realistic view of the path taken by traffic that is subject to ECMP routing.

Setting a fixed target port in the range 33434-33534 may allow Trippy to determine that the probe has reached the target
as many routers and firewalls are configured to allow UDP probes in that range and will respond with a Destination
Unreachable response.

However, running a UDP trace with a fixed target port and a variable source port will typically result in different
paths being followed for each probe within each round of tracing. This can make it difficult to interpret the output as
different hosts will reply for a given hop (time-to-live) across rounds.

By using the `dublin` ECMP strategy, which encodes the sequence number in the IP `identifier` field, Trippy can fix both
the source and target ports, typically resulting in a _single_ path for each probe within each round of tracing.

:::note
UDP/Dublin for IPv6 encodes the sequence number as the payload length as the IP `identifier` field is not available in
IPv6.
:::

:::note
Keep in mind that every probe is an _independent trial_ and each may traverse a completely different path. In practice,
ICMP probes often follow a single path, whereas the path of UDP and TCP probes is typically determined by the 5-tuple of
protocol, source and destination IP addresses and ports.

Also beware that the return path may not be the same as the forward path, and may also differ for each probe. Strategies
such as `dublin` and `paris` assist in controlling the path taken by the forward probes, but do not help control the
return path. Therefore it is recommended to run a trace in both directions to get a complete picture.
:::

To run a UDP trace with fixed source and target ports using the `dublin` ECMP strategy:

```shell
trip example.com --udp --multipath-strategy dublin --source-port 5000 --target-port 33434
```

:::note
The source port can be any valid port number, but the target port should usually be in the range 33434-33534 or whatever
range is open to UDP probes on the target host.
:::

These settings can be made permanent by adding them to the Trippy configuration file:

```toml
[strategy]
protocol = "udp"
multipath-strategy = "dublin"
source-port = 5000
target-port = 33434
```

## UDP/Dublin with fixed target port and variable source port

As an extension to the above, if you do not fix the source port when using the `dublin` ECMP strategy, Trippy will
vary the source port per _round_ of tracing (i.e. each probe within a given round will share the same source port, and
the source port will vary for each round). This will typically result in the _same_ path being followed for _each_ probe
within a given round, but _different_ paths being followed for each round.

These individual flows can be explored in the Trippy Tui by pressing the `toggle-flows` key binding (`f` key by
default).

Adding the columns `Seq`, `Sprt` and `Dprt` to the Tui will show the sequence number, source port and destination port
respectively which makes this easier to visualize.

```shell
trip example.com --udp --multipath-strategy dublin --target-port 33434 --tui-custom-columns holsravbwdtSPQ
```

These settings can be made permanent by adding them to the Trippy configuration file:

```toml
[strategy]
protocol = "udp"
multipath-strategy = "dublin"
target-port = 33434

[tui]
custom-columns = "holsravbwdtSPQ"
```

To make the flows easier to visualize, you can generate a Graphviz DOT file report of all tracing flows:

```shell
trip example.com --udp --multipath-strategy dublin --target-port 33434 -m dot -C 5
```

## UDP/Paris

UDP with the `paris` ECMP strategy offers the same benefits as the `dublin` strategy with fixed ports and can be used
in the same way.

They differ in the way they encode the sequence number in the probe. The `dublin` strategy uses the IP `identifier`
field, whereas the `paris` strategy uses the UDP `checksum` field.

To run a UDP trace with fixed source and target ports using the `paris` ECMP strategy:

```shell
trip example.com --udp --multipath-strategy paris --source-port 5000 --target-port 33434
```

The `paris` strategy does not work behind NAT as the UDP `checksum` field is typically modified by NAT devices.
Therefore the `dublin` strategy is recommended when NAT is present.

:::note
Trippy can detect the presence of NAT devices in some circumstances when using the `dublin` strategy and the `Nat`
column can be shown in the Tui to indicate when NAT is detected. See the [Column Reference](/reference/column) for more
information.
:::

#### TCP

TCP tracing is similar to UDP tracing in that it provides a more realistic view of the path taken by traffic that is
subject to ECMP routing.

TCP tracing defaults to using a target port of 80 and sets the source port as the sequence number which will typically
result in a different path being followed for each probe within each round of tracing.

To run a TCP trace:

```shell
trip example.com --tcp
```

TCP tracing is useful for diagnosing issues with TCP connections and higher layer protocols such as HTTP. Often UDP
tracing can be used in place of TCP to diagnose IP layer network issues and, as it provides ways to control the path
taken by the probes, it is often preferred.

:::note
Trippy does not support the `dublin` or `paris` ECMP strategies for TCP tracing and so you cannot fix both the source
and target ports. See the [tracking issue](https://github.com/fujiapple852/trippy/issues/274) for details.
:::

---

## File: docs/src/content/docs/guides/usage.md

---
title: Usage Examples
sidebar:
  order: 1
---

Basic usage with default parameters:

```shell
trip example.com
```

Trace without requiring elevated privileges (supported platforms only, see [privileges](/guides/privileges)):

```shell
trip example.com --unprivileged
```

Trace using the `udp` (or `tcp` or `icmp`) protocol (also aliases `--icmp`, `--udp` & `--tcp`):

```shell
trip example.com -p udp
```

Trace to multiple targets simultaneously (`icmp` protocol only,
see [#72](https://github.com/fujiapple852/trippy/issues/72)):

```shell
trip example.com google.com crates.io
```

Trace with a minimum round time of `250ms` and a grace period of `50ms`:

```shell
trip example.com -i 250ms -g 50ms
```

Trace with a custom first and maximum `time-to-live`:

```shell
trip example.com --first-ttl 2 --max-ttl 10
```

Use custom destination port `443` for `tcp` tracing:

```shell
trip example.com -p tcp -P 443
```

Use custom source port `5000` for `udp` tracing:

```shell
trip example.com -p udp -S 5000
```

Use the `dublin` (or `paris`) ECMP routing strategy for `udp` with fixed source and destination ports:

```shell
trip example.com -p udp -R dublin -S 5000 -P 3500
```

Trace with a custom source address:

```shell
trip example.com -p tcp -A 127.0.0.1
```

Trace with a source address determined by the IPv4 address for interface `en0`:

```shell
trip example.com -p tcp -I en0
```

Trace using `IPv6`:

```shell
trip example.com -6
```

Trace using `ipv4-then-ipv6` fallback (or `ipv6-then-ipv4` or `ipv4` or `ipv6`):

```shell
trip example.com --addr-family ipv4-then-ipv6
```

Generate a `json` (or `csv`, `pretty`, `markdown`) tracing report with 5 rounds of data:

```shell
trip example.com -m json -C 5
```

Generate a [Graphviz](https://graphviz.org) `DOT` file report of all tracing flows for a TCP trace after 5 rounds:

```shell
trip example.com --tcp -m dot -C 5
```

Generate a textual report of all tracing flows for a UDP trace after 5 rounds:

```shell
trip example.com --udp -m flows -C 5
```

Perform DNS queries using the `google` DNS resolver (or `cloudflare`, `system`, `resolv`):

```shell
trip example.com -r google
```

Lookup [AS][autonomous_system] information for all discovered IP addresses (not yet available for the `system` resolver,
see [#66](https://github.com/fujiapple852/trippy/issues/66)):

```shell
trip example.com -r google -z
```

Set the reverse DNS lookup cache time-to-live to be 60 seconds:

```shell
trip example.com --dns-ttl 60sec
```

Lookup and display `short` (or `long` or `location` or `off`) GeoIp information from a `mmdb` file:

```shell
trip example.com --geoip-mmdb-file GeoLite2-City.mmdb --tui-geoip-mode short
```

Parse `icmp` extensions:

```shell
trip example.com -e
```

Hide the IP address, hostname and GeoIp for the first two hops:

```shell
trip example.com --tui-privacy-max-ttl 2
```

Customize Tui columns (see [Column Reference](/reference/column)):

```shell
trip example.com --tui-custom-columns holsravbwdt
```

Customize the color theme:

```shell
trip example.com --tui-theme-colors bg-color=blue,text-color=ffff00
```

List all Tui items that can have a custom color theme:

```shell
trip --print-tui-theme-items
```

Customize the key bindings:

```shell
trip example.com --tui-key-bindings previous-hop=k,next-hop=j,quit=shift-q
```

List all Tui commands that can have a custom key binding:

```shell
trip --print-tui-binding-commands
```

Specify the location of the Trippy config file:

```shell
trip example.com --config-file /path/to/trippy.toml
```

Generate a template configuration file:

```shell
trip --print-config-template > trippy.toml
```

Generate `bash` shell completions (or `fish`, `powershell`, `zsh`, `elvish`):

```shell
trip --generate bash
```

Generate `ROFF` man page:

```shell
trip --generate-man
```

Use the `de` Tui locale:

```shell
trip example.com --tui-locale de
```

List supported Tui locales:

```shell
trip --print-locales
```

Set the Tui timezone to `UTC`:

```shell
trip example.com --tui-timezone UTC
```

Run in `silent` tracing mode and output `compact` trace logging with `full` span events:

```shell
trip example.com -m silent -v --log-format compact --log-span-events full
```

---

## File: docs/src/content/docs/guides/windows_firewall.md

---
title: Windows Defender Firewall
sidebar:
  order: 4
---

The Windows Defender firewall rule can be created using PowerShell.

```shell
New-NetFirewallRule -DisplayName "ICMPv4 Trippy Allow" -Name ICMPv4_TRIPPY_ALLOW -Protocol ICMPv4 -Action Allow
New-NetFirewallRule -DisplayName "ICMPv6 Trippy Allow" -Name ICMPv6_TRIPPY_ALLOW -Protocol ICMPv6 -Action Allow
```

The rules can be enabled as follows:

```shell
Enable-NetFirewallRule ICMPv4_TRIPPY_ALLOW
Enable-NetFirewallRule ICMPv6_TRIPPY_ALLOW
```

The rules can be disabled as follows:

```shell
Disable-NetFirewallRule ICMPv4_TRIPPY_ALLOW
Disable-NetFirewallRule ICMPv6_TRIPPY_ALLOW
```

There is a [step-by-step guide to manually configure the Windows Defender firewall rule](https://github.com/fujiapple852/trippy/issues/578#issuecomment-1565149826).

---

## File: docs/src/content/docs/development/crates.md

---
title: Crates
---

The following table lists the crates that are provided by Trippy. See [crates](crates/README.md) for more information.

| Crate                                                         | Description                                                                         |
| ------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
| [trippy](https://crates.io/crates/trippy)                     | A binary crate for the Trippy application and a library crate                       |
| [trippy-core](https://crates.io/crates/trippy-core)           | A library crate providing the core Trippy tracing functionality                     |
| [trippy-packet](https://crates.io/crates/trippy-packet)       | A library crate which provides packet wire formats and packet parsing functionality |
| [trippy-dns](https://crates.io/crates/trippy-dns)             | A library crate for performing forward and reverse lazy DNS resolution              |
| [trippy-privilege](https://crates.io/crates/trippy-privilege) | A library crate for discovering platform privileges                                 |
| [trippy-tui](https://crates.io/crates/trippy-tui)             | A library crate for the Trippy terminal user interface                              |

---

## File: docs/src/content/docs/reference/bindings.md

---
title: Key Bindings Reference
sidebar:
  order: 3
---

The following table lists the default Tui command key bindings. These can be overridden with the `--tui-key-bindings`
command line option or in the `bindings` section of the configuration file.

| Command                    | Description                                     | Default   |
| -------------------------- | ----------------------------------------------- | --------- |
| `toggle-help`              | Toggle help                                     | `h`       |
| `toggle-help-alt`          | Toggle help (alternative binding)               | `?`       |
| `toggle-settings`          | Toggle settings                                 | `s`       |
| `toggle-settings-tui`      | Open settings (Tui tab)                         | `1`       |
| `toggle-settings-trace`    | Open settings (Trace tab)                       | `2`       |
| `toggle-settings-dns`      | Open settings (Dns tab)                         | `3`       |
| `toggle-settings-geoip`    | Open settings (GeoIp tab)                       | `4`       |
| `toggle-settings-bindings` | Open settings (Bindings tab)                    | `5`       |
| `toggle-settings-theme`    | Open settings (Theme tab)                       | `6`       |
| `toggle-settings-columns`  | Open settings (Columns tab)                     | `7`       |
| `next-hop`                 | Select next hop                                 | `down`    |
| `previous-hop`             | Select previous hop                             | `up`      |
| `next-trace`               | Select next trace                               | `right`   |
| `previous-trace`           | Select previous trace                           | `left`    |
| `next-hop-address`         | Select next hop address                         | `.`       |
| `previous-hop-address`     | Select previous hop address                     | `,`       |
| `address-mode-ip`          | Show IP address only                            | `i`       |
| `address-mode-host`        | Show hostname only                              | `n`       |
| `address-mode-both`        | Show both IP address and hostname               | `b`       |
| `toggle-freeze`            | Toggle freezing the display                     | `ctrl+f`  |
| `toggle-chart`             | Toggle the chart                                | `c`       |
| `toggle-map`               | Toggle the GeoIp map                            | `m`       |
| `toggle-flows`             | Toggle the flows                                | `f`       |
| `expand-privacy`           | Expand hop privacy                              | `p`       |
| `contract-privacy`         | Contract hop privacy                            | `o`       |
| `expand-hosts`             | Expand the hosts shown per hop                  | `]`       |
| `expand-hosts-max`         | Expand the hosts shown per hop to the maximum   | `}`       |
| `contract-hosts`           | Contract the hosts shown per hop                | `[`       |
| `contract-hosts-min`       | Contract the hosts shown per hop to the minimum | `{`       |
| `chart-zoom-in`            | Zoom in the chart                               | `=`       |
| `chart-zoom-out`           | Zoom out the chart                              | `-`       |
| `clear-trace-data`         | Clear all trace data                            | `ctrl+r`  |
| `clear-dns-cache`          | Flush the DNS cache                             | `ctrl+k`  |
| `clear-selection`          | Clear the current selection                     | `esc`     |
| `toggle-as-info`           | Toggle AS info display                          | `z`       |
| `toggle-hop-details`       | Toggle hop details                              | `d`       |
| `quit`                     | Quit the application                            | `q`       |
| `quit-preserve-screen`     | Quit the application and preserve the screen    | `shift+q` |

The supported modifiers are: `shift`, `ctrl`, `alt`, `super`, `hyper` & `meta`. Multiple modifiers may be specified, for
example `ctrl+shift+b`.

---

## File: docs/src/content/docs/reference/cli.md

---
title: CLI Reference
sidebar:
  order: 1
---

```
/* Detailed source-code truncated for AI context efficiency. */
```

:::note
Trippy command line arguments may be given in any order and my occur both before and after the targets. All options can
also be provided via environment variables using the `TRIP_` prefix (for example, `TRIP_PROTOCOL=tcp`). CLI flags take
precedence over environment variables when both are set.
:::