[Client Beta] Input Action System is now available to publish in experiences!

Hi Creators,

We are thrilled to announce that the Input Action System (IAS) is now in Client Beta and can be published in your live experiences! :partying_face:

Thank you for all your feedback and excitement during our Studio Beta over the past couple of months. During Client beta, you’ll be able to publish experiences that use our InputAction, InputBinding, and InputContext instances.

Whether your experience has a few simple actions or dozens of layered gameplay mechanics, we highly recommend migrating to IAS to take advantage of its power and flexibility. Migrating to IAS is a game changer for building out-of-the-box cross-platform experiences. It unlocks:

  • Write once, play everywhere: Define a gameplay action (e.g., Shoot), a set of intended bindings, and it will automatically work across keyboard & mouse, gamepad, and touch with no extra code.
  • Automatic multi-input support: IAS seamlessly handles players who mix input devices, like connecting a gamepad on their PC or a keyboard with their tablet.
  • Future-proof your code: By abstracting actions from specific hardware, your game is ready to play on new platforms without you needing to rewrite your core logic.

For a full introduction to the system, you can read our original Studio Beta announcement here or check out our new step-by-step guide!


A Quick Refresher On IAS

IAS is designed as an abstraction layer to manage input bindings on actions, allowing you to write a single piece of code that works across all devices, simplifying cross-platform development. It introduces three new instances and one new enum:

  • InputAction: A gameplay mechanic (like Sprint or Shoot) that can be triggered by several hardware inputs.
    • Each action has an InputActionType that determines the type of input it reads in. We currently support Boolean, Direction1D, Direction2D, and Direction3D action types.
  • InputBinding: A hardware input (like W, ButtonA, or a touch button) that triggers an Action upon interaction. The inputs configured on a binding need to match the type of the action the binding is connected to.
  • InputContext: A group of related actions. You can enable, disable, and prioritize contexts (like DrivingContext vs. WalkingContext) based on game state.

This system enables you to build complex controls for a first-person shooter, a driving simulator, and more, with automatic binding of actions at runtime based on a player’s available input devices.

For a more detailed walk-through, check out our step-by-step guide on how to start building with IAS! You can also check out our sample placefiles below:

New Updates Since Our Studio Beta

In the past couple months, we’ve been hard at work addressing your feedback! Here are some notable new features we’ve added:

  • Mouse Keycodes for Boolean Action Types: You can now bind mouse inputs, such as MouseLeftButton, with boolean action types. This was a top request and makes triggering actions with mouse clicks seamless.
  • Direction3D Action Type: We’ve introduced a new action type, Direction3D, which allows you to capture multi-directional input in the XYZ space. This unlocks true 3D movement for actions like swimming, flying, or other advanced character mechanics.
  • Studio State Display: Actions now display their current state in the properties panel in Studio, making it easier to debug.

We’ve also fixed a number of bugs, listed below:

  • We fixed an issue with the Fire API that would only error with certain inputs.
  • We fixed an issue with IAS instances appearing gray in the Studio insert menu.
  • We updated the IAS instance icons in Studio to be compatible with both light and dark mode.
  • We fixed a bug where setting InputAction.Enabled = false would incorrectly disable other actions.

FAQs

  • Is Roblox sunsetting UIS?
    • No, we are not sunsetting or getting rid of UIS. UIS will continue to support other useful functionality like GetStringForKeyCode, PreferredInput, InputBegan/InputEnded, and other APIs. However, we strongly encourage you to move your action mapping and input bindings from UIS to IAS for a cleaner, more robust system.
  • Is Roblox sunsetting CAS?
    • Yes, we plan to sunset CAS in the future. Sunsetting means that your existing code will continue to work, but we will not make any changes to functionality, effectively deprecating the API for future use. All functionality that CAS supports will be supported by IAS before we sunset it. If you use CAS, we highly recommend migrating to IAS.
  • Do I need to use Contexts?
    • Although actions can exist outside of contexts, we highly recommend placing all your actions within an InputContext. This simplifies management, as you can enable or disable entire groups of actions at once, keeping your code clean and organized.

What’s Next?

This new Input Action System forms the foundation for platform-abstract, data-driven action mapping. Our long-term goal is for all actions within the Roblox ecosystem to flow through IAS, enabling more expressive developer intent and eventually player rebindings. We will continue to extend this system to help you build experiences that play well on all platforms and input devices.

:blue_heart: Made with love

A huge thank you to @NoUniqueAddress, @AykeriZero, @uiuxartist, and @MetaVars for all their hard work in building this system. And a huge thank you to you all for all your feedback that has helped us improve and expand IAS!

We can’t wait to see what you build with IAS! Let us know about your experience and if you encounter any issues or features you’d like us to add. Stay tuned for more!

143 Likes

This topic was automatically opened after 11 minutes.

This is awesome was waiting for so long and can publish games!

I do have a question will multi-key support also be worked on? As this feature is similar to Godot input system having the ability to mix and match keys like Control + Shift + K would be awesome to see!

–

26 Likes

Oh no, nononoonooon

IAS seems to have been designed for non programmers (while it’ll mostly be used by programmers) which I dislike a lot. I’m thinking about making a wrapper to not have to deal with the instances, but tbh it might be simpler to make the wrapper with CAS
I have a lengthy complaint here about counter arguments to the “benefits” of IAS, and other

However, I have not actually tried using it, and I will let other developers share their opinion on it

Also, does someone know how the instance thing will work with developers sharing modules and libraries that require inputs? Can theses instances be in replicated storage, or is creating them at runtime a viable solution?

27 Likes

Thank goodness, my current game uses IUS. And there really is no reason to deprecate it any time soon. It is the script way, just another way of adding detection for input.

Will there be a video on Roblox Learn how to use? How to use types other than bool?

7 Likes

I’m a little disappointed that this wasn’t changed that much. It seems a little silly to be using instances for something only the client can interact with. I can understand that it’s for simplicity reasons, but it doesn’t feel quite right. Overall I like it though. Hoping for user rebindings in the future!

11 Likes

FINALLY Roblox features a serious action binding system, which so far seems to be solid. The instance-based approach is good enough, as you can access those instances directly.
No more UIS shenanigans, nor CAS attempts to make better systems, thanks :+1:t2:

4 Likes

Yes, multi-key / modifier support is in the works.

25 Likes

Finally! Been waiting to use this for a while, client beta finally coming out is great.

Also, if anyone is interested in a more Godot-like menu, I’ve made one here:

3 Likes

Server replication and verification is one of the reasons we decided to use instances.

9 Likes

The only thing that would prevent me from using this over UIS is that there’s no ability to detect what UserInputType activated an action and/or limiting InputContexts to certain UserInputTypes. Would be super nice if this was possible, as it would allow me to make local multiplayer experiences with support for multiple gamepads on the same system, rather than having to make a complicated custom system from scratch using UIS

5 Likes

Is it possible to replicate the MouseButton1Click behavior (for buttons) with this? Or do I have to make a wrapper for this?

Which behavior I am talking about? When you press a button, and while is pressed you move out of it and then release the button.


Or do you recommend I just switch all to InputAction.Pressed for immediate feedback? I wanted to use InputAction.Released but either way it sounds weird on its own in terms of the naming. But the reason for using that one would be in case players press on something by mistake, they can just drag or move their mouse off the button.

1 Like

MouseLeftButton keycode is being triggered by my gamepads R2 button for some reason, its also being triggered by clicking (dragging camera) my mouse on the mobile device emulator, even tho it should be emulating a touch or swipe input. Could you guys look into these? seems like unintentional bugs

2 Likes

Handling, creating, and modifying instances still makes for far worse code. IAS needs to have a robust API system to create and manage these instances programatically.

6 Likes

Everything in IAS has an API and is scriptable.

6 Likes

Needing a separate context to have individual actions sink/pass makes this completely useless to me and worse then CAS :wilted_flower:
Also it being instance based makes it harder to work with not easier

1 Like

LeftMouseButton also has that very same behavior within ContextActionService, it’s definitely not a bug and something intentional that you should be accounting for in your code.

1 Like

I keep seeing this mentioned, but haven’t seen an in-depth explanation. Could explain what it being instance-based means implementation-wise, what would be better, and why?

5 Likes

One thing I’m Confused about is, wouldn’t this be more Performance costly on the client-side because for every input action you gotta connect at least 1-3 Events and isn’t that bad, for performance, unlike UIS where I just do InputBegan and a bunch of if-statements.

2 Likes