Repository navigation
Releases
Hypoland 0.3.0
Hypoland 0.3.0, based on Hyprland 0.57.0. Hypoland is a fork of Hyprland for old GPUs that only support OpenGL ES 2.0 / OpenGL 2.1, developed on a ThinkPad X200 (GMA 4500MHD) and tested on ten machines running Omarchy.
Highlights
- Reads Hyprland 0.57.0 configs without errors (the
layerscategory, the newbinds/scrollingvalues,hl.get_devices(), new rules and events). The port is partial: 0.57.0's workspace refactor and aquamarine 0.15 are not in yet, seedocs/port-0.57.0.md. - Omarchy's titlebars are built in, with the interface of its hyprbars plugin, which Hypoland cannot load.
- CPU-drawn windows (foot, GTK 3, Qt) cost a third to three quarters less: drawn straight from the client's memory where the GPU allows it, otherwise from linear buffers the compositor fills itself instead of Mesa tiling every update. A fast-scrolling foot 4% instead of 16% of a core on a Dell XPS 13; scrolling GTK 3 on a Mac mini 2014 11% instead of 28%.
- Transparent shell layers no longer cost their whole area: Omarchy's full-screen bar, dock and notification column are drawn only where they have pixels. A full-window frame on the X200 takes 3.4 instead of 8.4 ms of GPU time.
Faster
- Many small damage rectangles are merged into strips on
crocusandr600, and made into a region once per commit: 60 moving squares in a Qt window 59% -> 19% CPU on the X200, 82% -> 26% on a Radeon HD 8570D. - Animations take their values for the vblank the frame is shown at: a focus change among many windows shows a frame sooner (T550 13 -> 2 ms).
- A closing window fades out from a reused snapshot and repaints only its own area: Omarchy's terminal closes in 3.4 instead of 7.8 ms on a Mac mini, GPU time while it fades 30% lower on the XPS.
- Small terminals that keep sending new buffers are copied instead of imported: 40 printing terminals 3.2 instead of 5.4 ms a frame on the X200.
- Focus changes under fcitx5 no longer recompile and rewrite the keymap: 0.1 to 3 ms sooner, less CPU for the compositor and the bar.
- Memory: freed memory is kept for a few seconds (Mesa's per-upload temporary cost a Bay Trail Chromebook 46% CPU, now 16%), idle windows give their second texture back (up to half their GPU memory), heap trimmed after windows close, 1.6 MiB less at idle.
- A hidden cursor stays hidden when a layer maps (Omarchy's menu closes in 6 instead of 31 ms on the X200); the clock is read once per frame instead of eight times.
Fixed
- The compositor could be killed without a trace when a long system call overran rtkit's realtime limit; a guard thread now drops realtime in time and takes it back afterwards.
- Crashes at the end of a session: without a mouse, and with the shell's layers still mapped.
- Stale pixels on the screen, found by the new render checks: zero-copy updates on the X200 and Bay Trail (also old characters flashing in terminals), rims around updates at fractional scales and in magnified buffers, group bars and titlebars at scale 1.5, moved-then-closed subsurfaces, dialogs that shrink, turned or cropped buffers, and screenshots on radeon.
- A window with a hole in its opaque region showed it black; a closing foot window faded out as its border alone.
- radeon: zero-copy windows with rows not a multiple of 64 pixels vanished (the kernel refused the frame).
- freedreno: edges and copies were a colour step off; they take the nearest pixel now.
- crocus: frames after a zero-copy window or a screenshot went to the screen without waiting for the GPU (kitty at 15 instead of 23 fps on Bay Trail).
- iris: half-drawn frames (flicker on the XPS).
- X11 programs work again after Xwayland dies; before, the compositor could hang for good.
bitdepth = 10no longer crashes (ignored with a warning); a GPU hang in the compositor's own drawing no longer aborts it.
Many of these are upstream bugs as well; the CHANGELOG says which and has every measurement.
Changed
- Reports Hyprland 0.57.0 as its base (
hyprctl version,hl.version(),provides=hyprland=0.57.0). - Built against Hyprland 0.57.0's libraries: hyprgraphics 0.6.0 (new soname), hyprutils 0.14.3, hyprland-protocols 0.8.0 from the system.
start-hypolandignores the removed Nix options--no-nixgl/--force-nixgl.HYPOLAND_ALPHA_BOUNDS=0,HYPOLAND_SHM_TEXTURE=0andHYPOLAND_SHM_ZEROCOPY=0switch the new drawing paths off (README,hypoland(1)).hypoland-bench, a second package: the benchmark, session and render checks, soak runs andhypoland-kmsgrab; newghostty-scrollandkitty-scrollworkloads.
Install
Arch Linux (x86_64), and Omarchy on aarch64 (Snapdragon laptops, Apple Silicon through omarchy-mac) with the aarch64 file:
sudo pacman -U hypoland-0.3.0-1-x86_64.pkg.tar.zstIt provides and conflicts with hyprland; Omarchy's session starts it unchanged. Built against the Arch packages of 2026-11-03 (hyprutils 0.14.3, hyprlang 0.6.8, hyprcursor 0.1.13, hyprgraphics 0.6.0, hyprwire 0.3.1); if pacman reports newer ones, build it yourself with makepkg -f in packaging/arch. Other distributions: see the README, and build for baseline x86-64, not -march=native.
Hypoland is an independent project. It is not affiliated with or endorsed by Hyprland or its developers.
Hypoland 0.2.0
Hypoland 0.2.0, based on Hyprland 0.56.0. Hypoland is a fork of Hyprland for old GPUs that only support OpenGL ES 2.0 / OpenGL 2.1, developed and tested on a ThinkPad X200 (GMA 4500MHD) running Omarchy.
Faster
- Animations tick once per frame. Every frame already ticks right before it draws, but a timer also ticked every millisecond while something animated, up to 16 times per frame at 60 Hz. Workspace switching with animations: compositor CPU 14.2% -> 6.1%, the same number of frames.
- The animation tick reads the clock once instead of four times. Without a usable TSC every clock read is a system call and a slow HPET read.
- Windows with an opacity of 0.98 or more are drawn fully opaque. The difference cannot be seen, and an opaque window is not blended and hides what is behind it. Omarchy gives every active window 0.985.
- The wallpaper is drawn as opaque and the background color is no longer painted under it: the lowest surface of the background layer, when it covers the whole monitor without fade or blur. 6.89 -> 5.78 ms of GPU time per frame with a window at an opacity of 0.9.
- Faster start of the compositor: it answers IPC about 1 s sooner (1.8-2.1 -> 0.7 s after exec) and uses about 20% less CPU in its first seconds.
- aquamarine no longer probes display connectors the kernel knows are disconnected. Each probe waited for a DDC timeout of about 160 ms, twice per connector.
- Keyboards with the same rules share one keymap instead of compiling their own (5 keyboards on the X200).
- The "screen share denied" text is rendered when it is first needed, so pango and fontconfig are not loaded at every start (about 130 ms of CPU and a thread).
- XCursor shapes are loaded when they are first used instead of the whole theme.
- Xwayland starts when the first X11 program connects instead of together with the compositor.
DISPLAYis set from the start as before. An unused Xwayland costs 150 ms of CPU and 31 MiB. In an Omarchy session fcitx5 and xdg-settings still start it a few seconds after login.
Changed
- Transparent pixels of a wallpaper show over black instead of over
misc:background_color. - The config written for new users (
example/hyprland.lua) matches Hypoland's defaults: blur, shadows, animations and rounded corners are off and the active border is a single color instead of a gradient. - The Arch package provides and conflicts with
omarchy-hyprland-titlebars, a Hyprland plugin that needshyprland=0.56.2and stopped Omarchy updates. Hypoland has no plugins; Omarchy shows no titlebars without it. - The Arch package lists
wf-recorderas an optional dependency: gpu-screen-recorder does not start on GLES 2 hardware, and Omarchy records withwf-recorderinstead when it is installed.
Fixed
- Security and crash fixes from upstream Hyprland: an overflow in the X11 WM hints, new input grabs while the session is locked, crashes with a bell on a null surface, screen sharing on a removed monitor and Lua errors that are not strings, a leaked input capture fd and permission state kept after a client is gone.
- More of them: a crash in cursor capture after a monitor is removed, activation tokens with invalid serials are rejected (no focus stealing with made-up tokens), dmabuf plane fds are owned through buffer creation (no leaked or double-closed fds on bad buffers).
- Other fixes from upstream Hyprland: screen recording could keep direct scanout blocked, blur lost xray while a window faded out, the cursor image did not follow a cursor theme change, X11 floating windows at 0,0 were misplaced, X11 modal windows and urgency hints, primary selection with data control and old wlr clients,
groupbar:disable_when_only, tag rules that stopped matching, silent moves away from the focused window and the scrolling layout's scroll inhibitor.input:scroll_factorgoes up to 100 and spring curves takedamping(dampeningstill works). Also: X11 clipboards were reflected back to X11, windows were maximized on map, keyboard focus stayed with a pointer constraint under an exclusive layer, multi-key binds shadowed each other, the cursor lost focus in a few cases, the "move" rule ignored the "size" rule, master layout window drags and the scrolling layout's fullscreen position after the work area changed. - Windows, layers and popups that close while the screen is off (DPMS, e.g. a locked laptop) no longer keep a snapshot of the size of the monitor in GPU memory until the screen comes back: 60 windows closed with the screen off cost 474 MB on a 1920x1080 ThinkPad T550, now nothing.
- A package built after a build with another prefix (e.g.
/usr/local) installed a session file that pointed at that prefix and did not start: the session file is generated in the build directory now. - No more "pixman_region32_init_rect: Invalid rectangle passed" in the log when many windows share a workspace: a window squeezed below its border and gaps has a negative size, it is skipped before it reaches pixman.
- Screen recording with
wf-recorderon a monitor with a scale other than 1 made a new capture session for every frame and none of them were freed. Sessions of programs that had quit were never freed either. A 7 hour test on the ThinkPad T550 (scale 1.5) collected 13,500 sessions; the compositor grew by 21 MiB and its CPU time with a 60 fps client went from 8% to 27%, as every frame and every timer went through all sessions and their timers. Now a recording uses one session and it is freed when the program quits. - Fixes from upstream aquamarine: input could stop after switching to a text console and back, a use after free when an output goes away with a frame pending, stale state on a monitor that is plugged in again, a leaked fd of CPU-side buffers and a crash when logging without a backend.
Other
- The web page's FAQ says why these changes are not part of Hyprland.
- The web page's FAQ says that Hyprland plugins do not work and which protocols input tools can use instead.
- The web page's FAQ says how to record the screen (
wf-recorder) and why Omarchy's floating workspaces have no titlebars. - The documentation and the help of
hyprctlandstart-hypolandare up to date:hyprctl keywordis not available with a Lua config (useeval), plugin requests always fail, the splash text is off by default rather than removed.
Install
On Arch Linux, download hypoland-0.2.0-1-x86_64.pkg.tar.zst below and install it with:
sudo pacman -U hypoland-0.2.0-1-x86_64.pkg.tar.zstIt provides and conflicts with hyprland, so it replaces the installed Hyprland; Omarchy's session starts it unchanged. It is built for baseline x86-64 against the Arch packages of 2026-10-21 (hyprutils 0.14.2, hyprlang 0.6.8, hyprcursor 0.1.13, hyprgraphics 0.5.1, hyprwire 0.3.1). If pacman reports newer versions of these libraries, build the package yourself in packaging/arch with makepkg -f.
For other distributions see the README, and build for baseline x86-64, not -march=native.
The full list of changes is in CHANGELOG.md.
Hypoland is an independent project. It is not affiliated with or endorsed by Hyprland or its developers.
Hypoland 0.1.0
The first release of Hypoland, a fork of Hyprland 0.56.0 for old GPUs that only support OpenGL ES 2.0 / OpenGL 2.1.
Hyprland needs OpenGL ES 3.0 and does not start on such hardware. Hypoland targets Intel Gen4 / Gen4.5 graphics (GMA X3100 / 965GM, GMA 4500MHD / GM45) and is developed and tested on a ThinkPad X200, where it runs a full Omarchy 4 desktop.
Highlights
- The renderer and all shaders run on OpenGL ES 2.0 / GLSL ES 1.00. The embedded aquamarine is patched the same way.
- Drop-in for Hyprland: the same
hyprland.luaconfig,hyprctl, IPC sockets, JSON output, event names andXDG_CURRENT_DESKTOP=Hyprland. Options of removed features are still accepted and ignored, so existing configs load without errors. - Frames are drawn straight into the scanout buffer when nothing needs the work buffer, and only the damaged area is cleared.
- shm textures are double buffered, which halves the compositor's CPU time for Chromium on Gen4 (26.8% -> 12.8%).
- Less memory: no second EGL context for the primary GPU, no glslang, the shader compiler is released after use, and fewer and smaller GPU buffers.
Measured on the ThinkPad X200 (1280x800, Omarchy 4)
- Idle: 0% compositor CPU, about 55 MiB PSS
weston-simple-egl: 60 fps- 4 windows with rounding, shadows, blur, opacity, dim and animations: 58-60 fps
glmark2-es2-wayland: 127
Differences from Hyprland
- Removed: color management and HDR (
wp_color_manager_v1is not advertised), the ICC 3D LUT (ICC profiles still apply their gamma ramps through KMS), motion blur, the plugin system and hyprpm, the blur variants ripple, water, fluid_jar, prism and acrylic (they fall back to dual Kawase), the welcome app, update news and donation popup. - Off by default: blur, shadows, animations and hyprcursor (XCursor themes are used).
quirks:skip_non_kms_dmabuf_formatsdefaults to off, otherwise transparent surfaces turn black on Gen4.- Screen shaders must be GLSL ES 1.00. Shaders written for Hyprland are GLSL ES 3.00 and do not compile.
- The binaries are
hypolandandstart-hypoland(start-hyprlandis a symlink).hyprctl versionstill reports Hyprland 0.56.0 on its first line and addsHypoland 0.1.0, based on Hyprland 0.56.0.
Install
On Arch Linux, download hypoland-0.1.0.r617.gbce71edc6-1-x86_64.pkg.tar.zst below and install it with:
sudo pacman -U hypoland-0.1.0.r617.gbce71edc6-1-x86_64.pkg.tar.zstIt provides and conflicts with hyprland, so it replaces the installed Hyprland; Omarchy's session starts it unchanged. It is built for baseline x86-64 against the Arch packages of 2026-09-28 (hyprutils 0.14.2, hyprlang 0.6.8, hyprcursor 0.1.13, hyprgraphics 0.5.1, hyprwire 0.3.1). If pacman reports newer versions of these libraries, build the package yourself in packaging/arch with makepkg -f.
For other distributions see the README, and build for baseline x86-64, not -march=native.
Hypoland is an independent project. It is not affiliated with or endorsed by Hyprland or its developers.
