Same mental model. A bigger runtime.
If you write AutoHotkey, you already think the way Rebind works: bind a key, transform an input, fire a hook, run a macro. Rebind's scripting language is Luau, a fast, typed member of the Lua family. The model carries straight over.
AutoHotkey is Windows-only and sends input at the software level. Rebind runs the same script on Windows, macOS, and Linux. With Rebind Link, output leaves a dedicated USB device as standard HID. The runtime is full-featured: a full SDK, real coroutines, built-in HTTP and WebSocket, and shared-memory IPC, all in one engine.
The full engine is free. Hardware isolation and the 8,000 Hz report rate come with Rebind Link.
AutoHotkey vs Rebind
AutoHotkey is excellent and free. This table is about reach and runtime, not quality.
| Capability | AutoHotkey | Rebind |
|---|---|---|
| Scripting language | AHK (v1 and v2), purpose-built | Luau: fast, typed, coroutines |
| Platforms | Windows only | Windows, macOS, Linux (same scripts) |
| Output method | Software-level (SendInput) | Software output free; USB HID from dedicated hardware with Rebind Link |
| Input capture | OS hooks | With Rebind Link, before the OS sees the event |
| Max output rate | OS event timing | Up to 8,000 Hz USB report rate with Rebind Link |
| Works across keyboard and mouse brands | Yes | Yes, no vendor lock-in |
| Built-in HTTP client | No (external libraries) | Yes: Net.Get, Net.Post |
| Built-in HTTP / WS server | No | Yes: Net.Listen, Net.WSListen |
| Shared-memory IPC | No | Yes: Pipe (Windows-only) for a Python or Node sidecar |
| Real coroutines | Limited | Yes: Run, Sleep, After, Async |
| Declarative UI panels | No | Yes: UI.Schema, Toggle, Slider, Keybind |
| Drive from other languages | Community | Official TS, Python, and Rust clients |
| Per-app targeting | Yes (#HotIf WinActive) | Yes (process= / window= modeline) |
| Pixel sampling, window control | Some | Yes: Screen, Window, Macro |
| Price | Free, open source | Free engine; optional Rebind Link |
CapsLock to Escape
AutoHotkey:
CapsLock::Escape
Rebind, the same remap, and it runs on macOS and Linux too:
-- rebind: name=CapsLock to Escape
-- rebind: version=1.0.0
-- rebind: min_sdk=3.0.0
Bind.Remap("CapsLock", "Escape")
Per-app hotkey
AutoHotkey:
#HotIf WinActive("ahk_exe Photoshop.exe")
^j::Send("^+s")
#HotIf
Rebind, where the modeline scopes the whole script, so there are no per-binding guards:
-- rebind: name=Photoshop Save As
-- rebind: version=1.0.0
-- rebind: min_sdk=3.0.0
-- rebind: process=Photoshop.exe
Bind("LCtrl+J", function()
HID.Combo("LCtrl+LShift+S")
return false
end)
When each one fits
Use AutoHotkey when you're on Windows only, want the deepest, most mature ecosystem of scripts and docs, and software-level output is all you need.
Use Rebind when you work across Windows, macOS, and Linux; want output from real hardware at up to 8,000 Hz; want a built-in HTTP/WebSocket runtime; or want to drive input from TypeScript, Python, or Rust.
Use both: keep your AutoHotkey setup on Windows and port the scripts you want portable or hardware-backed to Rebind.
Common questions
Can I run my exact AutoHotkey scripts in Rebind? No. Scripts are Luau, not AHK syntax. But the model is the same, porting is straightforward, and RebindGPT can draft a port from a plain-English description.
Does Rebind work on macOS and Linux? Yes. Remaps, binds, macros, text expansion, and HID output run on Windows 10/11, macOS on Apple Silicon and Intel, and Linux x86_64. A few deeper OS integrations are Windows-first today. The platform support matrix lists what each platform supports.