tailcat

tailcat 0.7.0

like netcat, but over Tailscale's data plane, without Tailscale's control plane

Download for Windows

About tailcat

Tailcat is a remix of Tailscale open source pieces to act like netcat, but over Tailscale's data plane, without Tailscale's control plane. Tailscale's data plane (magicsock, internally) gives you point-to-point WireGuard®-encrypted tunnels between two machines with DERP as the NAT-hole-punching communication side channel and the ultimate relay-of-last-resort if NAT traversal fails. Instead of using the Tailscale control plane, all tailcat connection metadata is exchanged out of band, however you want.

What's new in 0.7.0

tailcat changelog

v0.7.0 (2026-09-19)
- --serve=exit-node servers now forward UDP flows; previously only
TCP was forwarded, so DNS, QUIC, and other UDP traffic through an
exit node went nowhere.
- Serving local ports works from Windows: the server resolves
localhost itself instead of using the hosts file, which Windows
ships without localhost entries, so the name no longer escapes to
real DNS servers. It also dials both 127.0.0.1 and ::1, reaching
services bound to only one loopback address. Official binaries also
no longer build with the netgo tag that forced Go's pure resolver
on Windows and macOS; they now use the operating system's resolver
there, like a default go build does.
(#108, reported
by @Sammy-T)
- tailcat cp now works with OpenSSH 8.7 through 8.9 clients, such
as Ubuntu 22.04's. Those versions still speak the legacy SCP
protocol unless scp -s asks for SFTP, which is all tailcat file
services accept, so copies failed. tailcat now checks whether the
installed scp understands -s and passes it when it does; older
clients without the flag are unchanged.
(#114, fixed in
#123 by
@BreezeDelegate)
- Go library: Server.Status() now includes a Peer entry per
connected client, with CurAddr and Relay to tell a direct path
from a DERP-relayed one.
(#116, reported
by @Mo3he)
- Go library: the new Server.Listen(ctx, network, address) serves
TCP and UDP ports in the standard net.Listener shape, as an
alternative to the OnTCP and OnUDP hooks; for UDP, each Accept
returns one client flow as a net.Conn. Listeners claim their
specific ports ahead of the wildcard hooks, and Listen starts the
server if it isn't running yet.
- tailcat forward takes an --open-browser flag that opens a web
browser to the forwarded local port; tailcat browse <tc-addr> is
an alias for tailcat forward --open-browser <tc-addr> 0:80.
- exec service: tailcat serve exec -- <command> runs the command
for each incoming connection with the connection as its stdin and
stdout, like inetd. With the ssh or no-auth-ssh service, the
command after -- instead replaces the shell for every session,
like OpenSSH's ForceCommand, with no shell, client-chosen command,
or SFTP offered.
- tailcat ssh to a DNS-named destination first probes the server the
way a stranger would, with no credentials, and refuses to connect if
the server hands out a shell to anyone, since an address published …

Full release notes »

Technical details

PublisherTailscale Inc.
Version0.7.0
Release date2026-09-19
LicenseBSD-3-Clause
Installer typezip
Architecturex64, arm64
Package IDTailscale.tailcat

Install tailcat from the command line

Install with Windows Package Manager
winget install --id=Tailscale.tailcat -e
Update to the latest version
winget upgrade --id=Tailscale.tailcat -e
Uninstall
winget uninstall --id=Tailscale.tailcat -e

tailcat adds this command to the command line: tailcat.

Install tailcat together with other apps in one command »

tailcat version history

0.4.0 Aug 31, 2026

Changelog

  • ce6fedc README: document Homebrew install for macOS
  • 79da910 tailcat: reject meows with a zero disco key
  • deece63 flake.nix, tool/updateflakes: keep the nix vendor hash fresh automatically
  • 2a48b15 tailcat: reject null regions and nodes in a ConnBlob
  • 4d50a34 cmd/tailcat: keep --version working as an unadvertised alias
  • 3748bfd cmd/tailcat: add an ls subcommand
  • c6dfb6b README: document receiving, sending, and serving files
  • 1730246 cmd/tailcat: add a recv subcommand
  • 0e377d7 cmd/tailcat: add a cp subcommand
  • 6e15eac tailcat: send the SSH exit-status before closing the sftp channel
  • 1bf70fa cmd/tailcat: add the files service and --files flag
  • 2bd0b26 tailcat: serve the SFTP subsystem, optionally rooted and access-limited
  • 0bf8f4e cmd/tailcat: omit an empty --key from the ssh ProxyCommand
  • 696590d cmd/tailcat: fix accidental revert of pipe_test.go "none" DERP URL
  • 3132331 cmd/tailcat: add a serve subcommand
  • 1fba818 tailcat: add tests for meow packet encoding and parsing
  • 4b057c4 cmd/tailcat: reject genkey --client --key=default as a likely mix-up
  • 9db9c6a cmd/tailcat: print requested help to stdout, not stderr
  • 0c2e011 cmd/tailcat: add examples and long help to the subcommands
  • 0d18092 cmd/tailcat: port the CLI to ff/v4 declarative commands
  • 7be233f tailcat, cmd/tailcat: support SSH on Windows
  • 16efa8c build-tags.txt: pin LF line endings, tolerate CRLF in the sync test
  • 1d77269 cmd/tailcat: don't leak test binaries to the system temp dir …

Frequently asked questions

Is tailcat free?

Yes. tailcat is free and open-source software released under the BSD-3-Clause license.

What is the latest version of tailcat?

The latest version is 0.7.0, released on Sep 19, 2026.

Is it safe to download tailcat?

The download button links to the official installer published on github.com, the same file Windows Package Manager installs. You can verify the downloaded file by comparing its SHA-256 checksum with f04cac07e3bf6c700b0b543df0d3315a3b312cd5a05ee76714e1cc848e9b2dff.

Which Windows versions does tailcat support?

tailcat runs on Windows and is available for 64-bit (x64), ARM64 systems.

How do I uninstall tailcat?

Open Settings › Apps › Installed apps, find tailcat and select Uninstall. From the command line, run winget uninstall --id=Tailscale.tailcat -e.

Is there a portable version of tailcat?

Yes. tailcat is available as a portable ZIP archive (tailcat_0.7.0_windows_amd64.zip, 64-bit (x64)) that runs without installation. Copy it to any folder or USB drive and run it from there.