mrkeyoor.com_
Thu 24 Sept 20:01 UTC
Self-Hostedevaluationupdated 26 Aug 2026

hysteria review

Hysteria 2 is a cross-platform proxy that carries TCP and UDP traffic over a customized QUIC connection. It is meant for unreliable, lossy, or censored networks, with client modes for SOCKS5, HTTP proxying, forwarding, TUN, and Linux transparent proxying. The main README is English, and official Chinese, Russian, and Persian documentation is also available.

+44stars / 7d
Verdict

Our Hysteria checkout installed 33 packages in 15 seconds and built in 7 seconds, but the harness found no test target, so the clean build is the only code-level check we completed. Use Hysteria 2 when ordinary proxy traffic struggles on a lossy UDP path and you can operate TLS, authentication, and network diagnostics yourself. Avoid it when UDP is blocked, background mobile behavior is critical, or your approval process requires an executed upstream test suite.

We ran it

Lab card: what happened when we ran hysteriaScreenshot of hysteria (hysteria.network)
Install✓ · 15s33 packages · 36 MB
Build✓ · 7s
Testsn/ano test script
Known vulns0(pip-audit)
Repo312 files~40,152 lines of source · 15.8 MB · 8 CI workflows · Dockerfile

Answers from our run

Does hysteria build from source?

Dependencies installed in 15 seconds (33 packages), and the build succeeded in 7 seconds. We cloned commit 619a6f8 into a clean Debian container with 3 CPUs and no project-specific setup.

Does hysteria have tests you can run?

Not through a standard command: the project exposes no test script or target that our harness could run.

Does hysteria have known vulnerabilities in its dependencies?

pip-audit found none in the dependency tree at the time of our run.

Who should not use hysteria?

Networks that block or heavily throttle UDP: Hysteria transports traffic over QUIC, so a TCP-only path defeats its core design.

What are the alternatives to hysteria?

Xray-core, shadowsocks-rust, WireGuard Go. Our Hysteria checkout installed 33 packages in 15 seconds and built in 7 seconds, but the harness found no test target, so the clean build is the only code-level check we completed.

Setup3/5Fast lab setup, but a real server needs TLS, UDP, and careful config
Docs5/5Server, client, TLS, modes, tuning, and translations are covered
Community4/522,383 stars with August 2026 releases and issue activity
Maturity4/5Version 2.12.2 is active; no test target was exposed to our harness

Discussed on

  1. hnHysteria: a powerful, fast and censorship resistant proxy92 points
  2. hnHysteria: A QUIC-Based Proxy Designed to Resist Censorship5 points
  3. hnHysteria: A proxy and relay tool optimized for lossy, unstable connections3 points

Who it’s for

Self-hosters who need a proxy across a lossy mobile or long-distance UDP path.
Network operators who can run a public server, manage TLS, and diagnose QUIC behavior.
Users who need SOCKS5, HTTP, TCP or UDP forwarding, TUN, or Linux TProxy from one client.
People in filtered networks who understand the local legal and account risks of operating a censorship-resistant proxy.

Who it’s NOT for

Networks that block or heavily throttle UDP: Hysteria transports traffic over QUIC, so a TCP-only path defeats its core design.
Administrators unwilling to manage a domain, TLS certificate, password, and UDP firewall rules: the recommended public-server setup requires them.
Users tempted to disable certificate verification without pinning: the client guide warns that insecure alone permits man-in-the-middle attacks.
Android users who need proven background reliability on every handset: issue 1365 reports idle disconnects and 5 to 10 second reconnection delays on one Samsung device.
Operators who require a repository-level test command in a fresh checkout: our harness found no tests script or target and therefore skipped tests.

Setup reality

Our sandbox installed 33 Python packages in 15 seconds and used 36 MB, then the detected build completed in 7 seconds. The harness found no test script or target, so tests were skipped. Pip-audit reported 0 known vulnerabilities. GitHub identifies Go as the primary repository language; our lab block classified the detected environment as Python, and we do not infer a cause for that mismatch.

The recommended server needs a public IP and domain, or the separate Realms NAT traversal path. Public deployment needs a password plus either ACME email and DNS, or your own certificate and key. Clients need the server address, matching authentication, and local proxy listeners.

Port 443 may require root or cap_net_bind_service. QUIC needs UDP reachability, bandwidth values must stay within the real link capacity, and self-signed TLS should use a trusted CA or a pinned SHA-256 fingerprint rather than unverified TLS alone.

QUIC is the point, so UDP quality decides the fit

Hysteria 2 is a proxy for TCP and UDP traffic built on a customized QUIC transport. Its client can expose SOCKS5 and HTTP proxy listeners, forward ports, create a TUN interface, or work through Linux TProxy. The project targets unreliable and lossy networks, where its congestion-control choices may behave differently from a conventional TCP proxy. If the path blocks UDP, none of that matters because the connection cannot use its intended transport.

The protocol can masquerade as standard HTTP/3 traffic. A server may proxy an ordinary website so HTTP requests receive plausible content instead of revealing an empty endpoint. The official guide says this section can be removed where censorship is irrelevant, in which case HTTP requests receive a 404 response. Masquerade is one piece of deployment behavior, not a promise that every filtering system will treat the traffic identically.

A public server needs a domain, TLS, and one UDP port

The recommended setup starts with a server that has a public IPv4 or IPv6 address and a domain pointing to it. A YAML file selects the listening address, authentication, certificate path or ACME settings, and optional masquerade target. Password authentication is the short example, while the README also names custom authentication, traffic statistics, and access control as integration points. Realms is the documented alternative when a server sits behind NAT without a public address.

Port 443 is the default. On Linux, the guide recommends granting cap_net_bind_service to the binary or running it with enough privilege to bind that port. The ACME example needs a domain and email address; the manual TLS path needs a certificate and private key. Firewall and provider rules must allow UDP on the chosen port.

What happened when we ran it

Our sandbox classified the detected environment as Python, installed 33 packages in 15 seconds, and left 36 MB on disk. The build completed successfully in 7 seconds. GitHub identifies Go as the repository's primary language, so the two classifications do not agree. The supplied lab log does not explain why. We are reporting both facts instead of turning the mismatch into a theory.

The harness found no test script or target, so it skipped tests. That means there is no passing or failing test count for this review. Pip-audit reported 0 known vulnerabilities among the 33 installed Python packages. The checkout contained 312 files, roughly 40,152 lines of source, and 15.8 MB of repository data. It also had 8 CI workflow files and a Dockerfile, but no tests directory.

Those results cover commit 619a6f8 in a fresh unprivileged Debian container with 3 CPUs and 8 GB of RAM. We did not operate a public Hysteria server, measure proxy speed, test censorship resistance, or compare congestion controllers.

Bandwidth and TLS values can make a valid config unsafe

The client guide asks for a server address, authentication value, bandwidth settings, and local listeners. It says higher bandwidth figures can backfire when they exceed the network's real capacity, producing congestion and unstable connections. Hysteria can use Brutal, BBR, or Reno congestion control; removing the bandwidth section selects the configured non-Brutal controller, with BBR as the documented default under the standard profile.

TLS deserves equal attention. A client using a private certificate can trust a supplied CA file. The alternative insecure: true disables verification, and the guide warns against using it alone because it permits interception. Adding pinSHA256 binds the connection to a certificate fingerprint. Sharing the generated connection URI also shares the password and settings inside it, so treat that URI as a credential rather than a harmless server address.

Issue 1656 shows how a QUIC timeout can hide an MTU error

Open issue 1656 documents an Android LTE path with MTU 1300 where a 1,280-byte QUIC payload became a 1,308-byte IPv4 packet. The local socket returned EMSGSIZE, and no packet left the phone, yet the client showed only a timeout about no recent network activity. The reporter reproduced the condition in an isolated Linux namespace and separated it from server failure or network filtering.

That report matters because generic timeouts encourage the wrong diagnosis. A user may change servers, certificates, or obfuscation while the local route cannot send the initial datagram. It is one open report against a particular commit and configuration, not proof that all low-MTU routes fail. Operators testing cellular or nested-tunnel paths should capture packets on both ends and inspect local socket errors before blaming censorship or the remote host.

Issue 1365 covers a different mobile concern. One Samsung Fold 6 user reported disconnection after about a minute idle and a 5 to 10 second reconnect after waking, despite disabling battery optimization in two client apps. The same report says an iPhone did not show the problem. Since third-party apps and operating-system behavior are involved, the issue does not isolate Hysteria itself. It does establish that background notification delivery needs device-specific testing.

Version 2.12.2 is current, with an active multilingual tracker

GitHub now resolves the requested apernet/hysteria path to HyNetworks/hysteria. It recorded 22,383 stars, 253 combined issues and pull requests, and a last push on August 23, 2026. Release app/v2.12.2 shipped the same day with a stateless-reset switch, Unix-socket support for masquerade proxy mode, and an IPv6 fix for mimic mode. Issue updates continued on August 24 in both Chinese and English.

Hysteria 2 earns a trial when a conventional proxy performs poorly on a lossy route and UDP remains usable. Its official documentation is detailed enough to expose the tradeoffs around certificates, bandwidth, masquerade, and privileges. The missing lab test target keeps us from giving the checkout a clean test verdict. Run it on the exact networks and phones that matter, because QUIC behavior is inseparable from their MTU, filtering, sleep policy, and UDP quality.

Alternatives

ProjectWhat it isPick it when
Xray-core gh↗A proxy platform with multiple transports and routing features.pick this instead when protocol choice and detailed routing matter more than Hysteria's QUIC-focused approach.
shadowsocks-rustA Rust implementation of the Shadowsocks encrypted proxy protocol.pick this instead when you want the simpler Shadowsocks ecosystem and do not need Hysteria's congestion controls.
WireGuard GoA userspace implementation of the WireGuard tunnel protocol.pick this instead when a general IP tunnel with standard WireGuard clients fits better than application proxy modes.

What people are saying

  1. [github-trending] apernet/hysteria

Sources

  1. Hysteria README
  2. Hysteria server guide
  3. Hysteria client guide
  4. Hysteria 2.12.2 release
  5. Issue 1656: low-MTU QUIC timeout report
  6. Issue 1365: Android idle disconnect report

More self-hosted reviews

autobrr · AgentENV · LibreChat · hosts · Atomic-Chat · omakade · the whole board →