All skills
thedivergentai avatar

/godot-project-foundations

@57c9225

Expert blueprint for Godot 4 project organization (feature-based folders, naming conventions, version control). Enforces snake_case files, PascalCase nodes, %SceneUniqueNames, and .gitignore best practices. Use when starting new projects or refactoring structure. Keywords project organization, naming conventions, snake_case, PascalCase, feature-based, .gitignore, .gdignore.

Use this Skill: https://skilld.dev/gh/thedivergentai/gd-agentic-skills/godot-project-foundations

This session only. Nothing lands on disk.

SKILL.md

β‰ˆ101 tokens always: the name and description. β‰ˆ3k when used: this file. β‰ˆ1.8k more on demand in 2 files.

Project Foundations

Feature-based organization, consistent naming, and version control hygiene define professional Godot projects.

Available Scripts

Core Scaffolding (Stateful / Persistent)

Runtime Utilities (Stateless / Lightweight)

Do NOT Load dependency_auditor.gd unless troubleshooting loading errors.

NEVER Do (Expert Anti-Patterns)

Global Architecture

  • NEVER group by file type β€” /scripts, /sprites folders. Nightmare maintainability. Use feature-based: /player, /ui.
  • NEVER mix snake_case and PascalCase in files β€” Standard: snake_case for files, PascalCase for nodes.
  • NEVER use hardcoded get_node() paths β€” Brittle on reparenting. Use %SceneUniqueNames for stable references.
  • NEVER use monolithic Autoloads β€” Avoid managers that hold visual node references; keep singletons focused on pure data or RefCounted delegation.

Resource Management

  • NEVER forget .gitignore β€” Committing .godot/ folder = 100MB+ bloat + conflicts.
  • NEVER skip .gdignore for raw assets β€” Design source files (.psd, .blend) in root will be imported unless ignored.
  • NEVER modify globally shared Resources directly β€” Strictly call duplicate(true) for unique instances with independent state.

Performance & Threading

  • NEVER block the main thread with load() β€” Strictly use ResourceLoader.load_threaded_request() for async scene transitions.
  • NEVER modify the SceneTree from a background thread β€” Strictly use call_deferred() for thread-to-main-thread synchronization.
  • NEVER skip Mutex locking during pooled access β€” Strictly ensure thread-safety when using a shared WorkerThreadPool or Object Pool.
  • NEVER use _process() for precise input β€” Tied to visual framerate. Strictly use _unhandled_input() to capture exact, frame-independent events.

Ownership decision tree

Need Prefer Avoid
Everything for one feature (player, HUD panel) Feature folder scene module Type folders (/scripts, /sprites)
Cross-scene service with lifecycle (save, audio bus) Autoload via managed_autoload.gd Stuffing UI nodes into singletons
Many publishers/subscribers, no ownership EventBus β†’ MANDATORY global_event_bus.gd Autoload that imports half the game
One scene's private wiring Scene-local node + %UniqueName Global bus for parent→child calls

1. Naming Conventions

  • Files & Folders: snake_case (C# exception: PascalCase class-match).
  • Node Names: PascalCase.
  • Exports: snake_case; Inspector Title-Cases them.
  • Private: leading _ on members and virtuals (_ready, _process).
  • Signals: past-tense snake_case (health_changed).
  • Unique Names: %SceneUniqueNames over brittle get_node() paths.

2. Feature-Based Organization

Group by feature (/entities/player, /ui/main_menu), not by file type. Keep /common, /levels, /addons.

3. Version Control

Godot-aware .gitignore (ignore .godot/) + .gdignore on raw design sources.

Workflow: Scaffolding a New Project

  1. Ensure project.godot exists β†’ run project_bootstrapper.gd / create entities/, ui/, levels/, common/.
  2. Setup Git .gitignore + document feature-based layout in README.md.
  3. Register lean Autoloads only after the ownership decision tree says so.

Typed GDScript strictness (foundations-only)

Full typed-GDScript migration lives in godot-gdscript-mastery. For new foundations projects: Project Settings β†’ Debug β†’ GDScript β†’ Untyped Declaration = Warn or Error.

Expert Foundation Architectures

Scene transitions

MANDATORY load async_resource_loader.gd β€” threaded ResourceLoader with progress. Do not paste SceneManager samples here.

Global Event Bus

MANDATORY load global_event_bus.gd for typed global signals. Do not paste EventBus samples here.

Project Metadata

Use build_metadata_provider.gd / base_data_resource.gd for version/build flags instead of ad-hoc JSON.

Deep dive (load on demand)

Full naming table, typed-GDScript migration, EventBus/SceneManager/metadata samples β€” references/foundations-deep.md.

Reference

Progressive disclosure: open Official Documentation links only when researching a specific API; load Related Skills when routing to a peer domain β€” do not preload the whole lattice.

Official Documentation

  • Project organization β€” Feature-based folders, .gdignore, and VCS hygiene that keep imports and repos maintainable.
  • Scene organization β€” Ownership boundaries and why %SceneUniqueNames beat brittle get_node() paths.
  • GDScript style guide β€” Canonical snake_case files / PascalCase nodes / past-tense signals used by this skill’s validators.
  • GDScript warning system β€” Enforce typed declarations (Untyped Declaration β†’ Warn/Error) when migrating foundations to GDScript 2.0.
  • Singletons (Autoload) β€” How to register lean global services that survive scene changes.
  • Autoloads versus regular nodes β€” When a Managed Autoload / EventBus is justified vs scene-local ownership.
  • Background loading β€” ResourceLoader.load_threaded_* patterns for non-blocking scene transitions.
  • Resources β€” Shared vs duplicated Resource instances and why global mutation breaks feature modules.
  • Nodes and scene instances β€” Instantiation, pooling, and scene-as-module boundaries for feature folders.
  • Using SceneTree β€” Tree lifetime, deferred calls, and threadβ†’main synchronization rules.
  • File paths in Godot projects β€” res:// / user:// conventions for scaffolded folders and saved override.cfg / metadata.
  • ProjectSettings β€” Runtime profiles, version strings, and settings keys used by configurators and build metadata.

Related Skills

Prerequisites
  • godot-gdscript-mastery β€” Typed GDScript, style, and warning-system fluency before enforcing naming and scaffold conventions.
Complements
  • godot-version-migration β€” When opening or scaffolding a project on an older engine version, hop to the library target before enforcing current foundations.
  • godot-autoload-architecture β€” Boot order and ownership rules for Managed Autoload / EventBus singletons registered from a clean project root.
  • godot-composition β€” Feature folders become composable scene modules; parents wire children instead of growing monolithic managers.
  • godot-resource-data-patterns β€” Extends BaseDataResource-style reactive Resources into full data-driven catalogs without shared mutation.
  • godot-signal-architecture β€” Typed EventBus signals and connect lifetime once Autoloads and scene ownership are in place.
  • godot-scene-management β€” Threaded loaders and scene swaps build on this skill’s async ResourceLoader boilerplate.
  • godot-input-handling β€” Deepens _unhandled_input buffering into full action maps and device routing.
Downstream / consumers
  • godot-export-builds β€” Export presets and feature tags assume a clean folder layout, .gitignore, and build metadata hooks.
  • godot-testing-patterns β€” Feature-based scenes and deterministic Autoloads make unit/integration harnesses easier to mount.
  • godot-debugging-profiling β€” Custom Logger telemetry and dependency audits feed editor-time diagnostics once structure is stable.
  • godot-performance-optimization β€” Node pools, WorkerThreadPool, and runtime profiles escalate here when foundations hit CPU/memory ceilings.
Master
  • godot-master β€” Library router and mirrored module entry; open when discovering which Domain Skill owns a cross-cutting architecture concern.

Source: SKILL.md on GitHub

No alerts16d4 checks Β· Risk SAFE
  • Gen Agent Trust Hub16d

    The skill provides a suite of Godot 4 foundation scripts for project scaffolding, telemetry, and organization. It includes development tools that dynamically create project folders and generate GDScript files from templates based on user-provided inputs. These tools represent a minor indirect injection surface due to a lack of path sanitization, and the script generation is a standard pattern for scaffolding tools.

  • Socket16d

    No alerts

  • Snyk16d

    Risk: LOW Β· No issues

  • Runlayer7mo

    1/6 files flagged

Signed by skilld at 57c9225. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 3 weeks ago.

Activeupdated 2 months ago

README badge

README badge for thedivergentai/gd-agentic-skills/godot-project-foundations