rbx-cli
Unified Roblox Open Cloud CLI. One binary, one install, every tool as a
subcommand. The command is rbx, short because you type it all day.
This site is a rendering of the docs/ directory of the
rbx-forge/rbx-cli repository. Every
page is the file the repository already serves, built by CI on every push to
main, so the site and the repository cannot disagree. The “Suggest an edit”
link at the top right of each page opens the exact file it came from.
Two tools, one backbone
The command surface looks broad because it is two products that happen to share
a spine. The spine is the environment model: one rbxplace.toml maps env names
to universes and places, and every command resolves --env through it.
Declarative, Terraform for Roblox. init, env, apikey, place,
meta, config, shop. You write the desired state into a TOML file you
commit, and the tool reconciles Roblox to match it. Diffable, reviewable, safe
to run on every push, idempotent by construction.
Operational, kubectl for Roblox. servers, analytics, ban, restart,
data, memorystore, message. These act on state that only exists while the
game is running, and no TOML file can describe it. Banning a player is a
consequence of what happened in your game last night, not a checked-in
intention.
Comparable tools have the first pillar. Mantle never had the second, and nothing else does either: you are otherwise clicking through the Creator Hub or writing your own Open Cloud scripts. The second pillar is the difference between deploying a game and running one, and it is why the surface is wide on purpose rather than by accretion.
Every command
| Command | What it does |
|---|---|
init | Create the group, universe and places, and write them into rbxplace.toml |
import | Adopt a universe that already exists: every config and lockfile, from what is live |
env | Read rbxplace.toml: list envs, print one id, generate a module for game code |
apikey | Declare Open Cloud keys and their scopes, create and rotate them |
doctor | Prove the loaded key works, with one real read rather than a syntax check |
check | Every configured tool’s check in one pass, one exit code. status is the same engine for a human |
place | Place files: upload, download, promote between envs, roll back |
meta | Universe and place metadata: name, icon, thumbnails, devices, visibility |
config | The live in-experience config, with revisions and rollback |
shop | Game passes, badges and developer products, with typed Luau codegen |
servers | Live. Servers up now, how the stopped ones ended, and what a crashed one logged |
analytics | Live. Players, retention, revenue per payer. CSV for charting elsewhere |
ban | Live. Inspect and change player restrictions |
restart | Live. Forecast and launch a rolling server restart |
data | Live. Read, overwrite, copy and recover one data store entry |
memorystore | Live. Write cache values servers read through MemoryStoreService |
message | Live. Push a MessagingService message to every running server |
ads | Live. Launch and steer ad campaigns. Spends money, reads no results |
probe | Live. A raw authenticated request to any Open Cloud path |
open | Launch Studio at a place, by name or by id |
download | Fetch a Roblox asset by id |
completions | Shell completions that read your rbxplace.toml at TAB time |
Everything marked Live acts on a running game and shares one safety model:
dry run by default, --apply to write, --env all refused. That model, and the
keys it wants, are on Live operations.
Install
Add it to your project’s rokit.toml, then run rokit install. Pin the
version you want from the
releases page:
[tools]
rbx = "rbx-forge/rbx-cli"
Or let Rokit write that entry for you. Pass the alias explicitly, or you get an
rbx-cli command instead of rbx:
rokit add rbx-forge/rbx-cli --alias rbx
The precompiled binaries attached to every release need no Rust toolchain. Building from source does, at the MSRV declared in the workspace manifest.
Where to start
Two ways in, depending on whether the experience exists yet:
- Nothing on Roblox yet.
rbx initcreates the group, universe and places, and writes therbxplace.tomlthat everything else reads. - A universe that already exists.
rbx importadopts it: every config and lockfile written from what is live, in one command.
Both paths converge on the same three pages. rbx env explains the
rbxplace.toml they produce and how --env resolves through it,
rbx apikey manages the Open Cloud keys declaratively, and
rbx doctor proves those keys work with one real read rather than
a syntax check.
From there:
- Putting it in CI.
rbx checkruns every configured tool’s check in one pass with one aggregated exit code. That page is also whererbx status, the same engine for a human rather than a pipeline, is documented. - Shipping a build.
rbx placeuploads, downloads, promotes between envs and rolls back to a past version. - Everything that is not the place file.
rbx metafor universe and place metadata,rbx configfor in-experience live configs,rbx shopfor passes, badges and developer products with typed Luau codegen. - Acting on a running game. Live operations is the entry point
and the safety model: dry run by default,
--applyto write,--env allrefused. - More than one person on the repository. Working in a team is
the lockfile conflict procedure. Worth reading before you need it, because a
badly resolved
rbxshop.lock.tomlcreates a second paid game pass that this tool cannot delete.
Not on this site
Documentation about the repository rather than the tool stays in the repository: README for the full command table and the stability policy, ARCHITECTURE.md for the crate layout, CONTRIBUTING.md for setup and what makes a PR mergeable, CHANGELOG.md for what changed in a release, and SECURITY.md for where vulnerability reports go, which is never the public tracker.
rbx-cli is a community tool under
MPL-2.0. It is not
affiliated with, endorsed by, or sponsored by Roblox Corporation.