[1.2.0] InputPro - A Free Input Mapper for Roblox

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

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

Change log

Re-install the runtime to get touch gestures!

v1.2.0

  • New: Touch gestures. Add Tap, LongPress, or Swipe to any action from the Touch tab — no on-screen button required.
  • Tap fires BindPressed once when the player taps the screen. The callback gives you the position they tapped at.
  • LongPress fires BindPressed when the player starts holding and BindReleased when they lift. You get the start position, the end position, and how long they held.
  • Swipe fires BindPressed when the player touches down, then BindStateChanged on every move (with the current finger position), then BindReleased when they lift. You get the start position, end position, and duration — the direction is up to you to compute, great for cutting, drawing, or drag-to-aim mechanics.
  • Swipe tolerance is editable per binding (default 10 pixels). A finger that doesn’t move at least that far won’t fire anything, so a quick tap can’t accidentally trigger a Swipe.
  • Mouse right click bindings now actually fire. They were silently broken in earlier versions. Mouse left and middle were unaffected.
  • Existing keyboard, gamepad, and touch-button code keeps working — no changes needed.