For years there have been recurring requests here for two things the Desk notification bell doesn’t do — show an unread count instead of a dot, and make a sound when something arrives:
The usual answer is “override notifications.js yourself”, which breaks on the next update. So I packaged it properly as an app.
https://github.com/parthf/frappe_notification_alerts (MIT)
What it does
-
Unread count badge on the bell instead of a dot
-
Bell turns red and swings while anything is unread, with a soft pulse behind it
-
One short sound when a notification actually arrives — never repeated for notifications that merely stay unread
-
If notifications arrived while you were logged out, the bell runs a longer attention burst on the next page load, so you don’t miss what piled up
-
Everything stops the moment the count hits zero
How it works
It hooks Notification Log via doc_events, so it covers every notification that reaches the standard bell — system, assignment, mention, share, energy point, workflow, and anything raised by any other installed app. There is no per-app wiring.
No Frappe file is patched and no whitelisted method is overridden. It uses:
-
app_include_js/app_include_css— plain, unbundled assets, so nobench buildneeded -
extend_bootinfo— ships settings + the current unread count infrappe.boot, so the bell can alert on first paint with no extra round trip -
doc_eventsonNotification Log(after_insert,on_update,on_trash) — publishes realtime events with an authoritative count -
frappe.realtime— its ownnotification_alerts:*events, with Frappe’s corenotificationevent as a fallback
One wrinkle worth documenting: mark_as_read / mark_all_as_read use frappe.db.set_value, which deliberately skips doc hooks — so there’s no server event to hook for “marked as read”. The client detects the interaction and calls a whitelisted sync_unread_count() that recounts and broadcasts to the user’s other sessions/devices.
Settings
A Notification Alert Settings single doctype: 7 animation styles, bell size and style, sound volume and custom sound URL, continuous vs periodic alerting, unread count in the browser tab title, and a toggle for every feature. Sensible defaults, so it works immediately after install.
Install
bench get-app https://github.com/parthf/frappe_notification_alerts.git
bench --site <site-name> install-app frappe_notification_alerts
bench restart
Notes
-
Tested on Frappe v15. Nothing it uses is v15-specific, but I haven’t tested v14.
-
It complements @meichthys’ frappe_web_push rather than competing with it — that one sends OS-level toasts, this one enhances the in-Desk bell. You can run both.
Feedback, issues and PRs welcome. If the defaults are too loud for you, every part of it can be dialled down or switched off.


