# Packages
Package art provides a routing table that implements the Allotment Routing Table (ART) algorithm by Donald Knuth, as described in the paper by Yoichi Hariguchi.
Package captivedetection provides a way to detect if the system is connected to a network that has a captive portal.
Package connstats maintains statistics about connections flowing through a TUN device (which operate at the IP layer).
Package dns contains code to configure and manage DNS settings.
Package dnscache contains a minimal DNS cache that makes a bunch of assumptions that are only valid for us.
Package dnsfallback contains a DNS fallback mechanism for starting up Tailscale when the system DNS is broken or otherwise unavailable.
Package flowtrack contains types for tracking TCP/UDP flows by 4-tuples.
Package ipset provides code for creating efficient IP-in-set lookup functions with different implementations depending on the set.
Package ktimeout configures kernel TCP stack timeouts via the provided control functions.
Package memnet implements an in-memory network implementation.
Package netaddr is a transitional package while we finish migrating from inet.af/netaddr to Go 1.18's net/netip.
Package netcheck checks the network conditions from the current host.
Package neterror classifies network errors.
Package netkernelconf contains code for checking kernel netdev config.
Package netknob has Tailscale network knobs.
Package monitor provides facilities for monitoring network interface and route changes.
Package netns contains the common code for using the Go net package in a logical "network namespace" to avoid routing loops where Tailscale-created packets would otherwise loop back through Tailscale routes.
Package netstat returns the local machine's network connection table.
Package netutil contains misc shared networking code & types.
Package packet contains packet parsing and marshaling utilities.
Package ping allows sending ICMP echo requests to a host in order to determine network latency.
Package portmapper is a UDP port mapping client.
Package proxymux splits a net.Listener in two, routing SOCKS5 connections to one and HTTP requests to the other.
Package routetable provides functions that operate on the system's route table.
Package socks5 is a SOCKS5 server implementation.
Package sockstats collects statistics about network sockets used by the Tailscale client.
Package speedtest contains both server and client code for running speedtests between tailscale nodes.
Package STUN generates STUN request packets and parses response packets.
Package stunserver implements a STUN server.
Package tcpinfo provides platform-agnostic accessors to information about a TCP connection (e.g.
Package tlsdial generates tls.Config values and does x509 validation of certs.
Package tsaddr handles Tailscale-specific IPs and ranges.
Package tsdial provides a Dialer type that can dial out of tailscaled.
Package tshttpproxy contains Tailscale additions to httpproxy not available in golang.org/x/net/http/httpproxy.
Package tun creates a tuntap device, working around OS-specific quirks if necessary.
Package wsconn contains an adapter type that turns a websocket connection into a net.Conn.