rebind is the command-line companion to the Rebind app: scaffold a package,
validate and lint it offline, run it against your local Rebind app with live logs and
hot-reload, then package and publish it. It installs with
Rebind and lands on your PATH, with no separate download.
check, lint, new, package, and preview work fully offline. run, exec, repl,
whoami, publish, import, export, and ui talk to the Rebind app, so it
must be running (and signed in, for whoami/publish).
Commands
[path] defaults to the current directory and accepts either a package
directory or a single .lua/.luau file.
new
rebind new tools/hello creates
a package named hello), lowercased.
The scaffolded rebind.toml carries a commented-out [marketplace] block
(summary, category, icon, media, and [marketplace.price]). The
README.md ships inside the .rbp and becomes the listing’s overview when you
publish.
check
Offline validation of the package contract: manifest schema and pricing rules, identity declarations, the fullrequire graph, Luau
compilation of every reachable module, and a permission audit.
The audit covers the two permissions the runtime enforces, net (Net.*) and
exec (System.Exec, System.ExecDetached). It compares uses against the
entry modeline, so a script that declares exec and forgets net fails here
instead of at runtime. Undeclared means all permissions, so for a script that
declares none there is nothing to contradict and the comparison is inert. A
package carrying a [marketplace] block is held to more: publish refuses an
undeclared set, so check fails it here rather than at upload. The
audit lexes the source, so a mention inside a string or comment is not a call,
but it does not resolve aliases (local n = Net; n.Get()).
lint
Advisory linting over the same require graph, with the Rebind standard library preloaded soHID, Log, hooks, and the rest of the SDK resolve.
Warnings never block anything; error-severity findings (definite bugs) exit
non-zero and block publish.
run
The dev loop: validates, loads the entry into the running Rebind app, streams the script’s log channel, and hot-reloads when a source file changes.Log.* output plus Rebind’s
lifecycle notices and errors for it. --all-logs streams every Rebind log line
(prefixed with its source) for app-wide debugging. Edits to .lua/.luau/
.toml files and anything under assets/ trigger a reload; a failing re-check
keeps the previous run alive.
rebind run scripts/wiggle.luau runs a single script from a package’s
scripts/ directory. It inherits the package’s min_sdk, and its requires
resolve from the package root.
exec and repl
Both run chunks in a persistent scratch runtime inside the Rebind app: the full SDK with real input output, state surviving between calls.rebind exec - reads the chunk from stdin. A Lua error exits non-zero.
rebind repl is the interactive version: same runtime, TAB completion queried
live from the VM (your own variables complete, not just SDK names), and
unfinished chunks continue on the next line. ⌃D exits.
package
Builds the.rbp registry artifact, a gzipped tarball of the package’s
plaintext source and assets. Format details are in
Package format.
--out <path> sets the output file. The default is <slug>.rbp in the current
directory.
publish
The script marketplace has not been released yet. Publishing requires a
Developer account, which is not yet publicly available.
- a package (
rebind.toml); a bare script has no listing to publish - a Developer account with a claimed
@handle - a
[marketplace]section withsummaryandcategory - a
[marketplace.price]table for a paid listing; omit it for a free listing - at least one screenshot
.pnginmedia; the first png becomes the cover - an optional 128x128
icon, separate from the cover and gallery
.rbp goes up first, followed by the cover, optional icon, and
remaining gallery items in declaration order. A README.md at the package root is sent as the listing’s
overview; without one the product page falls back to summary.
preview
Loads the package manifest and opens a self-contained local HTML approximation of its marketplace listing. It reads onlyrebind.toml, README.md, and local
media. No sign-in or running Rebind app is required.
rebind check before publishing for the complete package validation.
import and export
import installs a .rbp into the Rebind app’s scripts tree, under
scripts/packages/<name>/, with the name taken from the archive’s
rebind.toml. --overwrite replaces an existing install of the same package.
export is the inverse: it builds a .rbp from something already installed.
The path is relative to the scripts root. --out <path> sets the output file.
whoami
mcid is your registered Rebind Link with its live attachment state; transport
is the session mode (hardware when your device drives output, software
otherwise).
ui
Opens the Rebind control panel as its own window, using an installed Chromium browser’s app mode. With no Chromium browser, or with the app not yet answering, it opens an ordinary browser tab instead.--url defaults to http://127.0.0.1:19480 and must stay on loopback: the
app’s WebSocket guard only accepts localhost, 127.0.0.1, and ::1 origins.