Skip to main content
Ryujinx provides comprehensive input support for various controller types, keyboard and mouse, touch input, and motion controls, ensuring you can play games the way you prefer.

Supported Input Devices

Ryujinx supports a wide range of input devices:

Game Controllers

Xbox, PlayStation, Nintendo, and generic controllers

Keyboard & Mouse

Full keyboard mapping with mouse support

Touch Input

Touch screen emulation for compatible displays

Motion Controls

Gyroscope and accelerometer emulation

Controller Types

Ryujinx emulates all official Nintendo Switch controller configurations:

Nintendo Switch Controllers

Pro Controller

The standard full-featured controller:
  • Full button layout
  • Dual analog sticks
  • Built-in motion controls
  • HD rumble support
  • Most compatible with games
Pro Controller mode is recommended for most games and works with any modern gamepad.

Controller Type Configuration

// From ControllerType.cs
public enum ControllerType
{
    ProController,      // Full controller (most common)
    Handheld,          // Portable mode
    JoyconPair,        // Dual Joy-Cons
    JoyconLeft,        // Single left Joy-Con
    JoyconRight,       // Single right Joy-Con
    Pokeball,          // Poké Ball Plus controller
}

Input Mapping

Ryujinx provides a comprehensive input configuration menu:

Configurable Inputs

Face Buttons

A, B, X, Y buttons with custom mapping

D-Pad

Up, Down, Left, Right directional pad

Shoulder Buttons

L, R, ZL, ZR triggers and bumpers

Analog Sticks

Left and right stick with deadzone control

System Buttons

Home, Capture, Plus, Minus buttons

Stick Clicks

L3/R3 stick press actions

Button Mapping Process

  1. Open OptionsSettingsInput
  2. Select your controller or create new profile
  3. Choose controller type (Pro Controller recommended)
  4. Click on a button to remap it
  5. Press the desired button/key on your input device
  6. Save the configuration
Ryujinx automatically detects most controllers. If your controller isn’t recognized, try connecting it in a different USB port or checking for driver updates.

Keyboard and Mouse Support

Full keyboard and mouse input is supported:

Keyboard Mapping

  • Any Key Assignment: Map any keyboard key to any Switch button
  • Multiple Keys: Assign multiple keyboard keys to the same button if desired
  • Modifier Support: Use with Shift, Ctrl, Alt combinations
  • Layout Independent: Works with any keyboard layout

Mouse Support

FeatureDescription
Motion ControlsMouse movement can emulate gyro motion
Button MappingMouse buttons can be mapped to controller buttons
Touch EmulationMouse clicks can emulate touch screen input
Camera ControlMouse can control right stick for camera
Keyboard and mouse is excellent for games that don’t rely heavily on motion controls. First-person games often work particularly well.

Motion Controls

Motion control support varies by input method:

Native Motion Support

DualShock 4

PlayStation 4 controllers have built-in gyroscopes that Ryujinx can use directly

DualSense

PlayStation 5 controllers offer excellent motion sensor support

Nintendo Pro Controller

Official Switch Pro Controllers have native motion support

Joy-Cons

Real Joy-Cons connected via Bluetooth provide authentic motion

Motion Control Helpers

For controllers without native motion:

CemuHook Protocol

Ryujinx supports the CemuHook motion protocol:
// From Motion/CemuHook/Client.cs
// Receives motion data from external sources
Compatible Tools:
  • DSU (DualShock UDP) servers
  • Phone apps (use your phone as a motion controller)
  • Third-party motion solutions
CemuHook allows you to use your smartphone as a motion controller by installing a compatible app.

Input Configuration

The input configuration system is highly flexible:

Configuration Features

FeatureDescription
ProfilesSave multiple input configurations
Per-Game SettingsDifferent controls for different games
Deadzone ControlAdjust stick sensitivity
Trigger ThresholdConfigure analog trigger activation point
Rumble StrengthAdjust vibration intensity
Motion SensitivityFine-tune gyro responsiveness

Deadzone Configuration

Deadzones prevent stick drift by ignoring small movements. If your controller has drift, increase the deadzone.
Adjustable deadzone settings:
  • Inner Deadzone: Minimum movement to register
  • Outer Deadzone: Maximum movement range
  • Per-stick Configuration: Different settings for each analog stick

Touch Screen Support

Emulates the Switch’s capacitive touch screen:

Mouse Touch

Click and drag with mouse to emulate finger touches

Touchscreen Display

Use actual touch screens on compatible devices

Touch Features

  • Multi-touch Support: Multiple simultaneous touch points
  • Gesture Recognition: Swipes, pinches, and drags
  • Pressure Sensitivity: Emulates touch pressure when supported
  • Touch Coordinates: Accurate position mapping
// From TouchScreenManager.cs
public class TouchScreenManager
{
    // Manages touch input state and translation
}

SDL3 Integration

Ryujinx uses SDL3 for cross-platform input handling:

SDL3 Advantages

  • Broad Compatibility: Supports hundreds of controller models
  • Hot-plugging: Connect/disconnect controllers during gameplay
  • Automatic Mapping: Database of controller layouts
  • Cross-platform: Consistent behavior on Windows, Linux, macOS
// From SDL3GamepadDriver.cs
public class SDL3GamepadDriver : IGamepadDriver
{
    // SDL3 gamepad implementation
}

Gamepad Features

Modern gamepad features supported:
FeatureSupport Status
HD RumbleEmulated via standard rumble
Analog TriggersFull analog support (Xbox triggers, etc.)
Button PressureSupported if hardware provides it
LED ControlPlayer indicator LEDs on compatible controllers
While Ryujinx emulates HD Rumble, standard rumble motors can’t reproduce the fine haptic detail of real Joy-Cons.

Multi-Controller Support

Play multiplayer games with multiple controllers:
  • Up to 8 Players: Full 8-player local multiplayer support
  • Mixed Input Types: Combine controllers and keyboards
  • Independent Configuration: Each player can have unique settings
  • Handheld + Controllers: One player on handheld, others on separate controllers

Input Manager

The input system architecture:
// From InputManager.cs
public class InputManager
{
    // Central input management
    // Handles all input sources
    // Routes to appropriate emulated controllers
}

Input Pipeline

  1. Input Device → Physical controller/keyboard/mouse
  2. SDL3 Driver → Raw input capture
  3. Input Manager → Maps to Switch controller
  4. NpadManager → Emulated controller state
  5. Game → Receives input as if from real Switch

Technical Details

Key source locations:
  • Input Core: src/Ryujinx.Input/
  • SDL3 Driver: src/Ryujinx.Input.SDL3/
  • HLE Input: src/Ryujinx.Input/HLE/
  • Motion Controls: src/Ryujinx.Input/Motion/
  • Configuration: src/Ryujinx.Common/Configuration/Hid/

Troubleshooting

  • Reconnect the controller
  • Check USB connection or Bluetooth pairing
  • Try a different USB port
  • Update controller firmware and drivers
  • Check if SDL3 recognizes it (test with SDL3 tools)
  • Open input configuration menu
  • Delete existing profile and create new one
  • Manually map each button
  • Check for controller-specific drivers conflicting
  • Verify your controller has a gyroscope
  • Enable CemuHook/DSU if needed
  • Check DS4Windows/BetterJoy is running
  • Test with a game that obviously uses motion
  • Increase motion sensitivity in settings
  • Increase deadzone in input settings
  • Clean controller analog sticks
  • Calibrate controller in system settings
  • Test controller in other applications
  • May need controller hardware repair
  • Check rumble is enabled in settings
  • Adjust rumble strength (may be set to 0)
  • Verify controller supports vibration
  • Some games don’t use rumble extensively
The input system receives regular updates to support new controllers and improve compatibility. Report any issues on the Ryujinx repository.

Build docs developers (and LLMs) love