Won't get you banned.

The five guarantees

  1. We never attach to Rocket League's process. No ReadProcessMemory, no WriteProcessMemory, no debugger API, no DLL injection.
  2. 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.
  3. We never buffer or replay input. Output is computed each frame from the most recent physical sample — no time travel, no scripting.
  4. We emit a standard Microsoft-signed virtual Xbox 360 controller via ViGEmBus. To the game it is indistinguishable from a wired pad.
  5. 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 observed

Run it from the app's Help → Run audit menu, or from a terminal as shown above.