Skip to content

Shoes

Shoes is a high-performance multi-protocol proxy server written in Rust. Use it as a local HTTP or SOCKS5 proxy, accept connections from remote clients, or forward traffic through one or more upstream proxies. YAML configuration combines listeners, protocol stacks, routing rules, and DNS settings in one process.

  • Connect different proxy protocols. Configure server and client protocols independently, with TCP and QUIC transports where supported.
  • Route and chain traffic. Match IP addresses, CIDRs, or hostnames; build multi-hop chains; and select upstreams through reusable groups with load balancing or health checks.
  • Manage TLS and certificates. Route by SNI, use certificate pinning or mutual TLS, and share certificate sources with live file rotation or ACME renewal.
  • Handle DNS and transparent proxying. Configure DNS upstreams and fake-IP resolution, or use TUN on Linux, Android, and iOS. WireGuard provides userspace TCP/UDP client and server support on Unix without an OS TUN or host route changes.
  • Manage running services. Share named settings, reload configuration, and optionally use a Clash-compatible controller for upstream selection and connection monitoring.

Proxy protocols: HTTP/HTTPS, SOCKS5, mixed HTTP/SOCKS5, VMess AEAD, VLESS, Shadowsocks, Trojan, Snell v3, Hysteria2, TUIC v5, AnyTLS, and NaiveProxy.

Transports and wrappers: TLS, ShadowTLS v3, WebSocket, XHTTP / SplitHTTP, REALITY, XTLS Vision, and Sudoku TCP masking. H2MUX provides multiplexing for supported inner protocols.

Each protocol page describes its client/server support and composition constraints; not every protocol and transport can be combined.

This reference documents the source revision in the header. Development documentation can include features that are not yet available in a released binary.