Hyprland

Application

hyprwm/Hyprland

Independent dynamic tiling Wayland compositor with extensive eye candy and customization.

Overview

Hyprland is a 100% independent, dynamic tiling Wayland compositor that does not sacrifice on looks. It provides the latest Wayland features, high customizability, eye candy, powerful plugins, and easy IPC, written in C++. Supports gradient borders, blur, animations, shadows, and tearing for gaming.

README Preview

\n\n\n\n\n\n[![Badge Workflow]][Workflow]\n[![Badge License]][License] \n![Badge Language] \n[![Badge Pull Requests]][Pull Requests] \n[![Badge Issues]][Issues] \n![Badge Hi Mom]\n\n\n\nHyprland is a 100% independent, dynamic tiling Wayland compositor that doesn't sacrifice on its looks.\n\nIt provides the latest Wayland features, is highly customizable, has all the eyecandy, the most powerful plugins,\neasy IPC, much more QoL stuff than other compositors and more...\n\n\n\n---\n\n**[  Install  ][Install]** \n**[  Quick Start  ][Quick Start]** \n**[  Configure  ][Configure]** \n**[  Contribute  ][Contribute]**\n\n---\n\n\n\n\n\n# Features\n\n- All of the eyecandy: gradient borders, blur, animations, shadows and much more\n- A lot of customization\n- 100% independent, no wlroots, no libweston, no kwin, no mutter.\n- Custom bezier curves for the best animations\n- Powerful plugin support\n- Built-in plugin manager\n- Tearing support for better gaming performance\n- Easily expandable and readable codebase\n- Fast and active development\n- Not afraid to provide bleeding-edge features\n- Config reloaded instantly upon saving\n- Fully dynamic workspaces\n- Two built-in layouts and more available as plugins\n- Global keybinds passed to your apps of choice\n- Tiling/pseudotiling/floating/fullscreen windows\n- Special workspaces (scratchpads)\n- Window groups (tabbed mode)\n- Powerful window/monitor/layer rules\n- Socket-based IPC\n- Native IME and Input Panels Support\n- and much more...\n\n\n\n\n\n\n# Gallery\n\n\n\n![Preview A]\n\n\n\n![Preview B]\n\n\n\n![Preview C]\n\n\n\n\n\n\n# Special Thanks\n\n\n\n**[wlroots]** - *For powering Hyprland in the past*\n\n**[tinywl]** - *For showing how 2 do stuff*\n\n**[Sway]** - *For showing how 2 do stuff the overkill way*\n\n**[Vivarium]** - *For showing how 2 do stuff the simple way*\n\n**[dwl]** - *For showing how 2 do stuff the hacky way*\n\n**[Wayfire]** - *For showing how 2 do some graphics stuff*\n\n\n\n\n[Configure]: https://

FAQ (5)

Troubleshooting
How to fix a duplicate ghost cursor appearing at (0,0) on a second monitor after booting Hyprland?

This multi-monitor cursor rendering bug was fixed in Hyprland 0.38.1. Upgrade Hyprland to 0.38.1 or newer and restart the session. As a temporary workaround on older versions, move the mouse or switch focus to the monitor showing the ghost cursor; the extra cursor at the top-left corner disappears immediately.

GitHub Issue #3973
Troubleshooting
How to fix the VRAM leak when unplugging and replugging a DRM monitor in Hyprland?

Upgrade Hyprland and Aquamarine to a build containing the fixes: Aquamarine PR #165 drops KMS framebuffer references when a CRTC is disabled or a connector is disconnected, and the associated Hyprland change calls OpenGL destroyMonitorResources on monitor disconnect. This prevents each DRM display replug from retaining GBM/GEM/KMS resources in VRAM. As a temporary workaround on older versions, avoid repeated monitor unplug/replug cycles and restart Hyprland to release the leaked VRAM.

GitHub Issue #10098
Troubleshooting
How can I explicitly show or hide a Hyprland special workspace instead of only toggling it?

Use a temporary unused special workspace to reset visibility first. To hide the currently visible special workspace, toggle an empty workspace twice:

hyprctl dispatch togglespecialworkspace __TEMP
hyprctl dispatch togglespecialworkspace __TEMP

To deterministically show a specific special workspace, reset visibility first, then toggle it:

hyprctl dispatch togglespecialworkspace __TEMP
hyprctl dispatch togglespecialworkspace __TEMP
hyprctl dispatch togglespecialworkspace <NAME>

Replace <NAME> with your special workspace name. On newer Hyprland builds that include the added dispatcher, you can also hide the current special workspace with:

hyprctl dispatch hidespecialworkspace

GitHub Issue #8594
Troubleshooting
How do I fix the XF86ScreenSaver keybind not working in Hyprland?

Upgrade Hyprland to a build containing the "Fix keybinds xkb names" fix, then reload:

bind = ,XF86ScreenSaver, exec, hyprctl notify 5 2000 "rgb(22DA6E)" "i am working"

Run:

hyprctl reload

As a workaround on affected versions, bind the physical keycode reported by wev instead of the keysym. In this issue wev reports key 160, so use:

bind = ,code:160, exec, hyprctl notify 5 2000 "rgb(22DA6E)" "i am working"

Then run hyprctl reload. Verify your own keycode with wev because it can differ between keyboards.

GitHub Issue #5892
Troubleshooting
How to fix Samsung Smart TV briefly flickering black on mouse clicks over HDMI in Hyprland?

There is no confirmed Hyprland/Aquamarine fix in the issue, but a reported workaround for Samsung HDMI black flashes is to keep silent audio playing, which appears to keep the TV's HDMI link active.

Test it with PipeWire/PulseAudio:

pw-cat --playback --raw --rate=48000 --channels=2 --format=s16 /dev/zero

If the flicker stops while the command is running, stop it with Ctrl+C and create a persistent user service:

mkdir -p ~/.config/systemd/user
cat > ~/.config/systemd/user/hdmi-silent-audio.service <<'EOF'
[Unit]
Description=Silent audio keep-alive for Samsung HDMI flicker

[Service]
ExecStart=/usr/bin/pw-cat --playback --raw --rate=48000 --channels=2 --format=s16 /dev/zero
Restart=always

[Install]
WantedBy=default.target
EOF

systemctl --user daemon-reload
systemctl --user enable --now hdmi-silent-audio.service

This workaround is reported for a similar Samsung TV issue and was not specifically confirmed on the M50D. Settings such as disabling blur, animations, hardware cursors, damage tracking, direct scanout, VRR, PSR, FBC, or DC did not resolve the original Hyprland-specific case.

GitHub Issue #13338