---
title: "SignalObject"
description: "The custom Signal emitter and its subscription object."
---

## Emitter

Created by [Signal.new](/reference/signals/signal-new). The emitter stores its own handlers and schedules callbacks using `task.spawn`.

| Method | Contract |
| --- | --- |
| [Connect](/reference/signals/signalobject-connect) | Subscribe a callback |
| [Once](/reference/signals/signalobject-once) | Subscribe a callback for one firing |
| [Fire](/reference/signals/signalobject-fire) | Schedule connected handlers |
| [Wait](/reference/signals/signalobject-wait) | Yield until the next firing |
| [DisconnectAll](/reference/signals/signalobject-disconnectall) | Clear all subscriptions; also available as Destroy/destroy |

Call methods with a colon, such as `event:Connect(callback)`. The emitter is reusable after DisconnectAll. Waiting coroutines stay suspended until a future Fire; clearing handlers does not resume them.

## SignalConnection

Connect and Once return a custom subscription object.

<ResponseField name="Connected" type="boolean">
  Whether the subscription is still active.
</ResponseField>

[Disconnect](/reference/signals/signalconnection-disconnect) removes the subscription. Its lowercase and Destroy/destroy aliases perform the same operation.

This custom connection has no native-wrapper Enable, Disable, Fire, Defer, Function, Thread, ForeignState, or LuaConnection fields. It is separate from the native Connection wrappers returned by getconnections.
