Routes Free Fire's UDP traffic through a SOCKS5 proxy that holds all packets for a configurable window, then dumps them all at once (burst release).
Now with TCP passthrough: TCP connections are tunneled in real-time without queueing.
Free Fire App
↓
SocksDroid (intercepts all traffic, no root)
↓
This proxy on 127.0.0.1:1080
├─→ TCP: real-time passthrough (no burst)
└─→ UDP: BURST HAPPENS HERE
↓
Free Fire Game Servers
pkg update && pkg upgrade
pkg install nodejs
node --version # should be v18+cd udp-burst-proxy
npm installnpm start -- --port 1080 --hold 2000Every --hold ms, all queued UDP packets are released simultaneously.
TCP connections tunnel through in real-time with no queueing or delay.
| Flag | Default | Description |
|---|---|---|
--port |
1080 |
SOCKS5 TCP port SocksDroid connects to |
--hold |
2000 |
How long (ms) to hold UDP packets before burst |
# Mild burst — 1 second hold
npm start -- --hold 1000
# Aggressive burst — 3 second hold (heavy packet dump)
npm start -- --hold 3000
# Different port
npm start -- --port 1234 --hold 20001. UDP packets arrive → queued in memory
2. Every --hold ms → all queued packets burst simultaneously
3. Affects both inbound (server → client) and outbound (client → server)
4. Result: rubber-banding, delayed hit registration, position jumps
1. TCP CONNECT request received → tunnel created immediately
2. Data flows bidirectionally with no queueing
3. Real-time communication (no delay)
4. Useful for control/signaling traffic
Both modes coexist: UDP uses burst logic, TCP bypasses it entirely.
- Install SocksDroid from APK (not on Play Store)
- Open SocksDroid → Add proxy:
- Host:
127.0.0.1 - Port:
1080(match your--port) - Type: SOCKS5
- Username/Password: leave empty
- Host:
- Toggle SocksDroid ON
- Open Free Fire → packets now burst through proxy
Port already in use
# Use a different port
tsx src/index.ts --port 1081 --hold 2000SocksDroid not connecting
- Make sure the proxy is running BEFORE toggling SocksDroid on
- Check Termux isn't being killed by battery optimization
- Disable battery optimization for Termux in Android settings
No packets showing in terminal
- SocksDroid must be ON and pointed at correct port
- Start Free Fire after proxy is running
- Some devices need SocksDroid to be granted VPN permission first
src/index.ts— Application entry pointsrc/server.ts— TCP server and SOCKS5 handshake handlersrc/connection.ts— Client connection handler (routes to TCP/UDP)src/queue.ts— UDP packet queue management and burst timer logicsrc/config.ts— Command-line argument parsingsrc/socks5/handler.ts— SOCKS5 protocol negotiation (auth, commands)src/socks5/constants.ts— SOCKS5 protocol constantssrc/relay/tcp-relay.ts— TCP bidirectional tunneling (NEW)src/relay/udp-relay.ts— UDP relay socket management
The proxy detects the SOCKS5 command and routes accordingly:
| Command | Mode | Behavior | Queueing |
|---|---|---|---|
0x01 CONNECT |
TCP | Bidirectional tunnel | None (real-time) |
0x03 UDP_ASSOC |
UDP | Relay with burst | Yes (hold + release) |
TCP Mode:
Client connects → SOCKS5 CONNECT → Tunnel created → Real-time data flow
UDP Mode:
Client connects → SOCKS5 UDP_ASSOC → Queue created → Hold packets → Burst release