If you’ve written AutoHotkey, Rebind will feel familiar: you bind keys, send input, react to windows, and loop over time. The differences are that scripts are Luau (a fast, typed Lua) instead of AHK syntax, they run on Windows, macOS, and Linux, and their output can come from real USB hardware instead of a software Send.

How concepts map

Side by side

A remap and a hotkey that types text:
Scope a script to one application:

What’s different

  • A required header. Unlike AHK, every Rebind script needs a modeline declaring the Rebind version (min_sdk) before it will run — Rebind refuses a script without it. The rest of the header (name, process= targeting) is optional. See Modeline.
  • Sending input yields. HID.Type and HID.Press sleep between keystrokes, and Net.* requests block, so they must run inside a Run() / Async() coroutine — not directly in a plain Bind/OnDown callback.
  • Cross-platform. The same script runs on Windows, macOS, and Linux. AutoHotkey is Windows-only.
  • Hardware output. In hardware mode your HID.* calls leave the Rebind Link as standard USB HID, with deterministic timing — not a software SendInput. The same script runs free in software mode first; see How it works.
  • A typed language. Luau brings types, coroutines, and a real standard library. Sequences and delays use Run/Sleep instead of SetTimer/Loop.
  • More reach. Beyond remaps and macros, Rebind adds an HTTP and WebSocket server, shared-memory IPC, and remote clients for TypeScript, Python, and Rust — so other programs can drive input directly. See Remote control.
AutoHotkey has a deep Windows GUI and COM surface that Rebind doesn’t replicate — Rebind is about transforming input, not building desktop apps. For everything input-related, the Scripting guide and SDK reference are your next stops.