rBundle | A Roblox Studio package manager

rBundleLogo512

:package: rBundle | v1.0.0 | Download :floppy_disk:

:wave: 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.


:arrow_double_up: Advantages

:infinity: 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!

:moneybag: 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.

:cloud_with_lightning: 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.

:hammer: 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.

:page_facing_up: 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
  }
}

:blue_book: Documentation

13 Likes

just because its on github doesnt mean it can’t be malicious :woozy_face:

3 Likes

That’s not what the user is saying at all - they’re saying that, because they use GitHub repositories, that you can see what you’re about to install before you add it into your game (something that is more challenging with Roblox plugins and models).

9 Likes

Yep exactly this. Open source is better for a number of reasons one of which is that code can be reviewed by anyone. Finding malicious content is much easier this way and is a massive advantage.

This is a great concept, but you should probably have a global registry of bundles where others can search for available bundles.

This is a really cool idea! I’ll try this out when I have time.

You missed a chance to call this “rpm” :slight_smile:

2 Likes

or rPIP

(pip is python package manager)

rpm or rPIP?

1 Like

Why should I use this over wally?

rpm all the way

3 Likes

Wally is honestly a great tool and I’ll admit it’s more fleshed out than rBundle. The issue is it’s an external tool. rBundle stays directly within Studio so developers who only use Studio for development continue working in an environment they’re familiar with. Also rBundle places these bundles directly into your game where as Wally places them onto your desktop to be used in a Rojo environment. Developers who use Rojo for development should prefer Wally because of this but developers who exclusively use Studio will find working with rBundle a better workflow.

1 Like

I really regret missing this when I named it!

You can change it you know? Rpm is cool rbundle sounds like something we find in Walmart ( no offense)

Can there be support for bundles to have dependencies similar to wally? So I don’t have to manually install the bundle’s dependencies for it to work and just have rBundle do it for me for example:

{
  "name": "Bundle",
  "id": "bundle",
  "version": "1.1.0",
  "src": "src",
  "dependencies": [
    "evaera/Promise",
    "Sleitnick/Signal"
  ]
}

I never really planned on upgrading rBundle but seeing the example you gave is pretty interesting. The biggest thing to figure out is I have to think about where dependencies would be placed relative to your bundle’s source code so it’s easy to develop your bundle and then package it for others.

I think the best way is for it to be similar to wally, with the package’s dependencies being the same parent as the package and being accessed through script.Parent.PACKAGENAME