Skip to content

Tool designed for exploiting with a Rojo-based workflow

License

Notifications You must be signed in to change notification settings

richie0866/rbxm-suite

Repository files navigation


rbxm
rbxm-suite

Designed for exploiting with a Rojo-based workflow

GitHub Actions Release Status Latest Release

❓ What's rbxm-suite?

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.


⚡ Features

🔌 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


🌻 Motivation

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.


🔌 Installation

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.


✨ Supported workflows

⚡ Rojo

  • Build your Roblox projects with Rojo.

⚡ TypeScript

  • Write and compile TypeScript code with roblox-ts (should be the model type!)

📜 Usage

🚀 Launch a project
function rbxmSuite.launch(path: string, options: Options): Instance

Loads a rbxm(x) file into the game and loads all scripts. path may be a file path or a rbxassetid 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 to true.


⚙️ 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 multiple loadstring calls. When false, every script is compiled at the same time with one loadstring call. Typically faster when false.

It should be left false in production, and set to true during development.


⚙️ verbose

Enable verbose logging. Defaults to false.



🔭 Require a specific module
function rbxmSuite.require(module: LocalScript | ModuleScript): any

Requires 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): string

Downloads 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/[email protected]", "Roact.rbxm")
local model = rbxmSuite.launch(path)
local Roact = rbxmSuite.require(model)
Roact.createElement()

Set tag_name to latest 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")

Notes

📌 In production, don't include unused modules.

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!

📌 GitHub is your friend.

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.