Introduction
Welcome to rBundle, a Roblox Studio plugin made for managing packages. I’m sure you’ve seen many other package managers so what’s the primary difference between rBundle and something else? rBundle has a variety of features, primitive version control, and GitHub support! After trying rBundle you’ll realize just how much better your development workflow is thanks to its comprehensive feature set.
Advantages
Dynamic
rBundle is entirely focused around GitHub repositories. There are a few reasons for this. First, you can always see what you’re installing into your game and stay protected from malicious content. Second, bundles (also called packages) are dynamic! Anyone can create their own bundle since all a bundle really is is a GitHub repository. Moreover, this means bundle developers can push commits to their bundle repository and not have to worry about users being aware there’s an update. rBundle has you covered!
Cheap Requests
rBundle is well optimized and downloading repositories is cheap. Not only that but since each user generates their own GitHub token for use with rBundle, they have 5,000 requests/installations per hour.
Fast
rBundle is fairly fast especially when you consider how it actually downloads GitHub repositories. It sends an HTTP request to a web endpoint that will then download the requested repository as a .zip, unzip the contents, format them, and then return them for use by rBundle. This is a lot of work for rBundle and yet during testing it only took ~4 seconds to download a repository with ~30 files.
Rojo Conventions
If you’re used to Rojo’s naming conventions (init
, .lua
, .server.lua
, .client.lua
, etc.) you’ll find developing bundles easy. It’s exactly the same! Many developers frequently use Rojo so porting these conventions over to rBundle made sense. This also means existing code hosted on GitHub can easily be ported to rBundle.
JSON Support
rBundle provides support for parsing .json
files into Roblox in a readable manner as module scripts thanks to inspect.lua.
{
"hello": "world",
"foo": [
"bar",
3
]
}
becomes
return {
hello = "world",
foo = {
"bar",
3
}
}