richie0866 / rbxm-suite

Tool designed for exploiting with a Rojo-based workflow
MIT License
22 stars 3 forks source link
lua


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](https://github.com/richie0866/Rostruct) is designed to mimic [Rojo](https://rojo.space) 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: ``` lua 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: ``` lua 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](https://rojo.space). ### ⚡ TypeScript * Write and compile TypeScript code with [roblox-ts](https://roblox-ts.com) (should be the `model` type!)
## 📜 Usage

🚀 Launch a project > ``` ts > 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. ```lua 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
> ``` ts > 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! ```lua local myModule = rbxmSuite.launch("path/to/MyModule.rbxm") local MyModule = rbxmSuite.require(myModule) MyModule.doSomething() ```
---
🐙 Download a project from GitHub
> ``` ts > 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`. ```lua 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` to `latest` to download and cache the latest version. Version checking and updating is performed in the background where possible. ```lua 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.