[1.1.1] InputPro - Input mapping has never been easier

InputPro — A Visual Input Binding Editor for Roblox

InputPro is a Studio plugin that gives you a complete visual editor for Roblox’s Input Action System. Configure keyboard, gamepad, and touch bindings without writing a single line of config code.

Get InputPro on the Creator Store | Full Documentation | Free Runtime (GitHub)


What is it?

The Input Action System is powerful, but setting it up means manually creating InputContext, InputAction, and InputBinding instances — or writing a lot of boilerplate. InputPro replaces all of that with a visual editor inside Studio.

3 steps:

  1. Create contexts, actions, and bindings in the visual editor

  2. Click Export — the plugin generates all the instances + a bootstrap script

  3. Press Play — it just works


Features

Visual Binding Editor
  • Create and manage Input Contexts with priority and sink controls

  • Define Bool, Direction1D/2D/3D, and ViewportPosition actions

  • Bind keyboard keys and gamepad buttons with live listen mode — press a key and it’s bound instantly

  • Add bindings manually from a searchable dropdown

Touch Support

InputPro doesn’t generate touch UI — you design your own buttons, then link them to actions in the plugin. This gives you full control over your mobile UI while the runtime handles the wiring automatically.

Context System

Group actions into contexts like “Gameplay”, “UI”, “Vehicle”. Control priority (which context processes input first) and sink (block input from reaching lower contexts). Mark a default context to auto-enable on game start.

Code Generation

Select a LocalScript in the Explorer, go to Edit > Insert Code, pick an action, and the plugin generates BindPressed / BindReleased / BindStateChanged boilerplate directly into your script. The require line for InputProService is added automatically if missing.

Export & Bootstrap

File > Export Config creates the full instance hierarchy in StarterGui, auto-installs the runtime, and generates a bootstrap script — zero manual setup needed.

Additional Features
  • Analog trigger thresholds for R2/L2 (configurable pressed/released range)

  • Built-in help for reserved keys and action types

  • Full undo support via ChangeHistoryService

  • Session persistence — your work is saved across Studio sessions


Runtime API (Free & Open Source)

The runtime is free — your game doesn’t depend on a paid plugin at runtime. The plugin’s value is speed and convenience; the runtime works independently.

Install via the plugin (File > Install Runtime), download from GitHub, or add via Wally.

Quick Start Code

local InputProService = require(

game:GetService("ReplicatedStorage")

:WaitForChild("InputProRuntime")

:WaitForChild("InputProService")

)

-- Initialize from exported config

InputProService.Init("MyGameInput")

-- Bind events

InputProService.BindPressed("Jump", function()

print("Jump!")

end)

InputProService.BindStateChanged("Move", function(value)

-- value is a Vector2 for Direction2D actions

print("Move:", value)

end)

-- Switch contexts

InputProService.SetContext("UI", true) -- exclusive: disables all others

-- Auto-updating prompt hints

local hint = InputProService.CreatePromptHint("Interact", myButton, {

Corner = "TopRight",

Size = 28,

})

-- Shows "E" on keyboard, gamepad glyph on controller, hides on touch

API at a glance

Category Methods
Init Init(configName), InitManual()
Actions GetAction(name), BindPressed, BindReleased, BindStateChanged
Contexts SetContext(name, exclusive?), DisableContext(name), ContextChanged signal
Device GetActiveDevice(), ActiveDeviceChanged signal
Hints CreatePromptHint(action, parent, config?), GetInputImage(action, device?)
Manual CreateContext, CreateAction, CreateBinding — build configs entirely in code

No Plugin? No Problem.

You can use the runtime without the plugin by building input mappings in code:


InputProService.InitManual()

InputProService.CreateContext("Gameplay", 1, false)

InputProService.CreateAction("Gameplay", "Jump", Enum.InputActionType.Bool)

InputProService.CreateBinding("Jump", Enum.KeyCode.Space)

InputProService.CreateBinding("Jump", Enum.KeyCode.ButtonA)

InputProService.SetContext("Gameplay", true)

InputProService.BindPressed("Jump", function()

print("Jump!")

end)

A pre-built test config is available if you want to try the runtime without the plugin.


Links


Let me know if you have any feedback or find any bugs!

4 Likes

Change log

v1.1.0

Re-install the runtime to get mouse button icon support!

Added

  • Mouse button icons for GetInputImage and CreatePromptHint — custom glyph assets for MouseLeftButton, MouseRightButton, MouseMiddleButton

  • Toast hint when entering keyboard listen mode — reminds users that left click must be added via Browse mode

Fixed

  • Insert Code popup couldn’t be opened without a script selected — popup now opens freely, selection is checked only on insert

  • Explorer selection cleared on widget focus — now only clears during input listen mode, preserving selection for Insert Code

  • GetInputImage crashed on mouse button bindings — fixed with instance name lookup

Changed

  • Mouse button display names unified to MouseLeftButton / MouseRightButton / MouseMiddleButton across plugin UI, export, and runtime

  • Add Action button moved outside scroll area — always visible regardless of widget size

Change log

v1.1.1

Fixed

  • Mouse button bindings lost after closing and reopening the plugin — session now saves immediately after export

  • Importing a config dropped mouse button bindings — import now recognizes Keyboard_MouseLeftButton/Right/Middle instances