rvy/rir3

sync studio output to cli and also allow studio code execution from cli

rir3

Execute Luau scripts in Roblox Studio from your terminal.

Installation

pesde add rvy/rir3

Overview

Run scripts in Roblox Studio and see output in your terminal with color-coded prints, warnings, and errors. Uses WebSockets for communication between CLI and Studio.

Usage

Once Mode

Execute a script one time. Studio opens temporarily and closes after execution.

# Basic execution
rir3 once script.luau

# With place file
rir3 once script.luau --place game.rbxl

# With sourcemap (preserves stack traces)
rir3 once script.luau --place game.rbxl --sourcemap sourcemap.json

Serve Mode

For running multiple scripts without restarting Studio.

Setup (first time only):

rir3 build

Start server:

rir3 serve

Execute scripts (in another terminal):

# Basic execution
rir3 exec script.luau

# With sourcemap
rir3 exec script.luau --sourcemap sourcemap.json

Context Targeting

Target specific runtime contexts when using serve mode. Running tests in studio will automatically connect VMs, and exec will let you target VMs with flags.

# Run in Studio edit mode only
rir3 exec script.luau --studio 1 --running 0

# Run in client only
rir3 exec script.luau --client 1

# Run in server only
rir3 exec script.luau --server 1

# Exclude edit mode
rir3 exec script.luau --edit 0

Available environments:

  • --studio - Studio environment
  • --server - Server runtime
  • --client - Client runtime
  • --edit - Edit mode (not running)
  • --running - Play mode (game running)

Omit a flag to match any value. Use 1 to require it, 0 to exclude it.

Log Filtering

Control which logs are shown in your terminal:

# Suppress warnings
rir3 once script.luau --no-warn

# Suppress errors (still sets exit code on error)
rir3 exec script.luau --no-error

# Suppress all output
rir3 once script.luau --no-output

# Suppress all logs entirely
rir3 exec script.luau --no-logs

Available flags:

  • --no-warn - Hide warning messages
  • --no-error - Hide error messages
  • --no-info - Hide info messages
  • --no-output - Hide print output
  • --no-logs - Disable all log capture (most efficient)

Return Values

Scripts can return values that will be printed to stdout:

# Capture return value
result=$(rir3 once script.luau --no-logs)
echo "Result: $result"

Example script:

-- Calculate and return a value
local sum = 0
for i = 1, 100 do
    sum = sum + i
end

return { sum = sum, count = 100 }

Output:

{"sum":5050,"count":100}

Return values are JSON-encoded if possible, otherwise converted to string with tostring().

Features

  • Color-coded output - Prints, warnings, and errors appear in your terminal with colors
  • Environment targeting - Route executions to specific runtime contexts (edit/play, client/server)
  • Log filtering - Control which log levels are displayed
  • Return values - Capture script return values via stdout
  • Sourcemap support - Preserve stack traces using sourcemaps
  • Full Studio API - Scripts have complete access to all Studio APIs

Example Script

print("Hello from Studio!")

local part = Instance.new("Part")
part.Parent = workspace

warn("Part created in workspace")