event-bus

Decouple Godot node communication with a typed global EventBus autoload.

Updated Aug 27, 2026
One-click install
npx skills add https://github.com/GOODDAYDAY/Harness-Everything-Game-Framework --skill event-bus-gooddayday
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: event-bus
Source: https://github.com/GOODDAYDAY/Harness-Everything-Game-Framework/tree/main/.harness/skills/event-bus
Command: npx skills add https://github.com/GOODDAYDAY/Harness-Everything-Game-Framework --skill event-bus-gooddayday

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve?

A global signal hub that lets unrelated parts of a Godot project communicate without holding references to each other, eliminating tight coupling and brittle dependencies.

Core Features & Use Cases

  • Typed signals via a singleton EventBus that can be autoloaded.
  • Connects/disconnects in _ready() and _exit_tree() (C# requires explicit disconnect).
  • Emission is decoupled from listeners; producers don't know who consumes signals.
  • Use cases include UI updates, game state events, and cross-systems communication.

Quick Start

Install EventBus as an autoload, then connect and emit typed signals in your nodes to decouple communication.

Frequently Asked Questions about event-bus

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I decouple communication between unrelated Godot nodes?

You can decouple Godot nodes by using a typed global EventBus autoload that lets unrelated parts of your project communicate through signals without holding direct references to each other. This eliminates tight coupling and brittle dependencies across UI, gameplay, and system layers.

Does the EventBus support both C# and GDScript in Godot?

Yes, the EventBus supports both GDScript and C# for emitting and listening to typed signals. It enforces explicit connections and disconnections in _ready() and _exit_tree(), with C# specifically requiring explicit disconnection to manage signal lifecycle properly.

How do I emit typed signals with payloads using a global EventBus?

You emit typed signals with optional payloads through the EventBus singleton to pass structured data between nodes. Producers emit these signals without knowing who consumes them, enabling scalable event-driven architectures across different systems.

When should I use an event bus instead of direct node references in Godot?

You should use an event bus when unrelated nodes must emit and listen to signals across UI, gameplay, and system layers without holding references to each other. This approach prevents brittle dependencies and supports scalable event-driven architectures.

Why do I need to explicitly disconnect C# signals in Godot?

You need to explicitly disconnect C# signals in _exit_tree() because the typed EventBus requires explicit connection management in C# to prevent memory leaks and orphaned signal callbacks. GDScript handles this lifecycle differently, but C# enforces strict disconnection.