---
title: Tools
description: The go-iroh-tools repository — small Unix-style networking tools backed by go-iroh, from netcat-over-iroh to throughput measurement.
icon: toolbox
---

[`github.com/tmc/go-iroh-tools`](https://github.com/tmc/go-iroh-tools)
provides, in its README's words, "small Unix-style networking tools backed by
`github.com/tmc/go-iroh`". Where the [examples](examples) teach the API, these
are commands you install and use.

| Tool | Purpose |
| --- | --- |
| `giaddr` | print an iroh endpoint id, local address, endpoint address, and ticket |
| `gikey` | generate keys and inspect endpoint IDs |
| `gilisten` | listen on an iroh ALPN and bridge one stream to stdin/stdout, or echo |
| `ginc` | connect to an endpoint ticket and bridge stdin/stdout |
| `giping` | measure stream round-trip time against an iroh ping listener |
| `giperf` | measure iroh stream throughput |
| `gistat` | print connection statistics and path information |
| `giticket` | inspect, create, and shorten endpoint tickets |
| `girelay` | print and normalize relay URLs |

Several are listen/connect pairs: `gilisten` with `ginc`, and `giping`,
`giperf`, and `gistat` each have a `-listen` mode. In every case the address
the client takes is an endpoint ticket, not a host and port.

## Try a pair

From a checkout of the repository, run a listener in one terminal:

```sh
go run ./cmd/gilisten -echo
```

It prints an endpoint ticket. In another terminal — on the same machine or a
different one — connect to it:

```sh
go run ./cmd/ginc <endpoint-ticket>
```

The same shape works for measurement: `giping -listen` and `giperf -listen`
each print a ticket that the corresponding client command takes as its
argument.

## Next steps

- [Commands](commands) — the binaries the core module itself ships
  (`iroh`, `iroh-relay`, `iroh-dns-server`).
- [Examples](examples) — the runnable programs these tools grew out of.
- [Endpoints and connections](endpoints-and-connections) — the API underneath.
