> ## Documentation Index
> Fetch the complete documentation index at: https://docs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# GameInput on XBOX consoles

> Describes which GameInput API versions are available on XBOX consoles for each GDK release, and how to use newer versions with the NuGet package and sideloading.

On XBOX consoles, the GameInput runtime is part of the Microsoft Game Development Kit (GDK). It's included in the Game OS file (`GameOs.xvd`) from the GDK that's bundled with your title. The GameInput API versions that your game can use at runtime depend on the GDK release, the GameInput header and library that you compile with, and whether you deploy a GameInput runtime with your game.

There are two ways to use a newer GameInput API version on XBOX:

* **Update the GDK.** Each GDK release includes a GameInput runtime that supports a specific set of API versions.
* **Sideload the GameInput runtime.** Deploy the GameInput runtime from the [Microsoft.GameInput](https://www.nuget.org/packages/Microsoft.GameInput) NuGet package with your game to use a newer API version than your GDK supports.

In both cases, you must compile with the headers and library from the NuGet package to use API v1 or later.

## Supported API versions

The following table shows the API versions that are available for each GDK release.

| GDK release | GDK header and library | NuGet header and library | NuGet header and library, and sideloaded runtime |
| - | - | - | - |
| Earlier than October 2025 GDK (2510) | v0 | Not supported | Not supported |
| October 2025 GDK (2510) and later releases, before the October 2026 GDK | v0 | v0 through v3 | v0 through v4 |
| October 2026 GDK (2610) and later | v0 | v0 through v4 | v0 through v4 |

The GDK headers and library provide only the v0 API, regardless of the GDK release. The NuGet package isn't supported with GDK releases earlier than the October 2025 GDK.

## Use API v1 or later

To use API v1 or later, add the [Microsoft.GameInput](https://www.nuget.org/packages/Microsoft.GameInput) NuGet package to your project, and compile and link with its headers and `GameInput.lib` instead of the ones in the GDK. The major version of the NuGet package matches the highest API version that its headers define. For example, the 4.x package includes the v4 API. For more information, see [GameInput for PC and console with NuGet](https://docs.xbox.com/build/core-features/common/input/overviews/input-nuget.md).

You don't need to install anything else on the console. If you only link with `GameInput.lib` from the NuGet package, your game uses the GameInput runtime that's included with the GDK, and the API versions that the runtime supports are limited by the GDK release, as shown in the [Supported API versions](#supported-api-versions) table.

## Use API v4 with an earlier GDK

To use API v4 with a GDK release from the October 2025 GDK up to, but not including, the October 2026 GDK, sideload the GameInput runtime:

1. Add version 4.0 or later of the [Microsoft.GameInput](https://www.nuget.org/packages/Microsoft.GameInput) NuGet package to your project, and compile and link with its headers and `GameInput.lib`.
2. Deploy `GameInputRedist.dll` from the `native\bin\xbox\` directory of the package in the same directory as your game's executable.

Linking with `GameInput.lib` from the NuGet package isn't enough by itself. Without the sideloaded runtime, your game uses the runtime from the GDK, which doesn't support API v4 before the October 2026 GDK. In that case, requests for the v4 API fail with `E_NOINTERFACE`, and API versions v0 through v3 continue to work.

> [!WARNING]
>
> The NuGet package contains separate copies of `GameInputRedist.dll` for PC and XBOX. Deploy only the copy from `native\bin\xbox\` with your XBOX game. For more information, see [GameInput sideloading](https://docs.xbox.com/build/core-features/common/input/overviews/input-agility-redistributable.md).

## How the runtime is chosen

Sideloading the GameInput runtime is supported on XBOX consoles as well as on PC. On XBOX, when your game creates GameInput for the first time, `GameInput.lib` from the NuGet package compares the GameInput runtime in the Game OS that's bundled with your title with the sideloaded runtime, if one is deployed, and uses the runtime that has the higher version. As a result:

* A sideloaded runtime that's newer than the GDK runtime makes newer API versions and fixes available to your game.
* When your game moves to a GDK release that includes a newer runtime than the sideloaded one, your game uses the GDK runtime. You can keep deploying the sideloaded runtime, or remove it when it's no longer newer than the GDK runtime.

The PC-specific sideloading limitations, such as those for background input and input focus, don't apply on XBOX consoles. For more information about sideloading on both platforms, see [GameInput sideloading](https://docs.xbox.com/build/core-features/common/input/overviews/input-agility-redistributable.md).

## Check which API version is available

If your game requests an API version that the runtime doesn't support, GameInput fails with `E_NOINTERFACE`. This applies to both [GameInputCreate](https://docs.xbox.com/reference/input/gameinput/functions/gameinputcreate.md) and `QueryInterface`. If your game can run without the newest API version, check for this error and fall back to the features of an earlier version.

```cpp theme={null}
#include <GameInput.h>

GameInput::v4::IGameInput* gameInput = nullptr;
HRESULT hr = GameInput::v4::GameInputCreate(&gameInput);
if (hr == E_NOINTERFACE)
{
    // The GameInput runtime doesn't support API v4. Deploy the sideloaded
    // runtime with your game, or use an earlier API version.
}
```

To use more than one API version in your game, such as v0 code together with v4 code, see [Using multiple GameInput API versions in one application](https://docs.xbox.com/build/core-features/common/input/overviews/input-version-interop.md).

## See also

[GameInput for PC and console with NuGet](https://docs.xbox.com/build/core-features/common/input/overviews/input-nuget.md)\
[GameInput sideloading](https://docs.xbox.com/build/core-features/common/input/overviews/input-agility-redistributable.md)\
[GameInput API versioning](https://docs.xbox.com/build/core-features/common/input/overviews/input-versioning.md)\
[Using multiple GameInput API versions in one application](https://docs.xbox.com/build/core-features/common/input/overviews/input-version-interop.md)\
[GameInputInitialize](https://docs.xbox.com/reference/input/gameinput/functions/gameinputinitialize.md)


## Related topics

- [GameInput sideloading](https://docs.xbox.com/build/core-features/common/input/overviews/input-agility-redistributable.md)
- [GameInput for PC and console with NuGet](https://docs.xbox.com/build/core-features/common/input/overviews/input-nuget.md)
- [GameInput Frequently Asked Questions](https://docs.xbox.com/build/core-features/common/input/overviews/input-faq.md)
- [GameInputInitialize](https://docs.xbox.com/reference/input/gameinput/functions/gameinputinitialize.md)
- [GameInputUsage](https://docs.xbox.com/reference/input/gameinput/structs/gameinputusage.md)
