Skip to main content
Rebind runs on Windows, macOS, and Linux, and the same scripts move between them. The core runtime and the namespaces most scripts use are identical on all three OSes: remapping (Bind) and the input hooks, Macro/Timer/Math/Net/File/JSON/Regex/Config/Process/System.Exec, UI/Log, and the Run/Sleep/After/Async globals. A few namespaces depend on OS-specific APIs and are limited or absent on some platforms. This page maps what runs where, and why.

System requirements

  • Windows: Windows 10 or 11, 64-bit.
  • macOS: Apple Silicon. Intel Macs are not supported.
  • Linux: x86_64.
The install page has the install command for each.

Platform support

The table below lists every namespace with platform-specific behavior. Everything not in the table is fully cross-platform. Software and hardware mode run the same scripts; neither changes this table: namespace availability is a property of the OS, not the transport. The one capability split between modes is mouse_block: suppressing or transforming mouse movement requires Rebind Link on Windows and macOS. Key, button, and scroll blocking work in both modes. Attaching a peripheral to the capture pipeline is not implemented on Linux yet; it works on Windows and macOS.
  • Screen samples pixels on Windows and macOS. On macOS reads come from a streamed frame while a script that uses Screen is loaded; on Windows each read is still a GDI call until the equivalent stream lands. On Linux, Screen.GetPixelColor, Screen.SearchForColor, Screen.Capture, and Screen.FindImage raise an error instead of returning fabricated pixels. Only Screen.List (display enumeration) is real on Linux.
  • Window is full on Windows. On macOS, enumeration (Find, List, FromPoint, GetForeground) plus Kill, IsActive, WaitActive, and WaitClose are real. Activate and Move work through the Accessibility grant Rebind already holds. Activate brings the owning app forward and raises that app’s focused window; Move targets the frontmost focused window (the handle is advisory) and can fail silently. GetTitle, GetPos, GetPID, IsVisible, Minimize, Maximize, Restore, and Close are not implemented on macOS and raise a “not supported” error. SetTitle, SetAlwaysOnTop, SetTransparency, GetClass, Hide, Show, and GetState also remain unsupported regardless of the Accessibility grant. Guard unsupported calls with pcall. Screen.WorkArea is Windows only. Read macOS window titles from the title field on Window.List entries; Window.Find returns a handle, not an entry. On Linux, window queries and actions requiring a native backend raise errors rather than returning empty results or reporting success.
  • Pipe (inter-process messaging) and Registry are Windows-only. They raise an error on macOS and Linux. Pipe support on macOS and Linux is planned.
  • Clipboard works on Windows and macOS. Get and Set raise an error on Linux. On supported platforms, Get still returns nil for an empty or non-text clipboard.
  • Dialog is native on Windows and macOS; on Linux it needs Zenity, KDialog, or YAD installed.
  • Linux input captures keyboards, mice, and trackpoints through evdev, but not touchpads. It sends relative movement through uinput, where libinput applies the desktop’s pointer settings. Choose a flat acceleration profile there if script-driven movement should be 1:1. HID.MoveTo and Input.GetMousePos have no pointer source on Linux in either mode.
  • App (application-level launch / focus / hide / quit) is full on macOS. On Windows, apps are named by executable (chrome or chrome.exe), Activate focuses a visible window of a running app without launching it, Quit closes the app’s windows (tray apps may keep running), and Hide and IsHidden raise an error. On Linux every App call raises; Process (exists / list / kill) still works there.
A script that supports some platforms only can say so with the platforms modeline key or [runtime] platforms in rebind.toml. Rebind refuses to load it elsewhere, at load time, with a message naming the declared list. _REBIND.platform reports the host OS for code that branches instead. If you target multiple platforms, guard the OS-specific calls. pcall catches the “not available” error a Windows-only namespace raises on macOS or Linux:
Continue with the Scripting Guide for hooks, input handling, and output.