# Examples

This directory contains code examples that use `tailscale-rs` from Rust.

## Requirements

For all the examples, you'll need:
- A working Rust development environment that meets the [MSRV](../README.md#msrv-and-edition)
- A [tailnet set up](https://tailscale.com/docs/how-to/quickstart) and Tailscale (the Go client)
installed on your local machine
- An [auth key](https://tailscale.com/docs/features/access-control/auth-keys) registered for the 
tailnet, referred to as `$AUTH_KEY` below
  - For one-off keys, **do not** follow the "Register a node with the auth key" section! The
examples take care of that for you
- A tailnet policy configured to allow access between your local machine and the example code

Also note the `TS_RS_EXPERIMENT=this_is_unstable_software` environment variable in all the examples
below; for an explanation, see [the Caveats section of the README](../README.md#caveats).

## Overview

Brief descriptions and links to each example.

### [Axum](axum)

An `axum`-based HTTP server that serves a simple webpage over the tailnet.

### [Peer Ping](peer_ping)

A UDP client that sends "hello" to a tailnet peer on a configurable interval.

### [TCP Echo](tcp_echo)

A TCP server that listens on the tailnet and echoes input back to the sender.

### [SSH Peer Lookup](ssh_peer_lookup)

A TUI app served over an in-process SSH server which allows you to query info about peers on your
tailnet.
