Skip to main content
Your keyboard and mouse pass through Rebind: every event runs through your Luau script before the system sees it. You can start with no hardware: install, run a script in software mode, and have a working remap in a few minutes.

Install or update

Re-run this any time to update in place to the latest build. Windows: open PowerShell as Administrator and paste:
macOS / Linux: open Terminal and paste:
Linux users should read Linux setup for input device permissions, display-session requirements, and platform limits.

Sign in

The app is gated on an account. Open rebind.gg/link in a browser, sign in there, and paste the pairing code it gives you into the app. A linked device that is already activated signs you in on its own when you plug it in.

Your first script

Here is a complete script that remaps CapsLock to Escape. Open the Rebind UI, go to the Scripts tab, click New and choose New script, then paste it:
Click Save, then Run. Press CapsLock, and your system receives Escape. To work in VS Code or another external editor, see Editor setup.
The Rebind script editor showing a Luau script with a UI.Schema config, the script explorer, Save and Run buttons, and the RebindGPT assistant panel

The Scripts tab: your script files on the left, the editor with Save and Run in the middle, RebindGPT on the right.

Where scripts live. The Scripts tab edits real .lua / .luau files on disk, in your Rebind scripts folder:
  • Windows: %APPDATA%\Rebind\scripts
  • macOS: ~/Library/Application Support/Rebind/scripts
  • Linux: ~/.local/share/Rebind/scripts
Subfolders are fine for organization, edits made in an external editor are picked up live, and require() resolves modules relative to a script’s own folder.
How it reads:
  • The --[[ rebind: … --]] block at the top is the modeline: the script’s configuration. One rebind: line per setting usually reads best, but repeatable keys such as process= may share a line. A terse single-line -- rebind: key=value form works too.
  • min_sdk is required. It’s the minimum Rebind version the script needs, and Rebind refuses to run any bare script whose modeline doesn’t declare it (a script inside a package inherits it from rebind.toml). These examples use 3.0.0; a script that asks for a version newer than your installed build is refused until you update.
  • name= is the script’s display name. Every other modeline key is optional. See the SDK reference for the full list.
  • Bind.Remap(from, to) takes two key names: the key you press and the key that’s sent instead. It installs the remap for as long as the script runs.
If you prefer to act on the keypress yourself rather than declare a remap, handle the OnDown hook directly. It fires on every key press with the key name, and returning false blocks the original key from passing through:
Bind.Remap is the shorter path for a one-to-one remap; OnDown gives you room to add conditions and logic.

Kill switch

Press Left Ctrl + Left Alt + K at any time to immediately stop all scripts and release every held key, restoring normal keyboard and mouse behavior. (The kill switch is the left-hand modifiers specifically; right Ctrl / right Alt don’t trigger it.) Keep it in mind whenever you run a script that blocks input.