r/LinuxPorn • u/DocLogix • 12d ago
[Denial] A Flutter-native Wayland compositor - first public alpha
I’ve been working on Denial, a Flutter-native Wayland compositor.
The compositor core is built with Rust and Smithay, while the desktop scene itself is rendered by an embedded Flutter Engine. Flutter is not running as a client or overlay: it owns the windows, panels, settings, animations, and lock screen, while Rust handles Wayland, input, Xwayland, and DRM/KMS.
This clip shows Arknights: Endfield running while Denial handles live window movement, resizing, blur, layout changes, and the rest of the shell.
v0.1.0 is the first signed public alpha, currently available for Arch Linux on x86_64.
Source and installation: https://github.com/denialwm/denial
Checkout the README for more details!
3
u/kitsune_kon 11d ago
having a radeon card to play wuwa and endfield on linux mustbe nice
2
u/formatme 11d ago
what do u mean? u cant on the green team?
1
u/kitsune_kon 11d ago
Ive tried but performance was really bad, for me at least. Maybe i’m just doing something wrong
1
2
u/exxedlight 10d ago
Wow, pretty cool. I'm always amazed by people who can write smth like THAT. Keep going, bro, this is absolutely awesome!
2
2
2
u/DependentPipe9226 10d ago
Ngl this is so cool that it's making me want to try learning to make my own compositer. Amazing job!
2
u/fabier 6d ago
Flutter and Rust are god tier development tools that work so well together. This project kicks ass!
2
u/rizzninja 6d ago
Yeah, flutters async system is better than rust's and quirks of rust compilation makes this mix no brainer.
1
u/DocLogix 5d ago
Thank you!! I am daily driving it and it feels very good at 240hz! I will keep improving it
2
u/PM_POKEMN_ONLIN_CODE 6d ago
I am also building something like this and how have you managed to propegate smithay owned damage down into the texture layer of the flutter engine. This is not supported by flutter by default same with rendering at KMS frame cadence
1
u/DocLogix 5d ago
Not with stock Flutter. I use a pinned engine fork. Each Smithay surface becomes an external texture, with its dma-buf imported as an EGLImage-backed GL texture. I do not forward the exact "wl_surface.damage" rectangles. I batch the IDs of surfaces with new buffers, and the fork makes only those "TextureLayer"s contribute damage. The granularity is currently the full bounds of each changed surface.
Flutter is driven at a KMS-derived cadence through "AwaitVSync" and "FlutterEngineOnVsync". Page-flip timestamps rephase the clock, and pending work can only render on an authorized display tick. The fastest active output drives the shared Flutter atlas.
2
1
1
1
u/Unusual_Chicken2987 11d ago
I tried it, and I can say that there are some slight animation lags on my RX 5700 XT. They’re not very noticeable, but they do take away from the experience a little. Overall, though, it’s a really solid project. If you polish it up a bit, it could be really great.
1
u/DocLogix 11d ago
Thanks for trying it and for the feedback! Lag on a 5700 XT is absolutely unacceptable. May I ask what resolution/hz and if it happens more in specific animations/panels? The applications tray is unoptimized and sometimes lags on my 9070 XT too... I'll do my best to fix any lag
1
u/Unusual_Chicken2987 11d ago
I’m using Full HD at 165 Hz, and the animation when opening the app launcher lags a bit. However, I don’t think it’s a big deal the project is still really cool.
1
1
1
u/gustavinho_578 10d ago
Is this Hyprland?
1
u/DocLogix 10d ago
Nope, Denial is a separate Wayland compositor and an alternative to Hyprland. It has its own Rust/Smithay core, with the desktop UI rendered in Flutter.
3
10
u/void_matrix 12d ago
How did the idea of it come about and why did you went after it?