Troubleshooting
Panel Not Visible
Problem: Your PanelWindow doesn't appear on screen.
Check:
Anchors. You need at least two opposite anchors for the panel to have a size:
qml// Correct — anchors span the screen width anchors { top: true; left: true; right: true }qml// Wrong — no horizontal anchors, panel has zero width anchors { top: true }Screen. If using
Variants, verifyscreen: modelDatais set.Compositor support. Verify your compositor supports
wlr-layer-shell:bashdbus-monitor --session | grep layer_shellIf no output, the compositor doesn't support the protocol.
Popup Shows at (0,0)
Problem: The popup appears in the top-left corner of the screen instead of near its parent.
Fix: Set the anchor:
PopupWindow {
anchor.window: parentPanel
anchor.rect.x: parentWindow.width / 2 - width / 2
anchor.rect.y: parentWindow.height
}"TypeError: Cannot read property"
Problem: A binding fails with a TypeError.
Check:
- Is the property spelled correctly? QML property names are case-sensitive.
- Is the object actually created? A
Loaderwithactive: falsedoesn't create its child. - Is the import correct? You need
import Quickshell.Services.HardwareforCpuService.
Timer Not Firing
Problem: A Timer doesn't trigger its onTriggered handler.
Check:
Timer {
interval: 1000
running: true // Must be true
repeat: true // Must be true for repeated firing
onTriggered: console.log("tick")
}Common mistake: Setting repeat: false (the default) and expecting the timer to fire repeatedly.
QML Syntax Errors
Run qmllint on your files:
qmllint shell.qmlCommon issues:
- Unmatched braces: Every
{needs a} - Missing commas in arrays:
[1, 2, 3]not[1 2 3] - Wrong import syntax: Use
import Quickshellnotimport "Quickshell"
D-Bus Connection Failed
Problem: Qt.dbusCall() returns null or throws.
Check:
- Bus type. Is the service on the session bus or system bus? UPower uses system bus; MPRIS uses session bus.
- Service running. Is the D-Bus service actually running?bash
dbus-send --session --dest=org.freedesktop.DBus --type=method_call --print-reply /org/freedesktop/DBus org.freedesktop.DBus.ListNames | grep org.mpris - Spelling. Service names, object paths, and interface names are case-sensitive.
Compositor-Specific Issues
Hyprland
Popup flickers: Set dismissOnClickOutside: false — Hyprland's focus handling may conflict.
Window not resizing: Hyprland caches surface sizes. Call zwlr_layer_surface_v1_set_size() explicitly even if the size hasn't changed.
Sway
Panel covers full screen: Sway treats missing anchors as "fill the entire space." Always set at least two opposite anchors.
KWin
Layer surface not supported: KWin (Plasma 6) supports layer-shell but may not handle all properties. Test with exclusionMode: ExclusionMode.None first.
Crash on Startup
Problem: Quickshell crashes immediately.
Debug:
- Run with stderr visible:
quickshell 2>&1 - Check for missing imports — the QML engine aborts on unknown types.
- Verify your
shell.qmlhas a valid root element (ShellRoot). - Test with a minimal config:qml
import Quickshell ShellRoot { Item { } }
Still Stuck?
- Search GitHub Issues
- Ask in the Quickshell community chat
- Check the Quickshell documentation for the latest updates
- Verify anchors, screen binding, and compositor support for invisible panels
- Use qmllint to catch syntax errors before runtime
- Check D-Bus bus type and service availability for integration issues
- Test with a minimal config to isolate crash causes