Skip to content
Saiko

Command line

Five flags. One starts Saiko, four talk to a Saiko that is already running.

--custom

synopsis
saiko.exe --custom

Starts Saiko for another program to control. It signs in, installs, hides the window and keeps the control server running. See how it works.

Output

json
{"ok":true,"event":"ready"}
{"ok":true,"event":"already_running"}
{"ok":false,"error":"Saiko's files were not downloaded"}
  • ready means sign-in and install are done and the window is hidden. Wait for this line before sending anything else.
  • already_running means another instance is up. The new process exits at once and nothing else is needed.
  • An error leaves the window open so the person can fix it. The message is one of: Roblox was not set up, Saiko's files were not downloaded, This account has no active license.

--start-roblox

synopsis
saiko.exe --start-roblox

Updates Roblox and the files Saiko publishes, then starts Roblox. Use it to get a client running before you inject.

output
{"ok":true,"result":{"pid":14212}}

pid is the process id of the Roblox that was started, an integer. Pass it to --pid to inject into or run a script in exactly that client. Because it updates first, it can take longer than the other commands: give it time before assuming it hung.

--get-clients

synopsis
saiko.exe --get-clients

Lists the Roblox clients that are running.

output
[{"pid":14212,"name":"Builderman"},{"pid":9040}]
  • pid is the process id, an integer.
  • name is the Roblox username. It is there only after the module is injected and has reported who is playing, and is left out before that.
  • With no clients the output is an empty array, [].

--inject

synopsis
saiko.exe --inject
saiko.exe --pid <pid> --inject

Loads the Saiko module into a client. With --pid it injects that one process. Without it, it injects every Saiko Roblox that is up to date and does not have a module yet.

output
{"ok":true,"result":{"injected":[{"pid":14212,"connected":true}]}}

The command waits until the module has loaded and then up to twenty seconds for it to connect back. connected says whether it did. A client that was injected but has not connected yet will not appear with a name in --get-clients until it does.

--execute

synopsis
saiko.exe --execute <script>
saiko.exe --pid <pid> --execute <script>
saiko.exe --execute -

Runs a Luau script in an injected client. With --pid it goes to that process only, otherwise to every client with a module. Pass - as the script to read it from standard input, which avoids quoting trouble with long scripts.

output
{"ok":true,"result":{"sent":[14212]}}

sent lists the processes that took the script. The command returns once each module has accepted it. If a module refuses it, for instance because it does not compile, the error is the module's own message. What the script prints while it runs appears in Saiko's console, not here.

powershell
'print("hello from a custom UI")' | .\saiko.exe --pid 14212 --execute -

Inject, then execute

The two flags can be given together. Saiko injects first, and runs the script only if that worked.

json
{"ok":true,"result":{"inject":{"injected":[{"pid":14212,"connected":true}]},"execute":{"sent":[14212]}}}

Waiting for the result

--get-clients and --execute answer in a moment. --inject can take longer: up to a minute to load and twenty seconds more to connect. --start-roblox updates before it starts, so it takes as long as an update does. Give them time before assuming they hung.

Arguments it does not understand, or flags that do not belong together, fail with a message and exit code 1. For example, --pid on its own, or --custom together with a command.

Errors

Every failure is {"ok":false,"error":"..."} on standard output with exit code 1. These are the messages you will meet.

MessageWhat it means
Saiko is not running; start it with `saiko.exe --custom` firstNo instance answered. Start --custom and wait for the ready line.
no Roblox client is runningThere is no RobloxPlayerBeta.exe to work with.
{pid} is not a running Roblox clientThe pid you gave is not one of the clients --get-clients lists.
every Roblox client is already injected, or is not Saiko'sNothing left for an unqualified --inject to do.
{pid} is already injectedA module is already connected in that process.
that Roblox is not Saiko's, close it and press Launch RobloxOnly the Roblox that Saiko installed can take the module.
that Roblox started before Saiko updated it, close it and press Launch RobloxIt is running an older build than the files on disk.
an injection is already runningInjections go one at a time. Try again when it ends.
injecting into {pid} failed: ...The reason Saiko gives follows the colon.
injecting into {pid} timed outThe module did not finish loading within a minute.
no module is connected, inject firstNothing to run the script in. With --pid the message names the pid.
could not reach the clientThe connection dropped while the script was being sent.
(the module’s own message)The module refused the script, for example because it did not compile.
no script givenThe script was empty.