Getting started
About the app
How Psykotic works under the hood.
How it works
Psykotic builds a complete Xray configuration in a Rust core and hands it to the system:
- iPhone & iPad — a Network Extension packet tunnel (
NETunnelProviderManager) runs Xray-core in a separate process and reads packets directly from the TUN interface. - Android —
VpnServicecreates the tunnel; the app excludes itself from the VPN so there are no traffic loops. - Windows & Mac — Xray runs as a separate process, either as a full tunnel or as a system proxy. See Windows & Mac.
Psykotic is a client. It does not include servers and does not sell VPN access. You connect it to your own server or to a provider of your choice.
Protocols
VLESSRealityVisionVMessTrojanShadowsocksShadowsocks-2022Hysteria2
| Protocol | Details |
|---|---|
| VLESS | Reality, Vision, XHTTP, gRPC, WebSocket, HTTPUpgrade, mKCP |
| VMess | Legacy base64 and AEAD links |
| Trojan | TLS |
| Shadowsocks | SIP002, Shadowsocks-2022, legacy |
| Hysteria2 | hysteria2:// and hy2://, Salamander obfuscation, port hopping (port list or mport), pinSHA256, insecure |
Real latency test
Instead of only checking whether a port is open, Psykotic measures latency through each server: a temporary Xray instance opens a local entry for every server and requests https://www.gstatic.com/generate_204. Repeated requests over the same keep-alive connection give the clean round-trip time without handshakes.
- Best of three measurements, up to 8 servers in parallel, with retries
- A broken server config is isolated automatically — the rest are tested as usual
- Works while connected; results appear as they arrive
On iOS the app currently uses a TCP ping (connection time to the server’s port).
Current limitations
- Not supported yet: TUIC, WireGuard, Shadowsocks plugins, Clash / sing-box subscription formats
- Hysteria2 uses QUIC (UDP) — if your network blocks UDP, those servers won’t connect
- Changing the server or settings while connected reconnects the tunnel
- Full tunnel on desktop is Windows-only for now; Mac uses system proxy
- The iOS tunnel has a ~50 MB memory limit, so very large rule sets are not recommended