Tribal Knowledge in Roblox Programming
Demystifying the weird and wonderful of Roblox Programming…
Motivation
Why is this article useful?
This article is primarily aimed at Software Engineers from outside the Roblox development sphere, who want to get started but are a bit lost. It is also useful for Robloxians who want to start scripting in a much more rigorous way. There is a lot of opacity and tribalism that acts as a big deterrent to otherwise capable programmers who see Roblox as a rather monolithic and unapproachable beast, best left to the children. Let me help dispel that!
Who am I?
Why should you listen to me?
Hi, I’m Haashim, and you can find out more about me on my website. In short, I have more than a decade of experience on Roblox, and I have a breadth of experience in the larger software industry, working at firms from Startups, to Quant Finance, and even FAANG.
Programming Resources
What are the best tried-and-tested resources I can use when programming?
The documentation serves as an objective source of truth for all APIs on Roblox. If you have any function you are unsure about, the documentation can offer unambiguous details on its behaviour.
The language used on Roblox is a variant of standard Lua, called Luau (pronounced Lu-wow). It is documented on this website, with syntax and semantics explained fully. For cutting edge updates, another good reference is the luau Github repository.
Roblox Developer Forum — Devforum
This is perhaps unfortunately the least useful of the options listed. The quality of the Devforum has reduced significantly over the previous few years. Despite this, it is still a useful place to keep up-to-date with updates to Roblox itself, and new features. It is the primary point of contact between the Roblox developer community and the Roblox staff themselves. Beyond that, I do not recommend using the Devforum for any programming help or questions.
So, to summarise: you should use the Roblox official documentation where possible, and read up Luau syntax on the dedicated website. If all else fails, a resource with sporadically useful articles is the Devforum, but they are not a good, objective source of truth if the OP is not affiliated with Roblox.
Developer Tooling
What is the gold-standard in Development Tooling?
Rojo fixes the main gripe Software Engineers had on Roblox, that of being forced to use the provided editors in Roblox Studio to write code. The IDE in Roblox Studio is not the best developer experience, and many prefer to use their own. Rojo is a tool that allows file-syncing between your computer’s filesystem and Roblox’s DataModel.
This is the editor of choice for Roblox development. It has full-extension support for all the main developer tools, including Rojo.
Selene is the linter for Lua. Enough said. In the future there may be more, but for now, this is the go-to choice.
Again, this is the language-server implementation for Luau.
Rokit solves the issue of tooling environments in Roblox development. Your project likely has many tooling dependencies, which are (or should be) pinned to specific versions, and managing multiple installs of them is a headache without some form of toolchain management. This is what Rokit offers, with a familiar toml
based configuration file.
Whereas Rokit manages tools, Wally manages your packages. Packages referring to libraries, frameworks and utilities that have been written by other Roblox developers that you want to use in your game. These are distinct from tools. Wally functions similarly to Rokit, and allows you to pin your code’s dependencies.
Lune is the standard runtime for Luau. It allows you to execute code outside of Roblox Studio, allowing tool-makers to now write tools in Luau that run on any OS. Lute is a runtime in development by the Luau language team, that will replace Lune eventually.
Darklua is a preprocessing tool for Luau. The main benefit it provides is path-based require
statements in Luau, that search your filesystem for files, avoiding the clunkier script.Parent.xx
searches that make the file-system abstraction provided by Rojo a leaky one. It also allows for arbitrary code transformation and minification, and is generally useful in your build pipeline. Warmlua is an alternative tool currently being written in Luau (as opposed to Rust) that aims to replace Darklua, eventually.
Blink solves the issue of Networking in Roblox. I list it as a tool here because it is an IDL compiler, and thus a tool rather than a package on Roblox. Blink generates efficient networking code for Roblox, and has good support in VSCode with its own extension.
Roblox-TS is TypeScript that transpiles into Luau code. It is great if you are familiar with TypeScript, but since Luau has had a lot of work on its Type-Solver, the differences in their capabilities has become less noticeable. Since Luau’s language features have “caught up” in terms of capability, I only recommend using Roblox-TS if you are significantly more experienced and locked into the TypeScript ecosystem. I say this because:
Roblox-TS introduces another build step to your deployment.
It introduces reliance on a tool not maintained by Roblox, which the community at large is shifting away from.
It adds another layer of indirection between your source code and the code executing in game.
Rmake is a new tool that is useful in a fully-rojo-managed setup. This means that your entire game exists on your file-system, assets, code etc. Rmake then simplifies significantly the process of multi-place publishing by orchestrating the end-to-end production of a rbxl
(a Roblox- place file) per place. Written entirely in Luau, this is a good tool if you have a fully managed rojo setup. As a word of caution however, this is a very new tool!
So, to summarise: Rojo is how we sync to file-system. Visual Studio Code is our editor of choice, especially when paired with Luau-LSP as a language server and Selene as a linter. Rokit and Wally are the toolchain and package managers! Lune (soon to be replaced by Lute) is our external runtime. Darklua is our Luau preprocessor. Blink is our network IDL, Roblox-TS is useful if you love TypeScript, and Rmake is an orchestrator for Rojo!
Networking
Where can I network with other developers, and stay up-to-date with everything?
Roblox Open-Source Software Community — ROSS
This is top of the list, and for good reason. This is a community of Open-Source Software enthusiasts and contributors, where you can find some of the most knowledgeable people on the platform. It is a work-oriented server and should be treated as such, with productive conversations and a well-maintained “noise-to-signal” ratio resulting in a well-maintained space for conversation. This server is the best place to keep up to date with everything open-source.
A great server for all things math. Here you will find folks that know a lot about obscure, seemingly esoteric math, who will doubtless prove useful if you get stuck on a math-related issue.
Another server tailored to programmers, this is a server oriented towards development with Roblox-TS. This server is useful if you work with Roblox-TS, or are looking for work, with a dedicated job-board that usually offers some lucrative positions.
Hidden Developers — HD
Hidden Developers is one of the oldest communities for Roblox development, and this is reflected in its sheer size. Due to its size however, do not expect productive chats everywhere. Instead, this server is good for finding like-minded people and connecting with other developers who span multiple different disciplines. I do not recommend working with people from HD without a thorough background check.
Roblox Scripting Assistance — RSA
RSA, similar to HD, has a rather large size. I find the community to be less childish than that of HD, with a slightly better set of channels for help with code issues. I do not recommend working with people from RSA without a thorough background check.
So, to summarise: there are few communities on Roblox that are worth your time. For open-source adjacent discussions, ROSS is the place to go. For Math, go to Roblox Mathematical Society. For Roblox-TS, go to their dedicated server. And for anything else, dip your toe into HD or RSA.
Getting Started Checklist
A basic roadmap…
Download and setup Roblox Studio.
Read the Luau basics on the website.
Download VSCode, and install the Rojo, Selene, and Luau-LSP extensions.
Experiment with file-system to Roblox-Studio syncing with Rojo.
Join ROSS!
Create your Roblox empire… profit?