See what is happening across your Tailscale network—and manage it—without leaving the terminal.
Tale puts your devices, routes, services, DNS, access rules, and audit activity in one keyboard-driven interface. It can inspect the Tailscale client on this machine, connect to the Tailscale API to work with the whole network, or do both at once.
Changes are never one accidental keypress away: Tale shows you what it is
about to do and asks for confirmation. Run it with --read-only when you do
not want the session to make any changes at all.
brew install ukashazia/tale/talecurl --proto '=https' --tlsv1.2 -LsSf https://github.com/ukashazia/tale/releases/latest/download/tale-installer.sh | shnix profile install 'tarball+https://github.com/ukashazia/tale/releases/latest/download/tale-nix-flake.tar.gz'The Nix download contains the release's prebuilt binaries. To pin a version,
replace releases/latest with releases/download/vX.Y.Z.
Homebrew and Nix installations include completions for Bash, Zsh, and Fish.
Debian, Ubuntu, Arch Linux, and source builds
For Debian or Ubuntu, download the .deb for your architecture from the
latest release, then run:
# x86_64 / amd64
sudo apt install ./tale_VERSION_amd64.deb
# ARM64
sudo apt install ./tale_VERSION_arm64.debOn Arch Linux, install the AUR package:
yay -S tale-bin
# or
paru -S tale-binTo build from a checkout with a stable Rust toolchain:
cargo install --locked --path .Start Tale:
taleThen:
- Press
:to choose where to go. - Open Local to inspect this machine, or Devices to see its peers.
- Press
/to filter a list andEnterto inspect the selected item. - Press
ato see the actions available for the current item.
Press ? whenever you need help, and q to quit.
Tale can use the Tailscale client already running on this machine without any
extra setup. To see and manage devices and settings across the whole network,
give Tale a Tailscale API credential. ops is simply a name for this login:
Create one in the Tailscale admin console: use a scoped OAuth client for ongoing access, or generate an API access token for a simpler setup.
tale auth add ops
tale --profile ops --read-onlyauth add asks for the network and credential details, then stores the secret
separately from your shareable configuration. Start with the smallest
permissions you need and keep --read-only enabled until you intend to make
changes.
On a machine without a local Tailscale client, skip local discovery:
tale --no-local --profile ops --read-onlyFor scripts, pass an access token through standard input instead of putting it on the command line:
printf '%s' "$TOKEN" |
tale auth add ops --tailnet TAILNET_ID --kind access-token --secret-stdin| Key | What it does |
|---|---|
: |
Choose a view |
/ |
Filter the current list |
Enter |
Inspect the selected item |
a |
Show available actions |
Tab / Shift-Tab |
Move between tabs |
[ / ] |
Go back or forward |
r / R |
Refresh this view or everything |
? |
Show help for the current view |
Esc |
Close or cancel the current prompt |
q |
Quit |
Actions that can destroy data always require typed confirmation.
Run tale config path to find your config.toml. You only need to add values
you want to change; Tale supplies the rest.
Here is a small starting point:
#:schema https://raw.githubusercontent.com/ukashazia/tale/main/docs/tale-config.schema.json
# Prevent this session from making changes.
read_only = true
[ui]
theme = "terminal" # tailscale-dark, tailscale-light, or terminal
mouse = false
time_zone = "local" # local or utc
[experimental_features]
saved_views = falseThe checked-in configuration schema documents
every setting and gives compatible editors completion and validation. Run
tale config check after editing the file.
Credentials do not belong in config.toml. Use tale auth add, which writes
them to a separate file with owner-only permissions. Never commit or share
that credential file.
Command-line flags override environment variables, which override
config.toml.
tale config path # show where Tale stores its files
tale config check # check the configuration for errors
tale config show # show the settings Tale will use
tale doctor # show a redacted report without changing anything
tale --no-local # run without a local Tailscale clientGenerate completions for your shell with:
tale gen-completions --shell "$SHELL"For every command and option, use tale --help or read the generated
tale(1) man page.
- If Tale cannot find Tailscale, start it with
--tailscale-path PATH. - If colors look wrong, start it with
NO_COLOR=1 tale. - If an interruption leaves the terminal looking unusual, run
resetin your shell.
Tale never uploads diagnostics automatically. To save a report that you can inspect before sharing, run:
tale doctor --output support.jsonEnter the pinned development environment and run the complete project checks:
nix develop
just checkAfter changing the command-line interface, regenerate the man page and shell completions:
cargo run --locked --bin generate-artifacts -- --output-dir .