Won't get you banned.
The five guarantees
- We never attach to Rocket League's process. No ReadProcessMemory, no WriteProcessMemory, no debugger API, no DLL injection.
- We never automate input. No auto-jump, no auto-flip-cancel, no auto-air-roll, no macros of any kind. Every button press is yours.
- We never buffer or replay input. Output is computed each frame from the most recent physical sample — no time travel, no scripting.
- We emit a standard Microsoft-signed virtual Xbox 360 controller via ViGEmBus. To the game it is indistinguishable from a wired pad.
- We ship an audit script. You can prove 1:1 passthrough at 1000 Hz on your own machine, any time.
Why BattlEye is fine with this
- BattlEye flags processes that read protected game memory, inject DLLs, hook game functions, or send synthesized HID events at unrealistic rates. RL HUB does none of these.
- ViGEmBus is a Microsoft WHQL-signed kernel driver. BattlEye sees a normal gamepad — same as Steam Input, DS4Windows, or reWASD.
- Millions of players run BattlEye-protected games (Rocket League, R6 Siege, DayZ, Arma) with this exact virtual-pad stack every day.
- The RL HUB process never opens a handle to RocketLeague.exe. Run Process Monitor and verify.
If you stack with other tools, watch out
- Do not run RL HUB alongside another virtual-pad emitter (DS4Windows, reWASD, JoyToKey). Two virtual pads cause double-input and may trip heuristic flags.
- Do not run macro recorders, AHK scripts, or any tool that synthesizes keyboard/controller input while playing.
- Do not run mod loaders, trainers, or anything that injects into RL. RL HUB will not protect you from those.
- Streaming overlays (OBS, Discord) are fine. They do not interact with input.
How to verify yourself
The app ships with an audit module that compares every physical sample to the emitted virtual sample at 1000 Hz. With no preset active, deltas must be exactly zero.
> python -m rl_hub.audit --duration 10
[ rl_hub.audit ] starting 1000 Hz passthrough check…
sample=0001 raw_x=+0.4231 out_x=+0.4231 Δ=0.0000
sample=0002 raw_x=+0.4187 out_x=+0.4187 Δ=0.0000
sample=0003 raw_x=+0.4102 out_x=+0.4102 Δ=0.0000
...
sample=9998 raw_y=-0.7714 out_y=-0.7714 Δ=0.0000
sample=9999 raw_y=-0.7720 out_y=-0.7720 Δ=0.0000
PASS — 10000/10000 samples bitwise-identical (no preset active)
PASS — no calls to Open/ReadProcessMemory observed
PASS — no DLL load into RocketLeague.exe observedRun it from the app's Help → Run audit menu, or from a terminal as shown above.