JoystickPlugin provides joystick and steering wheel support (including force feedback) for Unreal Engine 4 and Unreal Engine 5, built natively for Unreal using SDL.
It integrates directly with Unreal’s Input System and Subsystem architecture, making it well-suited for simulation, racing, and hardware-driven projects that require reliable, low-level device access with minimal setup.
If you're building driving or simulation projects, JoystickPlugin pairs nicely with the VehicleTelemetryPlugin. Use JoystickPlugin for input and force feedback, and VehicleTelemetryPlugin to stream real-time vehicle data for HUDs, dashboards, logging, or external integrations.
Head to the Wiki for installation steps, feature breakdowns, and usage guides.
JoystickPlugin is designed specifically for Unreal Engine, rather than acting as a thin wrapper over SDL. This allows it to take full advantage of engine-native systems, including:
- 🔌 Unreal Subsystems for lifecycle management
- ⚙️ Project Settings integration
- ⌨️ Enhanced Input compatibility
- 🔧 Clean editor and runtime separation
The plugin currently supports Windows and Linux.
-
🎮 Native Unreal Input Integration
Hooks directly into Unreal’s input pipeline, including Enhanced Input. -
📬 Event-Driven Architecture
Clean, modular callbacks for device connection and input events. -
👤 Player & Device Mapping
Explicit control over which device is assigned to which player. -
💥 Force Feedback / Haptics
Trigger SDL-powered force feedback effects from gameplay logic. -
📡 Sensor Support
Access gyroscope and accelerometer data where supported by hardware. -
💡 Device LED Control
Dynamically control device LEDs at runtime. -
🗂️ Device Profiles
Load and apply per-device configuration presets. -
🌵 HID Reporting
Send HID Reports directly to a joystick device. -
⚙️ Runtime Configuration
Modify axis and button properties at runtime without restarting. -
🔍 Joystick Viewer / Debugger
Visual debugging tool to monitor real-time input from connected joysticks.
JoystickPlugin is not a direct port of an SDL wrapper. It is a ground-up Unreal-native implementation, focused on:
- 🎮 Unreal-first input handling
- 🧱 Engine subsystem lifecycle management
- 🛠️ Editor-friendly configuration via Project Settings
- 🌎 Cross-platform support with minimal boilerplate
This project builds on years of experimentation, forks, and community contributions across the Unreal and SDL ecosystems.
Thank you to all developers, testers, and open-source contributors who helped shape this plugin through code, issues, and feedback. Your work is preserved in the project history and genuinely appreciated.
Controller icons by Adib Sulthon
From Flaticon.com