One SOCKS5 endpoint. Infinite upstream proxies.
A lightweight, cross-platform desktop proxy aggregator built with Tauri + Rust + React.
| 🏠 Home — Proxy Dashboard | ⚙️ Settings — Rotation & Port |
|---|---|
![]() |
![]() |
HydraGate exposes a single local SOCKS5 endpoint (127.0.0.1:10808 by default) and intelligently routes every connection through a pool of upstream SOCKS5 or HTTP/HTTPS proxies. Add as many proxies as you like — HydraGate handles health checking, rotation, and failover automatically.
Think of it as a proxy load-balancer for your desktop and mobile devices.
The most common pain point HydraGate solves. Chromium-based browsers (Chrome, Puppeteer, Playwright, Selenium with Chrome) do not support authenticated SOCKS5 proxies natively — the --proxy-server flag accepts a proxy address but has no mechanism to pass credentials. Launching Chrome with an authenticated proxy simply results in a 407 error or a credentials popup that automation can't handle.
HydraGate strips the auth layer — your upstream proxies can have usernames and passwords, but your local endpoint is credential-free. Point Chrome at 127.0.0.1:10808 and it just works.
# Playwright / Puppeteer
chromium --proxy-server="socks5://127.0.0.1:10808" https://example.com
# Puppeteer (Node.js)
const browser = await puppeteer.launch({
args: ['--proxy-server=socks5://127.0.0.1:10808']
});# Playwright (Python)
browser = playwright.chromium.launch(
proxy={"server": "socks5://127.0.0.1:10808"}
)
# Selenium (Python)
options = webdriver.ChromeOptions()
options.add_argument('--proxy-server=socks5://127.0.0.1:10808')
driver = webdriver.Chrome(options=options)When scraping websites, getting blocked by rate limits or IP bans is the #1 problem. HydraGate lets you load a pool of proxies and automatically rotates IPs on every request — without changing a single line of your scraper code.
Just point your HTTP client at 127.0.0.1:10808, and each connection transparently goes through a different upstream IP.
import requests
proxies = {"https": "socks5://127.0.0.1:10808"}
# Every request may go through a different upstream IP automatically
for url in urls_to_scrape:
response = requests.get(url, proxies=proxies)Use Round Robin mode for even distribution, or Least Latency for maximum scraping speed.
Many CLI tools, download managers, and legacy applications support SOCKS5 proxies but only without credentials. Examples include:
curl,wget,aria2c- Some torrent clients
- Database clients (DBeaver, TablePlus)
- API testing tools (Insomnia, older versions of Postman)
- Game launchers and update clients
HydraGate acts as an auth bridge — your tools connect to an unauthenticated local proxy, and HydraGate forwards through your password-protected upstream proxies.
# curl with no credential headaches
curl --socks5 127.0.0.1:10808 https://api.example.com
# wget
wget -e "use_proxy=yes" -e "socks_proxy=socks5://127.0.0.1:10808" https://example.com
# aria2c
aria2c --all-proxy="socks5://127.0.0.1:10808" https://example.com/file.zipInstead of routing all your traffic through a single proxy (a single point of failure and a single fingerprint), HydraGate spreads connections across multiple proxies simultaneously. Different websites see different IPs, making it much harder to correlate your activity.
Use Random or Round Robin mode for maximum IP diversity across sessions.
Some workflows require that all requests within a session appear to come from the same IP — e.g., logging into a website, OAuth flows, shopping cart sessions, or any site that ties a session cookie to an IP.
HydraGate's Time-Based Sticky mode keeps the same proxy for a 10-minute window, then automatically rotates to the next one. This gives you stable per-session identity without manual management.
Perfect for: account management bots, social media automation, e-commerce workflows.
When running load tests with tools like k6, locust, or wrk, all traffic originates from your single machine IP — which servers often detect and throttle. With HydraGate in front of your load tester, each virtual user's connections spread across your proxy pool, bypassing per-IP rate limits.
# locust + SOCKS5
import socks, socket
socks.set_default_proxy(socks.SOCKS5, "127.0.0.1", 10808)
socket.socket = socks.socksocketManaging multiple accounts on platforms that track IPs? Use HydraGate's Sticky mode to ensure each account's session always uses the same proxy across a time window, or manage your proxy pool manually to pin specific proxies to specific accounts by controlling which proxies are active.
Use cases: social media management agencies, e-commerce seller accounts, ad verification.
If you run a fleet of proxies and some go down unpredictably, HydraGate's automatic health checker removes dead proxies from rotation every 30 seconds — your application never even sees a failed connection due to a dead proxy. No manual monitoring required.
Ideal for: long-running bots, overnight scrape jobs, CI/CD pipelines that run browser tests.
If you have proxies in different countries, you can manage geographic routing by keeping only the relevant regional proxies active in your pool. Combined with Least Latency mode, HydraGate always routes through your fastest available geo-targeted proxy.
Use cases: ad verification (checking how ads appear in different countries), geo-restricted content access, international price monitoring.
| Use Case | Best Mode |
|---|---|
| Web scraping (max coverage) | 🔀 Round Robin |
| Web scraping (max speed) | ⚡ Least Latency |
| Session-based automation | 📌 Sticky |
| Privacy / fingerprint diversity | 🎲 Random |
| Load testing | ⚖️ Weighted |
| Headless browser automation | Any |
| Proxy failover / resilience | Any (auto-excludes dead proxies) |
- Add multiple upstream proxies — Supports SOCKS5 and HTTP/HTTPS (CONNECT)
- Protocol prefixing — Defaults to
socks5://but supportshttp://andhttps:// - Bulk import — paste multiple proxies at once (
[protocol://]host:port[:user:pass]format, one per line) - Live health status — each proxy is shown as 🟢 Online or 🔴 Offline
- Latency display — real-time measured latency (ms) shown per proxy
- Remove proxies individually at any time
- Background health checks run every 30 seconds automatically
- Connects to a test endpoint (
1.1.1.1:53) through each upstream proxy to verify it's alive - Measures round-trip latency for every proxy on each check cycle
- Dead proxies are automatically excluded from routing
Switch between rotation modes at any time — changes apply immediately to new connections:
| Mode | Description |
|---|---|
| 🔀 Round Robin | Cycles through all alive proxies in strict order. Guarantees even distribution. |
| 🎲 Random | Picks a random alive proxy on every new connection. Simple and unpredictable. |
| ⚡ Least Latency | Always routes through the proxy with the lowest measured latency. Best for speed. |
| ⚖️ Weighted | Probabilistic selection — lower latency = higher chance of being chosen. Balances speed and distribution. |
| ⏱️ Time-Based Sticky | All connections within a 10-minute window use the same proxy. Auto-rotates when the window expires — great for session stability. |
| 🎯 IP-Based Sticky | Hashes the target hostname — the same destination always routes through the same proxy, regardless of time. Ideal for per-site identity consistency. |
- One-click Start / Stop of the local SOCKS5 listener
- Live running indicator with animated status badge
- Configurable listen port (default:
10808, range:1024–65535) - Port changes take effect on next server start
- Total Proxies count
- Online (alive) proxies counter
- Offline (dead) proxies counter
- Auto-refreshes every 5 seconds
HydraGate is now available for Android! Take your proxy pool on the go.
- Native Integration: Built using Tauri's mobile capabilities.
- Local SOCKS5 Server: Runs a background service on your device, allowing other apps to route traffic through HydraGate.
- Battery Optimized: Efficient Rust backend ensures minimal battery drain during background proxying.
- Unified Experience: The same clean UI and rotation strategies as the desktop version.
Start HydraGate — the dashboard shows your proxy list and server status.
Click the "Add Proxy" button and enter your proxies in one of these formats:
# Without authentication
host:port
# With authentication
host:port:username:password
You can paste multiple proxies at once — one per line. HydraGate imports them all in a single click.
Example:
192.168.1.100:1080
http://proxy.example.com:8080:user:pass
proxy.example.com:1080:myuser:mypassword
10.0.0.5:3128:admin:secret
Once added, proxies are health-checked automatically. After a few seconds you'll see each proxy marked as:
- 🟢 Online with a latency reading (e.g.
42 ms) - 🔴 Offline if the proxy is unreachable
Click the "Start" button in the top-right corner. The button turns green with a pulsing indicator when the server is running.
Your local SOCKS5 endpoint is now live at:
127.0.0.1:10808
Point any application or browser to use the SOCKS5 proxy:
| Setting | Value |
|---|---|
| Proxy Type | SOCKS5 |
| Host | 127.0.0.1 |
| Port | 10808 (or your configured port) |
| Auth | None required |
Firefox example: Settings → Network Settings → Manual proxy → SOCKS Host: 127.0.0.1, Port: 10808
curl example:
curl --socks5 127.0.0.1:10808 https://ifconfig.meNavigate to the Settings tab (⚙️) and select your preferred rotation mode. The change is applied immediately to all new connections — no restart needed.
Choose which network interface the SOCKS5 server binds to:
| Option | Bind Address | Access |
|---|---|---|
| 🔒 Loopback (default) | 127.0.0.1 |
Only from this machine |
| 🌐 All Interfaces | 0.0.0.0 |
From any device on the local network |
⚠️ Warning: Using0.0.0.0exposes HydraGate to all devices on your network. Only use this in trusted environments.
Changes take effect on next server start. The current bind address is always shown in the header.
Configure which local port HydraGate binds to. Default is 10808.
- Must be between
1024and65535 - If the server is running, stop and restart it to apply the new port
- The current address is always shown in the header (
HOST:PORT)
See the 6 Proxy Rotation Strategies section above. All modes operate exclusively over alive proxies — dead ones are always excluded.
host:port
host:port:username:password
| Field | Required | Description |
|---|---|---|
host |
✅ | IP address or domain name of the upstream proxy |
port |
✅ | Port number of the upstream proxy |
username |
❌ | Username for authenticated SOCKS5 proxies |
password |
❌ | Password for authenticated SOCKS5 proxies |
- Local endpoint: Pure SOCKS5 (no-auth) listener on
127.0.0.1:<port> - Upstream protocol: SOCKS5 (with optional username/password auth)
- Address types supported: IPv4, IPv6, and domain names (SOCKS5 ATYP
0x01,0x03,0x04) - Transport: Full bidirectional TCP tunnel (
tokio::io::copy_bidirectional) - Concurrency: Each client connection is handled in its own async Tokio task
- Health checks: Every 30 seconds, all proxies are probed and latencies measured
| Layer | Technology |
|---|---|
| Desktop/Mobile framework | Tauri v2 |
| Backend | Rust + Tokio (async runtime) |
| Proxy clients | tokio-socks + Native HTTP CONNECT |
| Frontend | React + TypeScript |
| UI components | Lucide React |
| Build tool | Vite |
| Mobile Bridge | JNI (Android) |
npm install
npm run tauri devnpm run tauri buildThe compiled installer will be in src-tauri/target/release/bundle/.
MIT — built with ❤️ by Samir Djelal


