---
id: annot-onquit
name: @OnQuit
category: annotations
kind: annotation
tokens: @OnQuit
sig: @OnQuit handler Name { … }
tip: Run a handler once at shutdown, after the last frame.
order: 50
---
@OnQuit pins a handler to the program's shutdown moment: it runs exactly once as the program exits, after the final frame. Use it for teardown that must happen once — flushing a save, printing a final tally, releasing a host resource. In the lifecycle timeline it runs after every still-live instance's @OnDespawn hook has fired, so the world has already been torn down by the time @OnQuit sees it. It is the boot-time counterpart of @OnStart; add @Public to also emit a program_quit event other modules can hook.
```ludic
program QuitHook {
property Score { total: int = 0 }
model Scoreboard { Score }
@OnQuit handler ReportFinalScore { # runs once at shutdown
for (Score) in query [Score] { print(Score.total) }
}
handler Seed phase Start { spawn Scoreboard { Score { total: 42 } } }
handler Finish phase Render { quit() } # triggers shutdown -> prints 42
}
```