Skip to main content

epoxy-server

Performant server implementation of the Wisp protocol in Rust, made for epoxy.

You can view a recent flamegraph of the server under load here.

Building

[!IMPORTANT] Rust nightly is required.

cargo b -r

The executable will be placed at target/release/epoxy-server. You can optionally add the environment variable RUSTFLAGS="-C target-cpu=native" to optimize for the current CPU.

Configuration

epoxy-server is configured through a configuration file in either TOML, JSON, or YAML. Pass the configuration file's path as an argument to epoxy-server.

The defaults can be printed with the command line option --default-config and the configuration file format can be changed from the default of TOML with the command line option --format.

Arguments

ArgumentDescription
bindName of the created TUN device.
socketMTU (Maximum Transmission Unit) of the created TUN device.
transportIP address of the created TUN device.
resolve_ipv6Mask of the created TUN device (defaults to /0).
tcp_nodelayDestination of the created TUN device (defaults to 0.0.0.0).
verbose_statsUse Cloudflared access. URL must be specified. You must be logged into Cloudflared.
enable_stats_endpointWhether or not to respond to stats requests over HTTP.
stats_endpointPath of the stats HTTP endpoint.
non_ws_responseString sent in response to a request that is not a WebSocket upgrade request.
prefixPrefix of the WISP server. Do not add a trailing slash.
max_message_sizeMaximum WebSocket message size that can be received.
log_levelLog level for server logging.

The epoxy server docs were written largely by @r58playz.