---
id: annot-on
name: @On
category: annotations
kind: annotation
tokens: @On
sig: @On(Event) handler Name { … }
tip: Register a compile-time listener that runs whenever an event is emitted.
order: 2
---
@On(Event) turns a handler into a listener for a named event: whenever any code runs emit Event(...), this handler's body runs with the event's fields bound by name. It is how systems talk to each other without referencing one another directly — the emitter never knows who is listening, so gameplay, UI and mods can all react to the same moment independently. Several handlers may listen to one event; they run in declaration order. On a cancellable event, a listener may cancel to veto it, and the emitter sees that outcome. Related lifecycle hooks such as @OnSpawn, @OnEnable and @OnDespawn are specialized event listeners the compiler wires up for you.
```ludic
program Events {
property Health { current: int = 100, maximum: int = 100 }
model Player { Health }
event Damaged { amount: int = 0 }
handler SpawnPlayer phase Start {
spawn Player { Health { current: 100, maximum: 100 } }
emit Damaged(amount: 25)
}
@On(Damaged)
handler ReportDamage {
print(amount)
}
}
```