Frappe Notification Alerts — unread count badge, animated bell and notification sound for the Desk

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 no bench build needed

  • extend_bootinfo — ships settings + the current unread count in frappe.boot, so the bell can alert on first paint with no extra round trip

  • doc_events on Notification Log (after_insert, on_update, on_trash) — publishes realtime events with an authoritative count

  • frappe.realtime — its own notification_alerts:* events, with Frappe’s core notification event 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 @meichthysfrappe_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.

2 Likes

:+1:t2:

We need this built-in out of the box feature in Frappe Framework app in v16 from Frappe.