As a Roblox developer, the current system of organizing content in experiences is both insufficient and insecure for systems that rely on both the client and server.
If you are unaware, the BaseScript.RunContext that was added a few years ago makes it easier to store entire systems under one folder. Here’s an example of a shop system if you’re confused why it is a great feature:
The Issue
ModuleScripts are another great resource to organize your game, but because they can be accessed by both client and server, exploiters can read its contents. In the shop example, what if you had a module dedicated to the server’s handling of purchases including security checks, item granting logic, and other sensitive code? Now either the exploiter can read all of this and easily find vulnerabilities, or you have to place the ModuleScript in ServerScriptService (since it’s secure and not replicated to the client). This makes things unorganized and back to square one:
We need a ModuleScript.RunContext property. The property’s values could be Server, Client, and Both. Modules set to Server will throw an error if the client attempts to read its contents, allowing developers to secure their server code.
Side note: this property would also prevent developers from accidentally using modules from the wrong run context (for modules intended to be used specifically on either the server or client only) ![]()



