A Small Roblox Lua Design Guide


This style reference aims to link as much Lua coding at Roblox as feasible under the same conventions and styles.


This overview is created after Google’s C++ Overview. Although Lua is a considerably different language, the overview’s principles still hold.


To learn about RBX Paste, please follow the link.


Directing Principles


  • The purpose of a style overview is to stay clear of debates.


  • There’s no person right answer to how to style code, yet consistency is important, so we agree to approve this one, somewhat approximate standard so we can invest more time creating code, and much less time saying regarding formatting details in the testimonial.


  • Enhance code for analysis, not composing.


  • You will write your code when. Many individuals will require to read it, from the reviewers to anyone else that touches the code, to you when you return to it in 6 months.
  • All else being equal, consider what the diffs could appear like. It’s easier to review a diff that doesn’t include relocating points between lines. Tidy diffs make it easier to obtain your code evaluated.


  • Avoid magic, such as unsafe or unexpected Lua functions:


  • Wonderful code is wonderful to utilize until something goes wrong. Then nobody recognizes why it broke or how to fix it.
  • Metatables are an example of an effective feature that needs to be utilized with care.


  • Follow colloquial Lua when suitable.


File Framework


Files must include these things, if present, in order:


  • An optional block comment talking about why this data exists.


  • Do not attach the data name, author, or day, these are points that our version control system can tell us.


  • Solutions utilize by the documents, utilizing GetService.
  • Module imports, utilizing call for.
  • Module-level constants.
  • Module-level variables, as well as functions.
  • The things the component returns.
  • A return statement.




  • All “require” calls require to be at the top of a data, making reliance static.
  • Usage loved one path when importing components from the same package.
  • Use absolute courses when importing components from a different package.




Metatables are an incredibly powerful Lua function that can be utilized to overload drivers, apply paradigmatic inheritance, as well as tinker with limited object lifecycle.


At Roblox, we limit the use metatables to a couple of situations:


  • Applying prototype-based classes.
  • Guarding against typos.


Prototype-based classes


The most prominent pattern for courses in Lua is occasionally referred to as the One Real Pattern. It defines class participants, instance members, as well as metamethods in the same table, as well as highlights Lua’s strengths well.


General Punctuation


  • Don’t utilize semicolons; They are normally just useful to different numerous declarations on a solitary line, yet you shouldn’t be placing several statements on a solitary line anyhow.


General Whitespace


  • Indent with tabs.
  • Keep lines under 120 columns large, thinking four column wide tabs.


  • Luacheck will caution for lines over 120 bytes broad; it isn’t with tab characters!


  • Cover remarks to 80 columns broad, assuming 4 column broad tabs.


  • This is different than typical code; the hope is that short lines assist boost the readability of comment prose; however, is too restrictive for code.


  • Don’t leave whitespace at the end of lines.


  • If your editor is having an auto-trimming task, make it on!


  • Include a newline at the finish of the documents.
  • No upright alignment!


  • Vertical alignment creates code more difficult to edit and often gets ruined by succeeding editors.