rbxm-suite
is the spiritual successor to Rostruct, designed for exploiting with a Rojo-based workflow.
Store your modules, assets, and UI on the filesystem. Use Rojo to build your project to a rbxm file, and rbxm-suite can launch it in your exploit.
🔌 Asset downloader - Download model assets from GitHub Releases
🚀 Faster launch times - Outspeed Rostruct by bundling on execution
🧬 Use modules across projects
❌ Verbose errors for cyclic dependencies
Rostruct is designed to mimic Rojo on execution, but it isn't complete.
I designed rbxm-suite as a smarter alternative. Instead of mimicking Rojo, it handles what Rojo can already generate. Build your project with Rojo, and leave the execution to rbxm-suite.
By moving the build process upstream, you can take advantage of a true Rojo workflow.
You can load rbxm-suite through a GitHub Release:
local rbxmSuite = loadstring(game:HttpGetAsync("https://github.com/richie0866/rbxm-suite/releases/latest/download/rbxm-suite.lua"))()
Or, you can download rbxm-suite.lua
from a release and modify it yourself:
local rbxmSuite = (function()
-- This part will be automatically generated
)()
-- Use rbxm-suite
The unminified source is available in the src
folder.
- Build your Roblox projects with Rojo.
- Write and compile TypeScript code with roblox-ts (should be the
model
type!)
🚀 Launch a project
function rbxmSuite.launch(path: string, options: Options): InstanceLoads a rbxm(x) file into the game and loads all scripts.
path
may be a file path or arbxassetid
path as of v2.1.0.By default, it will run all enabled LocalScript objects.
local project = rbxmSuite.launch("path/to/Project.rbxm", {
runscripts = true,
deferred = true,
nocache = false,
nocirculardeps = true,
debug = false,
verbose = false,
})
⚙️
runscripts
Run every enabled LocalScript in your project on new threads. Defaults to
true
.
⚙️
deferred
Whether
runscripts
should use task.defer instead of task.spawn. Defaults totrue
.
⚙️
nocache
For
rbxassetid
paths, prevent using cached data.This option manually requests from the web API to grab asset data.
⚙️
nocirculardeps
Enable circular dependency prevention. Defaults to
true
.In rare cases, some workflows need this set to
false
.
⚙️
debug
Enable debug mode. Defaults to
false
.When
true
, error traceback is preserved and scripts are lazy-loaded with multipleloadstring
calls. Whenfalse
, every script is compiled at the same time with oneloadstring
call. Typically faster whenfalse
.It should be left
false
in production, and set totrue
during development.
⚙️
verbose
Enable verbose logging. Defaults to
false
.
🔭 Require a specific module
function rbxmSuite.require(module: LocalScript | ModuleScript): anyRequires the module, and returns what the module returned.
module
must be a LocalScript or ModuleScript created by rbxmSuite.Note that any script in the project can be required!
local myModule = rbxmSuite.launch("path/to/MyModule.rbxm")
local MyModule = rbxmSuite.require(myModule)
MyModule.doSomething()
🐙 Download a project from GitHub
function rbxmSuite.download(repository: string, asset: string): stringDownloads a rbxm(x) asset from a GitHub Release, and returns a path to the asset.
The repository format is
user/repo@tag_name
.
local path = rbxmSuite.download("Roblox/roact@v1.4.0", "Roact.rbxm")
local model = rbxmSuite.launch(path)
local Roact = rbxmSuite.require(model)
Roact.createElement()
Set
tag_name
tolatest
to download and cache the latest version. Version checking and updating is performed in the background where possible.
local path = rbxmSuite.download("Roblox/roact@latest", "Roact.rbxm")
When debug mode is false
, modules that don't get required will still be bundled into one script.
If you have a lot of unused code, execution speed will be inconsistent between exploits. Be careful!
Upload your project to GitHub, and create releases with an rbxm(x) file included as a binary file.
You can distribute your project publicly by using rbxm-suite to download and run the latest release.