# 08: minimal notification daemon This example tracks notifications and renders plain summary and body text. It explicitly disables action, persistence, inline-reply, markup, hyperlink, and image capability flags because the UI does not implement them. For a positive `expireTimeout`, which the installed-version docs express in seconds, the example converts to milliseconds for QML `Timer.interval` and calls `Notification.expire()`. Zero leaves the notification visible; a negative timeout requests daemon policy, here five seconds. Each window owns its expiry timer, so removing the notification also removes its timer. `Variants` creates the windows; a Qt Quick `Repeater` cannot use non-Item window delegates. This example has no history, manual dismissal, overflow management, or multi-monitor policy and is not a production daemon. Static check: ```sh qmllint -I /usr/lib/qt6/qml examples/08-notification-daemon/shell.qml ``` **Do not launch this against the user's real session during routine validation.** `NotificationServer` attempts to own the session notification service. A runtime test requires an isolated session bus and notification clients. Static checking does not prove ownership, expiry, stacking, interaction, or appearance.