Organization

Godot has no particular restrictions on project structure but I prefer to keep resources as close as possible to the scirpt/scene they are used by. In the case of ‘shared’ or ‘global’ resources which are used in multiple places, my preference is to place them in a high-level folder such as assets or lib. The goal of structuring like this is to improve the “find-ability” of related files.

<aside> 💡 The Godot style guide recommends snake_case for all files including scripts and folders.

</aside>

Example Directory

-Game Repository-
+-- script_templates: Place to add script templates. [SPECIAL/OPTIONAL]
+-- addons: Place for addons from the asset library. [SPECIAL/OPTIONAL]
+-- assets: Place for shared resources [ORGANIZED BY TYPE]
		+-- fonts
		+-- audio
				+-- interface
				+-- ambient
				+-- music
				+-- sfx
		+-- sprites
				+-- textures
				+-- icons
		+-- shaders
+-- lib: Place for shared, typically non-domain-specific, scripts/scenes
		+-- ui
		+-- util
+-- src: Place for all non-shared project specific files [ORGANIZED BY RELAVENCE]
		+-- player
				+-- player.gd
				+-- player.tscn
				+-- player_sprite.png
		+-- etc

Special: These are folders that serve a special purpose within Godot.

Organizing by relevance: Grouping files based on how relevant they are to each other. For example code, art, and sounds effects related to a player may all be placed into a 'player' folder. Files within the same relevancy grouping can be organized by relevance or by type as desired. For example, your player folder may have all the sprites placed in a sprite folder if desired.

Organizing by type: Grouping files based on their file type or categorization. For example fonts in a font folder, sprites in a sprite folder, etc.