GreenStructure - An Effortless Folder Organization System for Your Roblox Games!

DESCRIPTION

:wave: Introduction

Throughout my time in Roblox development, I’ve worked with various groups and game environments, and one common issue I’ve noticed is disorganization within the file structure. :file_folder:

Before I came up with this system, I tried various other methods of organization, using different structures that I changed around a lot until I finally settled with one I was happy with! :smiley:

Here you can see part of the system that I’ve put together:

While there are other file structure resources available, this one is designed to be as flexible, scalable, and efficient as possible! Whether you’re working solo, or with a collaborative team, this system ensures your project stays organized, easy to navigate, and adaptable to future changes! :muscle:

:question: Why Choose This One?

  • The file names are consistent, easy to read, and allow for change if needs be! :eyes:
  • Each file is explained in detail as to what goes in each if you’re unsure at first! :speaking_head:
  • This is designed to work for both small and large-scale projects, ensuring long-term usability. :sparkles:
  • It’s up to you to how you utilize the system! :index_pointing_at_the_viewer:

:hammer_and_wrench: How do I Set This Up?

  1. Head over to the template experience here.
  2. Download the experience and open it:
  3. Once you’ve understood the system and would like to remove the example folders and “ReadMe” scripts, run this command in the Command Bar:
require(game:GetService("ServerStorage").Modules.Shared.Misc.SetupSystem):setup()

What this does is require an existing ModuleScript that I’ve setup to remove all the “ReadMe” scripts and other example objects that I inserted for you guys, following a tag that directly links all the objects.

  1. Mess about with the folders and start organizing!

:clipboard: Additional Info

I’d like to give credit to this resource as the inspiration and foundation for GreenStructure. Many of the naming conventions in this system are influenced by that post, so I highly recommend checking it out as well! :computer_mouse:

The system is fully open-sourced - feel free to do what you want with the system! If this system ends up being widely used across Roblox games, I’d greatly appreciate any credit where possible. :label:

I’d love to hear your feedback on this system! Feel free to share any suggestions or improvements. Please note that while I’ll do my best to respond, it may take some time to get to every question! :memo:

Enjoy!

:date: Version History

v1.0.0 - Initial Release

  • Date: 17/02/2025

v1.0.1 - Minor Setup Process Fixes

  • Date: 08/03/2025
  • Changes:
    • Renamed certain LocalScripts found in StarterPlayer that were supposed to be removed via the setup command to “ExampleLocalScript” to give a better indication of the objects’ names.
    • Added all renamed LocalScripts to the “ExampleObject” tag so they can be removed with the setup command.

v1.1.1 - Structure Change

  • Date: 02/04/2025
  • Changes:
    • Added the “DynamicAssets” Folder to Workspace.
    • Removed the “ExampleContainer” Folder from Workspace due to the better alternative (given above).
    • Added the “Vegetation” Folder to the “World” Folder in Workspace to provide another area to separate objects in experiences.
    • Added the “Vegetation” Folder to the “World” Folder in Workspace.
    • Renamed “Assets” in the “Components” Folder found in ReplicatedStorage to “Shared” to provide better clarity on how that Folder should be used, and to support the consistency of how the folders are currently named in the template - multiple scripts should have access to the assets there.
    • Renamed the “Assets” Folder in ReplicatedStorage to “Shared” to provide clarity on how that Folder should be used - multiple scripts should have access to the assets there.
    • Removed the “Scripts” Folder in ReplicatedStorage due to the fact that “Components” should be used to store Scripts that are to be used by client-specific systems. Any scripts you wish to run, instead of putting in that Folder that I originally had, I’d recommend putting into either StarterCharacterScripts or StarterPlayerScripts. “Components” should only store disabled Scripts that are to be later used by other systems.
    • Added the “Components” Folder to ReplicatedFirst, containing a new “Shared” Folder and the old “Dependencies” Folder.
    • Added “Libraries”, “Packages”, “Classes” and “Modules” to ReplicatedFirst, though you shouldn’t really aim to put many things in those Folders, consider only using them in the worst case scenario, or if you have a lot of scripts that immediately need running in ReplicatedStorage when a client joins a server.
    • Renamed the “Assets” Folder in ServerStorage to “Shared” to provide clarity on how that Folder should be used - multiple scripts should have access to the assets there.
    • Added the “Packages” Folder to ServerScriptService, as it came to mind that some Packages can have scripts that are by default enabled, so are needed on server start.
    • Added the “CoreSounds”, “ExampleSystemSounds” and “Shared” to SoundService.
14 Likes

Very cool and interesting! Looking forward to trying this out! :muscle:

3 Likes

Guys, feel free to let me know any suggestions you have! I know I may have already said this originally, but I’d love to hear what you think. :smiley:

There are a number of things I considered changing, such as unique instance names, however I don’t come through with that to provide simplicity within the names. For example, instead of naming ReplicatedStorage.Modules to “SharedModules” or something like “ReplicatedModules”, I kept it what it’s currently named as to provide an easy to read system!

However this came with some disadvantages (to me at least), be that if you’re a programmer following the Roblox Lua Style Guide (like me), you’ll know that variables in scripts should be named according to the Instance.Name property of that object and in camelCase mostly speaking, however since folder names have too often been kept the same throughout many of the game’s services, you can’t really make direct references to those folders if you want to keep in line with the guide.

v1.0.1 - Minor Setup Process Fixes

  • Date: 08/03/2025
  • Changes:
    • Renamed certain LocalScripts found in StarterPlayer that were supposed to be removed via the setup command to “ExampleLocalScript” to give a better indication of the objects’ names.
    • Added all renamed LocalScripts to the “ExampleObject” tag so they can be removed with the setup command.

Update for GreenStructure most likely going to come out tomorrow. A few ideas and changes have come to mind.

v1.1.1 - Structure Change

  • Date: 02/04/2025
  • Changes:
    • Added the “DynamicAssets” Folder to Workspace.
    • Removed the “ExampleContainer” Folder from Workspace due to the better alternative (given above).
    • Added the “Vegetation” Folder to the “World” Folder in Workspace to provide another area to separate objects in experiences.
    • Added the “Vegetation” Folder to the “World” Folder in Workspace.
    • Renamed “Assets” in the “Components” Folder found in ReplicatedStorage to “Shared” to provide better clarity on how that Folder should be used, and to support the consistency of how the folders are currently named in the template - multiple scripts should have access to the assets there.
    • Renamed the “Assets” Folder in ReplicatedStorage to “Shared” to provide clarity on how that Folder should be used - multiple scripts should have access to the assets there.
    • Removed the “Scripts” Folder in ReplicatedStorage due to the fact that “Components” should be used to store Scripts that are to be used by client-specific systems. Any scripts you wish to run, instead of putting in that Folder that I originally had, I’d recommend putting into either StarterCharacterScripts or StarterPlayerScripts. “Components” should only store disabled Scripts that are to be later used by other systems.
    • Added the “Components” Folder to ReplicatedFirst, containing a new “Shared” Folder and the old “Dependencies” Folder.
    • Added “Libraries”, “Packages”, “Classes” and “Modules” to ReplicatedFirst, though you shouldn’t really aim to put many things in those Folders, consider only using them in the worst case scenario, or if you have a lot of scripts that immediately need running in ReplicatedStorage when a client joins a server.
    • Renamed the “Assets” Folder in ServerStorage to “Shared” to provide clarity on how that Folder should be used - multiple scripts should have access to the assets there.
    • Added the “Packages” Folder to ServerScriptService, as it came to mind that some Packages can have scripts that are by default enabled, so are needed on server start.
    • Added the “CoreSounds”, “ExampleSystemSounds” and “Shared” to SoundService.