HYSTERIA / RUSTGitHub ↗
Hysteria/Rust

QUIC transport · built in Rust

Move fast.
Stay in control.

Hysteria 2, rebuilt in Rust. High-speed TCP and UDP proxying over QUIC, with a safer core and a full cross-platform toolkit.

01 / The premise

Performance
without baggage.

An independent Rust port targeting compatibility with the original Hysteria 2 project ↗ and its upstream Go implementation — while taking advantage of Rust’s ecosystem and compile-time guarantees.

Read the project README →

02 / Capability matrix

The whole toolkit.

Rust 1.88 · MIT
01 / NETWORK

TCP / UDP proxying

High-speed traffic forwarding over a modern QUIC transport.

02 / PRIVACY

Salamander + Gecko

Obfuscation options for networks that fight back.

03 / ROUTING

ACL + Realm

Flexible outbounds, port mapping, and punching.

04 / SYSTEM

TUN + transparent

Platform-aware modes for deeper system integration.

05 / TLS

ECH + ACME

Encrypted ClientHello and automated certificates.

06 / OPERATIONS

Stats + speed tests

Know what your connection is actually doing.

03 / Install

One binary.
No runtime.

Download the binary for your platform, verify the adjacent SHA-256 checksum, then run it directly. Rust and Go are not required.

LINUX

x64 · ARMv7 · ARM64

GNU/Linux builds for servers, desktops, and ARM routers.

MACOS

Intel · Apple

Native x86-64 and Apple Silicon release binaries.

WINDOWS

x64 · ARM64

Standalone executables with TUN and WFP support.

04 / Platforms

7 release targets.

Full compatibility report ↗
PlatformArchitecturesProxy modesSystem integration
Linuxx64 · ARMv7 · ARM64SOCKS5 · HTTP · ForwardingTUN · TProxy · Redirect
macOSx64 · ARM64SOCKS5 · HTTP · ForwardingTUN
Windowsx64 · ARM64SOCKS5 · HTTP · ForwardingTUN · WFP strict route

Core QUIC, TCP/UDP, TLS, obfuscation, ACL, and Realm capabilities are shared across supported targets. Low-level routing features depend on operating-system APIs.

Built for real deployments

Ship anywhere.
Stay precise.

TARGETS

Linux · macOS · Windows
Release binaries included

GUARANTEES

Memory-safe core
Unknown fields rejected

See releases ↗

05 / Configuration

Two files.
One shared secret.

Start with these minimal YAML files. Replace the domain, certificate paths, and password before running them.

server.yaml
listen: :443

tls:
  cert: /etc/hysteria/server.crt
  key: /etc/hysteria/server.key

auth:
  type: password
  password: CHANGE_ME
client.yaml
server: example.com:443
auth: CHANGE_ME

tls:
  sni: example.com

socks5:
  listen: 127.0.0.1:1080

http:
  listen: 127.0.0.1:8080
listen

Server bind address and UDP port.

tls.cert / key

PEM certificate and private key paths.

auth

Must use the same password on both ends.

tls.sni

Should match the certificate domain.

Security note

Never deploy the example password. Use a long random secret, keep the private key readable only by the service account, and verify that the certificate covers the client SNI.

06 / First run

Ready when
you are.

Save the configurations, then start the server and client in their respective environments.

SERVER

hysteria server --config server.yaml

CLIENT

hysteria client --config client.yaml
SOCKS5 on 127.0.0.1:1080 · HTTP on 127.0.0.1:8080Get a release →

07 / FAQ

Good to know.

Is this an official Hysteria release?

No. This is an independent Rust implementation targeting interoperability with the original Hysteria 2 project and a pinned upstream Go commit.

Do I need Rust or Go on the server?

No. Download the correct release binary for your operating system and architecture, verify its SHA-256 file, and run it directly.

Which firewall port should I open?

Open the configured listen port for UDP. The minimal example uses UDP 443. Additional TCP ports may be needed when optional HTTP/HTTPS masquerade frontends or ACME challenges are enabled.

Can Rust clients connect to Go servers?

Yes. The repository includes mandatory real-binary interoperability tests in both directions for core TCP/UDP, ECH, and Salamander behavior.

Why was my configuration rejected?

The Rust parser deliberately rejects unknown fields instead of silently ignoring likely typos. Check field spelling and nesting against the examples.