Update 2026-08-28 — Upstream Electron bug, not Waybar
This is not a Waybar/GDBus bug as originally diagnosed — thanks to @marcioflaviof and @boredland for narrowing it down.
Root cause: Electron 43.3+ registers SNI under org.freedesktop.StatusNotifierItem-PID-N but its Properties.GetAll/Get handler only answers on that well-known name, not on its unique name :1.XXX. Waybar's Gio::DBus::Proxy (correctly) resolves to the unique name -> get_cached_property_names() == [] -> Invalid Status Notifier Item.
Upstream: electron/electron#52674 — last good 43.2. Waybar broken from 43.3.0 through 43.4.x (e.g. Slack 43.4.0 fails on Waybar, see #5240 (comment)). On my Omarchy/Quickshell system 43.4.0-1 is still fine, latest 43.4.1-1 breaks — Quickshell's tray proxy apparently doesn't hit the unique-name path the same way.
Verified: Ping/Introspect OK on both names, GetAll FAIL on :1.XXX only.
Keeping open as tracker for Waybar workaround (Item::proxyReady() fallback/raw call or keep proxy on well-known name). See comments for workarounds.
Original report follows:
Environment:
- Waybar:
0.15.0.r959.g084d874-1 (waybar-git)
- Electron:
43.3.0
- Hyprland:
0.56.2
- Arch Linux, kernel
7.1.6
Reproduction:
- Install Obsidian (
obsidian package, uses Electron 43) with the "Tray" community plugin v0.3.5 by dragonwocky
- Enable the tray icon in the plugin settings
- Observe: no tray icon appears in Waybar
What happens:
Waybar logs:
[error] Invalid Status Notifier Item: org.freedesktop.StatusNotifierItem-<PID>-<N>, /StatusNotifierItem
The item is registered on D-Bus under a well-known bus name (org.freedesktop.StatusNotifierItem-PID-N), which is Electron 43+'s new SNI naming convention. g_dbus_proxy_get_cached_property_names() returns empty for this well-known name, so proxyReady() sees no Id or Category and invalidates the item.
Why it's a Waybar/GDBus issue (not Electron):
The properties are fully accessible via raw D-Bus calls — busctl get-property and dbus-send GetAll both return valid Id, Category, IconPixmap, etc. The problem is specifically that GDBus's proxy caching fails for well-known names of the form org.freedesktop.StatusNotifierItem-*.
Why other tray icons work:
Electron ≤39 and other apps use unique connection names like :1.724/StatusNotifierItem. GDBus caches properties fine for those. Electron 43+ changed to well-known names, exposing this GDBus proxy bug.
Possible fix:
proxyReady() in src/modules/sni/item.cpp should fall back to fetching Id and Category via raw g_dbus_connection_call_sync when get_cached_property_names() returns empty.
Environment:
0.15.0.r959.g084d874-1(waybar-git)43.3.00.56.27.1.6Reproduction:
obsidianpackage, uses Electron 43) with the "Tray" community plugin v0.3.5 by dragonwockyWhat happens:
Waybar logs:
The item is registered on D-Bus under a well-known bus name (
org.freedesktop.StatusNotifierItem-PID-N), which is Electron 43+'s new SNI naming convention.g_dbus_proxy_get_cached_property_names()returns empty for this well-known name, soproxyReady()sees noIdorCategoryand invalidates the item.Why it's a Waybar/GDBus issue (not Electron):
The properties are fully accessible via raw D-Bus calls —
busctl get-propertyanddbus-send GetAllboth return validId,Category,IconPixmap, etc. The problem is specifically that GDBus's proxy caching fails for well-known names of the formorg.freedesktop.StatusNotifierItem-*.Why other tray icons work:
Electron ≤39 and other apps use unique connection names like
:1.724/StatusNotifierItem. GDBus caches properties fine for those. Electron 43+ changed to well-known names, exposing this GDBus proxy bug.Possible fix:
proxyReady()insrc/modules/sni/item.cppshould fall back to fetchingIdandCategoryvia rawg_dbus_connection_call_syncwhenget_cached_property_names()returns empty.