Hook → Signal Catalog
Signal Catalog
Every key Hook recognises as a Roblox built-in signal. Any key not in this list is treated as a custom event — use Hook.Fire to dispatch it.
Client-only signals warn and no-op if subscribed from a server script. Per-player signals pass
(player, ...) — Hook wires them automatically for every current and future player.Players
| Key | Args | Context |
|---|---|---|
"PlayerAdded" | player: Player | Both |
"PlayerRemoving" | player: Player | Both |
"PlayerMembershipChanged" | player: Player | Both |
"CharacterAdded" | player: Player, character: Model | Both · per-player |
"CharacterRemoving" | player: Player, character: Model | Both · per-player |
"CharacterAppearanceLoaded" | player: Player, character: Model | Both · per-player |
RunService
| Key | Args | Context |
|---|---|---|
"Heartbeat" | dt: number | Both |
"Stepped" | time: number, dt: number | Both |
"PostSimulation" | dt: number | Both |
"PreAnimation" | dt: number | Both |
"PostAnimation" | dt: number | Both |
"RenderStepped" | dt: number | Client only |
"PreRender" | dt: number | Client only |
UserInputService
| Key | Args | Context |
|---|---|---|
"InputBegan" | input: InputObject, processed: boolean | Client only |
"InputChanged" | input: InputObject, processed: boolean | Client only |
"InputEnded" | input: InputObject, processed: boolean | Client only |
"JumpRequest" | — | Client only |
"GamepadConnected" | gamepad: Enum.UserInputType | Client only |
"GamepadDisconnected" | gamepad: Enum.UserInputType | Client only |
"WindowFocused" | — | Client only |
"WindowFocusReleased" | — | Client only |
"TouchStarted" | touch: InputObject, processed: boolean | Client only |
"TouchMoved" | touch: InputObject, processed: boolean | Client only |
"TouchEnded" | touch: InputObject, processed: boolean | Client only |
"TouchTap" | positions: {Vector2}, processed: boolean | Client only |
"TouchLongPress" | positions: {Vector2}, state: Enum.UserInputState, processed: boolean | Client only |
"TouchSwipe" | direction: Enum.SwipeDirection, numberOfTouches: number, processed: boolean | Client only |
"TouchPinch" | positions: {Vector2}, scale: number, velocity: number, state: Enum.UserInputState, processed: boolean | Client only |
"TouchRotate" | positions: {Vector2}, rotation: number, velocity: number, state: Enum.UserInputState, processed: boolean | Client only |
"DeviceAccelerationChanged" | acceleration: InputObject | Client only |
"DeviceGravityChanged" | gravity: InputObject | Client only |
"DeviceRotationChanged" | rotation: InputObject, cframe: CFrame | Client only |
"PointerAction" | wheel: number, pan: Vector2, pinch: number, processed: boolean | Client only |
MarketplaceService
| Key | Args | Context |
|---|---|---|
"PromptPurchaseFinished" | player: Player, assetId: number, purchased: boolean | Both |
"PromptGamePassPurchaseFinished" | player: Player, gamePassId: number, purchased: boolean | Both |
"PromptBundlePurchaseFinished" | player: Player, bundleId: number, purchased: boolean | Both |
"PromptSubscriptionPurchaseFinished" | player: Player, subscriptionId: string, purchased: boolean | Both |
TeleportService
| Key | Args | Context |
|---|---|---|
"TeleportInitFailed" | player: Player, teleportResult: Enum.TeleportResult, errorMessage: string | Both |
"LocalPlayerArrivedFromTeleport" | loadingGui: ScreenGui, dataTable: any | Client only |
SocialService
| Key | Args | Context |
|---|---|---|
"GameInvitePromptClosed" | player: Player, recipientIds: {number} | Both |
"PromptInviteRequested" | player: Player | Both |
GuiService
| Key | Args | Context |
|---|---|---|
"MenuOpened" | — | Client only |
"MenuClosed" | — | Client only |
"KeyboardVisibilityChanged" | visible: boolean | Client only |
TextChatService
| Key | Args | Context |
|---|---|---|
"MessageReceived" | message: TextChatMessage | Both |
"SendingMessage" | message: TextChatMessage | Both |
VoiceChatService
| Key | Args | Context |
|---|---|---|
"ParticipantsStateChanged" | participants: {any}, oldState: any, newState: any | Both |
"PlayerMicActivitySignalChange" | player: Player, isActive: boolean | Both |
CollectionService — parameterised
Pass the tag name after a colon. Each unique tag gets its own priority queue.
| Key pattern | Args |
|---|---|
"TagAdded:tagName" | instance: Instance |
"TagRemoved:tagName" | instance: Instance |
Hook("TagAdded:Enemy", "normal", function(instance) SetupEnemy(instance) end)
Hook("TagRemoved:Enemy", "normal", function(instance) TeardownEnemy(instance) end)
Game / Lighting
| Key | Args | Context |
|---|---|---|
"Close" | — | Both |
"DescendantAdded" | descendant: Instance | Both |
"DescendantRemoving" | descendant: Instance | Both |
"LightingChanged" | skyboxChanged: boolean | Both |
See also
← Hook · Subscribing | Hook(), Once, Off, Clear · Custom Events | Hook.Fire