This is free and open-source with the MIT license. See below.
Creating and managing UI for showing game controls has always been one of those tedious tasks that plagued development. Everyone knows they should add it, but there’s no easy way of going about it. Look no further, I have the definitive solution for you. Control Hints integrates seamlessly with Input Action System (IAS) to generate pretty control hints complete with industry-standard icons for PC, Xbox, and PlayStation.
Key Features
- IAS Compatibility: Works with the standard IAS setup (Context → Action → Binding).
- Xbox AND PlayStation: It’s time to grow up and include both in your game.
- Icons Included: Icons with consistent styling and resolution are included. Only for commonly-used keys. Icons are free-use and come from Kenney input prompts (search on Google).
- UI Included: Comes with pre-made no-frills UI that is production-ready and customizable.
- Easy Icon Grab: If you simply want to grab an icon asset ID, you can do that, hassle-free!
- Responsive UI: Optional feature to swap between solid and outlined icons based on InputAction state.
Try Me!
An open-source FPS demo experience is available to test the capabilities of Control Hints:
Control Hints: FPS - Roblox
Ready in Five Steps
- Grab the free model: Control Hints
- Look for “TestMe” under main module “ControlHints”
- Move “TestMe” to
StarterPlayerScripts - Group all InputContexts into a
Folder - Set the
inputContextsvariable in “TestMe” to your new folder
Dive into the main module (ControlHints.lua) for detailed docs on setup and APIs.
Example Folder Structure
Organize your folder like this:
- InputContext “Movement” (Enabled = true)
- InputAction “JumpAction”
- InputBinding “KeyboardJump” (KeyCode = Enum.KeyCode.Space)
- InputBinding “GamepadJump” (KeyCode = Enum.KeyCode.ButtonA)
- (Example Attributes of JumpAction: CustomName = “Jump”, CustomOrder = 1)
- InputAction “JumpAction”
The module auto-sorts and displays hints with matching icons. By default, the name of the InputAction is displayed, but this can be overridden with the CustomName attribute. The CustomOrder attribute can override auto-sort for the affected InputAction.
Note: A folder is not necessary in this module. You just need an array of InputContexts to give to the module.
Known Limitations
- No support for combined inputs (like A+B to awaken). But IAS also doesn’t support this, so whatever.
- Included icons are only for commonly-used keys. Things like numpad keys or function keys are excluded.
License
MIT License
Copyright (c) 2025 ZurichBT
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
If you integrate this into your project, I’d love to hear about it. I’m curious. By the way, reply to this post if you need support or are giving feedback.
For those who come after. resources community-resources open-source input-action-system ias control-hints ui-module keyboard-input gamepad-support xbox-icons ps-icons roblox-ui scripting player-input dynamic-hints key-bindings roblox-module mit-license dev-tools game-controls hud-elements

