{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://ryujinx.org/_schema/config.json",
  "type": "object",
  "title": "Ryujinx Configuration Schema",
  "required": [
    "graphics_shaders_dump_path",
    "logging_enable_debug",
    "logging_enable_stub",
    "logging_enable_info",
    "logging_enable_warn",
    "logging_enable_error",
    "logging_enable_guest",
    "logging_enable_fs_access_log",
    "logging_filtered_classes",
    "enable_file_log",
    "system_language",
    "docked_mode",
    "enable_vsync",
    "enable_multicore_scheduling",
    "enable_fs_integrity_checks",
    "fs_global_access_log_mode",
    "enable_aggressive_cpu_opts",
    "controller_type",
    "enable_keyboard",
    "keyboard_controls",
    "gamepad_controls"
  ],
  "definitions": {
    "key": {
      "type": "string",
      "enum": [
        "ShiftLeft",
        "LShift",
        "ShiftRight",
        "RShift",
        "ControlLeft",
        "LControl",
        "ControlRight",
        "RControl",
        "AltLeft",
        "LAlt",
        "AltRight",
        "RAlt",
        "WinLeft",
        "LWin",
        "WinRight",
        "RWin",
        "Menu",
        "F1",
        "F2",
        "F3",
        "F4",
        "F5",
        "F6",
        "F7",
        "F8",
        "F9",
        "F10",
        "F11",
        "F12",
        "F13",
        "F14",
        "F15",
        "F16",
        "F17",
        "F18",
        "F19",
        "F20",
        "F21",
        "F22",
        "F23",
        "F24",
        "F25",
        "F26",
        "F27",
        "F28",
        "F29",
        "F30",
        "F31",
        "F32",
        "F33",
        "F34",
        "F35",
        "Up",
        "Down",
        "Left",
        "Right",
        "Enter",
        "Escape",
        "Space",
        "Tab",
        "BackSpace",
        "Back",
        "Insert",
        "Delete",
        "PageUp",
        "PageDown",
        "Home",
        "End",
        "CapsLock",
        "ScrollLock",
        "PrintScreen",
        "Pause",
        "NumLock",
        "Clear",
        "Sleep",
        "Keypad0",
        "Keypad1",
        "Keypad2",
        "Keypad3",
        "Keypad4",
        "Keypad5",
        "Keypad6",
        "Keypad7",
        "Keypad8",
        "Keypad9",
        "KeypadDivide",
        "KeypadMultiply",
        "KeypadSubtract",
        "KeypadMinus",
        "KeypadAdd",
        "KeypadPlus",
        "KeypadDecimal",
        "KeypadPeriod",
        "KeypadEnter",
        "A",
        "B",
        "C",
        "D",
        "E",
        "F",
        "G",
        "H",
        "I",
        "J",
        "K",
        "L",
        "M",
        "N",
        "O",
        "P",
        "Q",
        "R",
        "S",
        "T",
        "U",
        "V",
        "W",
        "X",
        "Y",
        "Z",
        "Number0",
        "Number1",
        "Number2",
        "Number3",
        "Number4",
        "Number5",
        "Number6",
        "Number7",
        "Number8",
        "Number9",
        "Tilde",
        "Grave",
        "Minus",
        "Plus",
        "BracketLeft",
        "LBracket",
        "BracketRight",
        "RBracket",
        "Semicolon",
        "Quote",
        "Comma",
        "Period",
        "Slash",
        "BackSlash",
        "NonUSBackSlash",
        "LastKey"
      ]
    },
    "input": {
      "type": "string",
      "enum": [
        "DPadUp",
        "DPadDown",
        "DPadLeft",
        "DPadRight",
        "LStick",
        "RStick",
        "LShoulder",
        "RShoulder",
        "LTrigger",
        "RTrigger",
        "LJoystick",
        "RJoystick",
        "A",
        "B",
        "X",
        "Y",
        "Start",
        "Back"
      ]
    }
  },
  "properties": {
    "graphics_shaders_dump_path": {
      "$id": "#/properties/graphics_shaders_dump_path",
      "type": "string",
      "title": "Graphics Shaders Dump Path",
      "description": "Dumps shaders in this local directory",
      "default": "",
      "examples": [
        "C:\\ShaderDumps"
      ]
    },
    "logging_enable_debug": {
      "$id": "#/properties/logging_enable_debug",
      "type": "boolean",
      "title": "Logging Enable Debug",
      "description": "Enables printing debug log messages",
      "default": false,
      "examples": [
        true,
        false
      ]
    },
    "logging_enable_stub": {
      "$id": "#/properties/logging_enable_stub",
      "type": "boolean",
      "title": "Logging Enable Stub",
      "description": "Enables printing stub log messages",
      "default": true,
      "examples": [
        true,
        false
      ]
    },
    "logging_enable_info": {
      "$id": "#/properties/logging_enable_info",
      "type": "boolean",
      "title": "Logging Enable Info",
      "description": "Enables printing info log messages",
      "default": true,
      "examples": [
        true,
        false
      ]
    },
    "logging_enable_warn": {
      "$id": "#/properties/logging_enable_warn",
      "type": "boolean",
      "title": "Logging Enable Warn",
      "description": "Enables printing warning log messages",
      "default": true,
      "examples": [
        true,
        false
      ]
    },
    "logging_enable_error": {
      "$id": "#/properties/logging_enable_error",
      "type": "boolean",
      "title": "Logging Enable Error",
      "description": "Enables printing error log messages",
      "default": true,
      "examples": [
        true,
        false
      ]
    },
    "logging_enable_guest": {
      "$id": "#/properties/logging_enable_guest",
      "type": "boolean",
      "title": "Logging Enable Guest",
      "description": "Enables printing guest log messages",
      "default": true,
      "examples": [
        true,
        false
      ]
    },
    "logging_enable_fs_access": {
      "$id": "#/properties/logging_enable_fs_access_log",
      "type": "boolean",
      "title": "Logging Enable FS Access Log",
      "description": "Enables printing FS access log messages",
      "default": true,
      "examples": [
        true,
        false
      ]
    },
    "logging_filtered_classes": {
      "$id": "#/properties/logging_filtered_classes",
      "type": "array",
      "title": "Logging Filtered Classes",
      "description": "Controls which log messages are written to the log targets",
      "items": {
        "type": "string",
        "enum": [
          "Application",
          "Audio",
          "Cpu",
          "Font",
          "Emulation",
          "Gpu",
          "Hid",
          "Kernel",
          "KernelIpc",
          "KernelScheduler",
          "KernelSvc",
          "Loader",
          "Service",
          "ServiceAcc",
          "ServiceAm",
          "ServiceApm",
          "ServiceAudio",
          "ServiceBsd",
          "ServiceCaps",
          "ServiceFriend",
          "ServiceFs",
          "ServiceHid",
          "ServiceIrs",
          "ServiceLdr",
          "ServiceLm",
          "ServiceMm",
          "ServiceNfp",
          "ServiceNifm",
          "ServiceNs",
          "ServiceNv",
          "ServicePctl",
          "ServicePl",
          "ServicePrepo",
          "ServicePsm",
          "ServiceSet",
          "ServiceSfdnsres",
          "ServiceSm",
          "ServiceSsl",
          "ServiceSss",
          "ServiceTime",
          "ServiceVi"
        ]
      }
    },
    "enable_file_log": {
      "$id": "#/properties/enable_file_log",
      "type": "boolean",
      "title": "Enable File Log",
      "description": "Enables logging to a file on disk",
      "default": true,
      "examples": [
        true,
        false
      ]
    },
    "system_language": {
      "$id": "#/properties/system_language",
      "type": "string",
      "title": "System Language",
      "description": "Change System Language",
      "default": "AmericanEnglish",
      "enum": [
        "Japanese",
        "AmericanEnglish",
        "French",
        "German",
        "Italian",
        "Spanish",
        "Chinese",
        "Korean",
        "Dutch",
        "Portuguese",
        "Russian",
        "Taiwanese",
        "BritishEnglish",
        "CanadianFrench",
        "LatinAmericanSpanish",
        "SimplifiedChinese",
        "TraditionalChinese"
      ],
      "examples": [
        "AmericanEnglish"
      ]
    },
    "docked_mode": {
      "$id": "#/properties/docked_mode",
      "type": "boolean",
      "title": "Enable Docked Mode",
      "description": "Enables or disables Docked Mode",
      "default": false,
      "examples": [
        true,
        false
      ]
    },
    "enable_discord_intergration": {
      "$id": "#/properties/enable_discord_intergration",
      "type": "boolean",
      "title": "Enable Discord Rich Presense",
      "description": "Enable or disable Discord Rich Presense",
      "default": true,
      "examples": [
        true,
        false
      ]
    },
    "enable_vsync": {
      "$id": "#/properties/enable_vsync",
      "type": "boolean",
      "title": "Enable Vertical Sync",
      "description": "Enables or disables Vertical Sync",
      "default": true,
      "examples": [
        true,
        false
      ]
    },
    "enable_multicore_scheduling": {
      "$id": "#/properties/enable_multicore_scheduling",
      "type": "boolean",
      "title": "Enable Multicore Scheduling",
      "description": "Enables or disables multi-core scheduling of threads",
      "default": true,
      "examples": [
        true,
        false
      ]
    },
    "enable_fs_integrity_checks": {
      "$id": "#/properties/enable_fs_integrity_checks",
      "type": "boolean",
      "title": "Enable Filesystem Integrity Checks",
      "description": "Enables integrity checks on Game content files. Only applies to ROMs loaded as XCI files",
      "default": true,
      "examples": [
        true,
        false
      ]
    },
    "fs_global_access_log_mode": {
      "$id": "#/properties/fs_global_access_log_mode",
      "type": "integer",
      "title": "Enable FS access log",
      "description": "Enables FS access log output. Possible modes are 0-3. Modes 2 and 3 output to the console.",
      "default": 0,
      "minimum": 0,
      "examples": [
        0,
        1,
        2,
        3
      ]
    },
    "enable_aggressive_cpu_opts": {
      "$id": "#/properties/enable_aggressive_cpu_opts",
      "type": "boolean",
      "title": "Enable Aggressive CPU Optimizations",
      "description": "Enable or disable aggressive CPU optimizations",
      "default": true,
      "examples": [
        true,
        false
      ]
    },
    "ignore_missing_services": {
      "$id": "#/properties/ignore_missing_services",
      "type": "boolean",
      "title": "Ignore Missing Services",
      "description": "Enable or disable ignoring missing services, this may cause instability",
      "default": false,
      "examples": [
        true,
        false
      ]
    },
    "controller_type": {
      "$id": "#/properties/controller_type",
      "type": "string",
      "title": "Controller Type",
      "default": "Handheld",
      "enum": [
        "Handheld",
        "ProController",
        "NpadPair",
        "NpadLeft",
        "NpadRight"
      ],
      "examples": [
        "Handheld",
        "ProController",
        "NpadPair",
        "NpadLeft",
        "NpadRight"
      ]
    },
    "enable_keyboard": {
      "$id": "#/properties/enable_keyboard",
      "type": "boolean",
      "title": "(HID) Keyboard Enable",
      "description": "Enable or disable direct keyboard access (HID) support (Provides games access to your keyboard as a text entry device).",
      "default": true,
      "examples": [
        true,
        false
      ]
    },
    "keyboard_controls": {
      "$id": "#/properties/keyboard_controls",
      "type": "object",
      "title": "Keyboard Controls",
      "required": [
        "left_joycon",
        "right_joycon"
      ],
      "properties": {
        "left_joycon": {
          "$id": "#/properties/keyboard_controls/properties/left_joycon",
          "type": "object",
          "title": "Left JoyCon Controls",
          "required": [
            "stick_up",
            "stick_down",
            "stick_left",
            "stick_right",
            "stick_button",
            "dpad_up",
            "dpad_down",
            "dpad_left",
            "dpad_right",
            "button_minus",
            "button_l",
            "button_zl"
          ],
          "properties": {
            "stick_up": {
              "$id": "#/properties/keyboard_controls/properties/left_joycon/properties/stick_up",
              "$ref": "#/definitions/key",
              "title": "Stick Up",
              "default": "w"
            },
            "stick_down": {
              "$id": "#/properties/keyboard_controls/properties/left_joycon/properties/stick_down",
              "$ref": "#/definitions/key",
              "title": "Stick Down",
              "default": "S"
            },
            "stick_left": {
              "$id": "#/properties/keyboard_controls/properties/left_joycon/properties/stick_left",
              "$ref": "#/definitions/key",
              "title": "Stick Left",
              "default": "A"
            },
            "stick_right": {
              "$id": "#/properties/keyboard_controls/properties/left_joycon/properties/stick_right",
              "$ref": "#/definitions/key",
              "title": "Stick Right",
              "default": "D"
            },
            "stick_button": {
              "$id": "#/properties/keyboard_controls/properties/left_joycon/properties/stick_button",
              "$ref": "#/definitions/key",
              "title": "Stick Button",
              "default": "F"
            },
            "dpad_up": {
              "$id": "#/properties/keyboard_controls/properties/left_joycon/properties/dpad_up",
              "$ref": "#/definitions/key",
              "title": "Dpad Up",
              "default": "Up"
            },
            "dpad_down": {
              "$id": "#/properties/keyboard_controls/properties/left_joycon/properties/dpad_down",
              "$ref": "#/definitions/key",
              "title": "Dpad Down",
              "default": "Down"
            },
            "dpad_left": {
              "$id": "#/properties/keyboard_controls/properties/left_joycon/properties/dpad_left",
              "$ref": "#/definitions/key",
              "title": "Dpad Left",
              "default": "Left"
            },
            "dpad_right": {
              "$id": "#/properties/keyboard_controls/properties/left_joycon/properties/dpad_right",
              "$ref": "#/definitions/key",
              "title": "Dpad Right",
              "default": "Right"
            },
            "button_minus": {
              "$id": "#/properties/keyboard_controls/properties/left_joycon/properties/button_minus",
              "$ref": "#/definitions/key",
              "title": "Button Minus",
              "default": "Minus"
            },
            "button_l": {
              "$id": "#/properties/keyboard_controls/properties/left_joycon/properties/button_l",
              "$ref": "#/definitions/key",
              "title": "Button L",
              "default": "E"
            },
            "button_zl": {
              "$id": "#/properties/keyboard_controls/properties/left_joycon/properties/button_zl",
              "$ref": "#/definitions/key",
              "title": "Button ZL",
              "default": "Q"
            }
          }
        },
        "right_joycon": {
          "$id": "#/properties/keyboard_controls/properties/right_joycon",
          "type": "object",
          "title": "Right JoyCon Controls",
          "required": [
            "stick_up",
            "stick_down",
            "stick_left",
            "stick_right",
            "stick_button",
            "button_a",
            "button_b",
            "button_x",
            "button_y",
            "button_plus",
            "button_r",
            "button_zr"
          ],
          "properties": {
            "stick_up": {
              "$id": "#/properties/keyboard_controls/properties/right_joycon/properties/stick_up",
              "$ref": "#/definitions/key",
              "title": "Stick Up",
              "default": "I"
            },
            "stick_down": {
              "$id": "#/properties/keyboard_controls/properties/right_joycon/properties/stick_down",
              "$ref": "#/definitions/key",
              "title": "Stick Down",
              "default": "K"
            },
            "stick_left": {
              "$id": "#/properties/keyboard_controls/properties/right_joycon/properties/stick_left",
              "$ref": "#/definitions/key",
              "title": "Stick Left",
              "default": "J"
            },
            "stick_right": {
              "$id": "#/properties/keyboard_controls/properties/right_joycon/properties/stick_right",
              "$ref": "#/definitions/key",
              "title": "Stick Right",
              "default": "L"
            },
            "stick_button": {
              "$id": "#/properties/keyboard_controls/properties/right_joycon/properties/stick_button",
              "$ref": "#/definitions/key",
              "title": "Stick Button",
              "default": "H"
            },
            "button_a": {
              "$id": "#/properties/keyboard_controls/properties/right_joycon/properties/button_a",
              "$ref": "#/definitions/key",
              "title": "Button A",
              "default": "Z"
            },
            "button_b": {
              "$id": "#/properties/keyboard_controls/properties/right_joycon/properties/button_b",
              "$ref": "#/definitions/key",
              "title": "Button B",
              "default": "X"
            },
            "button_x": {
              "$id": "#/properties/keyboard_controls/properties/right_joycon/properties/button_x",
              "$ref": "#/definitions/key",
              "title": "Button X",
              "default": "C"
            },
            "button_y": {
              "$id": "#/properties/keyboard_controls/properties/right_joycon/properties/button_y",
              "$ref": "#/definitions/key",
              "title": "Button Y",
              "default": "V"
            },
            "button_plus": {
              "$id": "#/properties/keyboard_controls/properties/right_joycon/properties/button_plus",
              "$ref": "#/definitions/key",
              "title": "Button Plus",
              "default": "Plus"
            },
            "button_r": {
              "$id": "#/properties/keyboard_controls/properties/right_joycon/properties/button_r",
              "$ref": "#/definitions/key",
              "title": "Button R",
              "default": "U"
            },
            "button_zr": {
              "$id": "#/properties/keyboard_controls/properties/right_joycon/properties/button_zr",
              "$ref": "#/definitions/key",
              "title": "Button Zr",
              "default": "O"
            }
          }
        },
        "hotkeys": {
          "$id": "#/properties/keyboard_controls/properties/hotkeys",
          "type": "object",
          "title": "Hotkey Controls",
          "required": [
            "toggle_vsync"
          ],
          "properties": {
            "toggle_vsync": {
              "$id": "#/properties/keyboard_controls/properties/hotkeys/properties/toggle_vsync",
              "$ref": "#/definitions/key",
              "title": "Toggle VSync",
              "default": "Tab"
            }
          }
        }
      }
    },
    "gamepad_controls": {
      "$id": "#/properties/gamepad_controls",
      "type": "object",
      "title": "GamePad Controls",
      "required": [
        "left_joycon",
        "right_joycon"
      ],
      "properties": {
        "enable": {
          "$id": "#/properties/gamepad_controls/properties/enable",
          "type": "boolean",
          "title": "Gamepad Enable",
          "description": "Enables or disables controller support",
          "default": true,
          "examples": [
            true,
            false
          ]
        },
        "index": {
          "$id": "#/properties/gamepad_controls/properties/index",
          "type": "integer",
          "title": "Gamepad Index",
          "description": "Controller Device Index",
          "default": 0,
          "minimum": 0,
          "examples": [
            0,
            1,
            2
          ]
        },
        "deadzone": {
          "$id": "#/properties/gamepad_controls/properties/deadzone",
          "type": "number",
          "title": "Gamepad Deadzone",
          "description": "Controller Analog Stick Deadzone",
          "default": 0.05,
          "minimum": -32768.0,
          "maximum": 32767.0,
          "examples": [
            0.05
          ]
        },
        "trigger_threshold": {
          "$id": "#/properties/gamepad_controls/properties/trigger_threshold",
          "type": "number",
          "title": "Controller Trigger Threshold",
          "description": "The value of how pressed down each trigger has to be in order to register a button press",
          "default": 0.5,
          "minimum": 0.0,
          "maximum": 1.0,
          "examples": [
            0.5
          ]
        },
        "left_joycon": {
          "$id": "#/properties/gamepad_controls/properties/left_joycon",
          "type": "object",
          "title": "Left JoyCon Controls",
          "required": [
            "stick",
            "stick_button",
            "dpad_up",
            "dpad_down",
            "dpad_left",
            "dpad_right",
            "button_minus",
            "button_l",
            "button_zl"
          ],
          "properties": {
            "stick": {
              "$id": "#/properties/gamepad_controls/properties/left_joycon/properties/stick",
              "$ref": "#/definitions/input",
              "title": "Stick",
              "default": "LJoystick"
            },
            "stick_button": {
              "$id": "#/properties/gamepad_controls/properties/left_joycon/properties/stick_button",
              "$ref": "#/definitions/input",
              "title": "Stick Button",
              "default": "LStick"
            },
            "dpad_up": {
              "$id": "#/properties/gamepad_controls/properties/left_joycon/properties/dpad_up",
              "$ref": "#/definitions/input",
              "title": "Dpad Up",
              "default": "DPadUp"
            },
            "dpad_down": {
              "$id": "#/properties/gamepad_controls/properties/left_joycon/properties/dpad_down",
              "$ref": "#/definitions/input",
              "title": "Dpad Down",
              "default": "DPadDown"
            },
            "dpad_left": {
              "$id": "#/properties/gamepad_controls/properties/left_joycon/properties/dpad_left",
              "$ref": "#/definitions/input",
              "title": "Dpad Left",
              "default": "DPadLeft"
            },
            "dpad_right": {
              "$id": "#/properties/gamepad_controls/properties/left_joycon/properties/dpad_right",
              "$ref": "#/definitions/input",
              "title": "Dpad Right",
              "default": "DPadRight"
            },
            "button_minus": {
              "$id": "#/properties/gamepad_controls/properties/left_joycon/properties/button_minus",
              "$ref": "#/definitions/input",
              "title": "Button Minus",
              "default": "Back"
            },
            "button_l": {
              "$id": "#/properties/gamepad_controls/properties/left_joycon/properties/button_l",
              "$ref": "#/definitions/input",
              "title": "Button L",
              "default": "LShoulder"
            },
            "button_zl": {
              "$id": "#/properties/gamepad_controls/properties/left_joycon/properties/button_zl",
              "$ref": "#/definitions/input",
              "title": "Button ZL",
              "default": "LTrigger"
            }
          }
        },
        "right_joycon": {
          "$id": "#/properties/gamepad_controls/properties/right_joycon",
          "type": "object",
          "title": "Right JoyCon Controls",
          "required": [
            "stick",
            "stick_button",
            "button_a",
            "button_b",
            "button_x",
            "button_y",
            "button_plus",
            "button_r",
            "button_zr"
          ],
          "properties": {
            "stick": {
              "$id": "#/properties/gamepad_controls/properties/right_joycon/properties/stick",
              "$ref": "#/definitions/input",
              "title": "Stick",
              "default": "RJoystick"
            },
            "stick_button": {
              "$id": "#/properties/gamepad_controls/properties/right_joycon/properties/stick_button",
              "$ref": "#/definitions/input",
              "title": "Stick Button",
              "default": "RStick"
            },
            "button_a": {
              "$id": "#/properties/gamepad_controls/properties/right_joycon/properties/button_a",
              "$ref": "#/definitions/input",
              "title": "Button A",
              "default": "B"
            },
            "button_b": {
              "$id": "#/properties/gamepad_controls/properties/right_joycon/properties/button_b",
              "$ref": "#/definitions/input",
              "title": "Button B",
              "default": "A"
            },
            "button_x": {
              "$id": "#/properties/gamepad_controls/properties/right_joycon/properties/button_x",
              "$ref": "#/definitions/input",
              "title": "Button X",
              "default": "Y"
            },
            "button_y": {
              "$id": "#/properties/gamepad_controls/properties/right_joycon/properties/button_y",
              "$ref": "#/definitions/input",
              "title": "Button Y",
              "default": "X"
            },
            "button_plus": {
              "$id": "#/properties/gamepad_controls/properties/right_joycon/properties/button_plus",
              "$ref": "#/definitions/input",
              "title": "Button Plus",
              "default": "Start"
            },
            "button_r": {
              "$id": "#/properties/gamepad_controls/properties/right_joycon/properties/button_r",
              "$ref": "#/definitions/input",
              "title": "Button R",
              "default": "RShoulder"
            },
            "button_zr": {
              "$id": "#/properties/gamepad_controls/properties/right_joycon/properties/button_zr",
              "$ref": "#/definitions/input",
              "title": "Button ZR",
              "default": "RTrigger"
            }
          }
        }
      }
    }
  }
}