visual_scale_for_window returns 1.0 whenever Overview is not presenting, so gate the window_under_visual walk behind is_presenting() and read the scale straight from the constant. Use hash_map::Entry for the window geometry insert so client_size is only computed on the vacant path, and reuse the elapsed time already sampled for the frame in expire_wait and presentation_size_request instead of calling start_time.elapsed() a second time.
A beautiful, fluid Wayland desktop made to feel like yours.
Install · Configure · Widgets · Notifications
Ferese is a complete Wayland desktop built around personalization. Its custom shell, native settings, live-reloading themes and wallpapers, desktop widgets, fluid animations, and scrolling and tiling layouts work together as one cohesive experience—beautiful by default and unmistakably yours.
Why Ferese
- Flexible layouts: scrolling columns, tree tiling, floating windows and a workspace overview.
- A native shell: menu bar, control center, settings, notifications and desktop widgets designed to belong together, including themed authentication prompts.
- Personal by design: themes, wallpapers, accent colors, blur, borders and motion that update without restarting your session.
- Ready for real setups: gestures, multi-monitor support, fractional scaling, screenshots, background services and session locking.
- Screen sharing: a native display picker and PipeWire video streams for portal-compatible recording and conferencing apps.
The overview brings windows and workspaces into one view. Read more about why Ferese builds the compositor and shell together.
Make it yours
Use the native Settings app for everyday customization, or edit
~/.config/ferese/config.kdl when you want complete control. Ferese reloads
changes as you make them and keeps the last working configuration if an edit is
invalid.
Choose a preset or build your own look. Window behavior, gestures, shortcuts, rules, displays, widgets and login items are configurable too. Start with the configuration guide or the example config.
Install
Install Ferese on Linux with any Wayland-capable login manager, a command-based greeter, or a local TTY. Start with the installation guide for system dependencies and Rust 1.95 or newer, then build as your normal user:
git clone https://github.com/ferese-wm/ferese.git
cd ferese
./scripts/install.sh
Log out and select Ferese at your login screen. For greeters that take a
session command, use /usr/local/bin/ferese-session. The installer preserves
your configuration and other sessions, and retains the previous release for
rollback. The guide covers all startup methods,
optional tools, updates, and recovery.
To preview Ferese inside your current Wayland desktop instead:
cargo build --release --locked -p ferese -p ferese-shell -p ferese-settings -p feresectl -p ferese-lock
target/release/ferese --backend nested --grant-effects --grant-shell-control -- \
target/release/ferese-shell
Get around
These are the built-in defaults; every shortcut and gesture can be changed.
| Shortcut | Action |
|---|---|
| Super + Enter | Open a terminal |
| Super + H / J / K / L | Focus a window |
| Super + R | Cycle column width |
| Super + Tab | Open workspace and window overview |
| Super + M | Switch scrolling / tree layout |
| Super + Shift + S | Select a screenshot area |
Click the bar date for a calendar. Click the battery for power modes and confirmed Restart, Power off and Suspend actions.
Three-finger swipes move between workspaces and windows. Open Control Center → Settings → Shortcuts to change them or assign gestures to other actions.
Documentation
- Why Ferese
- Installation and recovery
- Configuration reference
- Desktop widgets
- Notifications
- Native locker
- Screen sharing and recording
Development
cargo test --workspace --locked
cargo fmt --all --check
Ferese is built in Rust on Smithay. Use release builds when evaluating motion and startup performance, and keep another desktop session available while testing hardware behavior.


