vpn
Own network (dedicated plans): send all of the browser's traffic through your own VPN instead of a proxy.
Use it for: Dedicated-plan users who already run their own VPN (WireGuard, AmneziaWG, OpenVPN, sing-box): the whole browser, UDP included, leaves through it, so pages and WebRTC show the VPN's address.
Browsers: Google Chrome, Microsoft Edge, Brave, Opera, Naver Whale, Yandex Browser, Chromium, Patchright, Rebrowser, Camoufox, Firefox, WebKit.
Details
- Type:
string | object - Default: none
- Example:
{"vpn":"home-wg"}
The name of a VPN saved on the dashboard's Proxies → My VPNs page ("vpn": "home-wg"; the server looks the config up at launch, so no secret goes into your code), or the config itself: { "type": "wireguard" | "amneziawg" | "singbox" | "openvpn", "config": "<text>", "username": "…", "password": "…" }. config is a wg-quick .conf (WireGuard, AmneziaWG incl. Jc/Jmin/Jmax/S1–S4/H1–H4/I1–I5), a sing-box share link (vless:// incl. Reality, vmess://, trojan://, ss://, hysteria2:///hy2://, tuic://) or outbound JSON (also SSH), or an .ovpn file (username/password for OpenVPN auth). The launch returns once a real HTTPS request through the VPN has worked. All traffic, UDP included, uses the VPN; DNS only through it; IPv6 off; if the VPN drops, the session goes offline — our servers' IP is never used.
Dedicated plans only (403 vpn_requires_dedicated). Not with proxy, proxy_rules or a live swap (400 vpn_not_available). Config, username and password together up to 64 KB (400 invalid_vpn_config). A server that doesn't answer or refuses the credentials returns 400 vpn_connect_failed. Not billed. Keep the config out of your code: read it from a file or an environment variable. See Own network.
Used in
No case or recipe uses it yet; the code builder writes a program with it.
All options: launch options.