As you age up in experience and move on to better tools outside of studio, it becomes harder to test your code without taking excessive amounts of time to load up Roblox’s runtime environment each time you press “Play”. Since Roblox requires an account for everything (even for the services you never use!), it’s impossible for me to properly move Roblox’s runtime out of studio. Surely, this is done by design to keep the developer tethered to the platform but, I feel like that philosophy should be revisited in order to remain viable to developers more accustom to non-Roblox-specific toolchains.
Today, no runtime outside of studio exists. Even when using Rojo. You have to “compile” your project source to a Roblox place file. Open up that file. Stream Rojo changes to opened place file and then, hit run. Even when you don’t need to render anything and it’s pure code logic. This is totally abysmal.
Ideally, there should be a very minimal runtime produced and supported by Roblox that allows you to run lua or luau in a contained Roblox-eques environment. In the literal sense, I run my code and it should be able to use and work with Roblox APIs in this runtime. It’s totally fine that some APIs can’t survive in this environment without a Roblox account. Namely, datastores, friends, groups, etc. That’s totally fine. This is not production and should not be treated as such. This is purely for quick-development. If I want to test my code with everything that Roblox supports, I can run my game the default way. However, for this request, I am simply asking for minimum APIs in a runtime that can survive without taking excessive amounts of time to render stuff I don’t need and to be able to pipe output to a console that I can see without physically being inside of studio.
To an engineer that might be reading this: The way that I would approach a solution is to bundle a lightweight CLI tool to studio and then have commands that run a slimmed down version of studio’s default environment. i.e $ rbxcli run --project {src folder}
to run more than one file in a project. $ rbxcli run --file {file}
to run one file. $ rbxcli build --project {src folder}
to build a place file based on a project. $ rbxcli compile --project {src folder}
to build and run a place file based on a project. You can expand this CLI tool to do things such as publish ($ rbxcli publish {path to place file} {--id=PLACE_ID}
) but, this is not the scope of this request. The primary benefit of this approach is that you can create a CLI tool that can be adapted by external developers to be used on any other platform without having to directly maintain each subset. In this particular example, a subset would classify as a extension or plugin to a text editor such as Visual Studio Code or related. And would still appeal to those who use Vim or Emacs.
Side Note: I’m not entirely sure if this concept can survive on this platform yet because I have no idea how Studio is written or how closely-tied the “Roblox runtime” is to external services. But, this should definitely be a key-selling-point-feature if this platform wants to scale appropriately to more than just studio or to the wider game-developer audience not in flavor of being forced to use Studio directly.