Currently applications can only send binding suggestions to the runtime at startup, and have no way of checking where an action is bound or modifying the binding. Input rebinding can only be done on the runtime, but currently most runtime vendors do not seem willing to provide support for rebinding interfaces.
This means there is no generalized way of guaranteeing that users will be able to change the bindings. The only guaranteed way to provide multiple bindings is to create multiple redundant actions, and let the user toggle between them inside the application. This in turn causes the settings to be split up into multiple locations when a runtime binding interface is available, and will add multiple versions of each action into the binding interface with no way for the user to tell if it is active or not. This all makes for a bad user experience.
I’d like to see support for being able to implement the binding interface on the application side. That way the application can provide a way to rebind actions that doesn’t require support for binding interfaces on the runtime.
For basic support it seems like it would require functions for retrieving and updating action bindings, as well as detecting if a runtime binding interface is supported and allow triggering a save on it. Ideally functions would also be provided for retrieving 2D graphics of the controllers, as well as enhanced controller render models with the ability to highlight individual controls and locations for displaying tool tips.