Rofi alternatives for Wayland: app launcher, window switcher and picker for Linux

Rofi alternatives for Wayland: app launcher, window switcher and picker for Linux
Screenshot of Ilia - Desktop Executor, part of the Regolith Desktop

Rofi is a popular window switcher, application launcher and dmenu replacement for Linux. dmenu was a tiny text-only utility to display a list of binaries or lines of text and select one. The dmenu design follows the Unix philosophy to "do one thing well". Simple!

Rofi took the idea and dressed it up with better graphics, displaying more lines, adding icons, and adding support for launching desktop apps as well as binaries.

But Rofi was designed for Xorg, an older display technology that is no longer maintained. Here we look at options inspired by dmenu and Rofi that designed for Wayland, the newer display technology for Linux.

Why is a dmenu tool useful?

It's such a simple and and easy to use design that a single person can create a custom utility to "pick" any number of things in an afternoon, and many have. Here are somethings you can do with a tool that works like dmenu:

Rofi, with Wayland support

Rofi last had a release in 2022. While it's wiki says that official Wayland support is 'hopefully' coming, lbonn's temporary rofi fork that supports Wayland seems fairly permanent now. If you like Rofi just the way it is, try this.

Also, if you like send massive amounts of lines to filter– like more than 50,000– Rofi is currently the only one that start displaying lines piped in immediately even before all the lines arrived.

Ilia, the new kid on the block

The Regolith project has worked to make a slick desktop environment based first on i3 and later for Sway and Wayland. To do that, they didn't just curate apps and add some config files, they created some new apps to pull things together and one of those is "Ilia the Desktop Executor":

Ilia - Desktop Executor

The screenshot is showing off a unique feature – displaying keybindings as a kind of a cheatsheet. Sway doesn't currently (mid-2024) have the ability to introspect its keybindings so Ilia instead parses a comment format from the config files– it works pretty well! Not shown in the screenshot is "text list mode", which works like dmenu where you can pass in a list of options and select one.

The challenge you may find with Ilia is finding a package for it outside of the Regolith desktop. Regolith is based on Ubuntu, so Ubuntu users will have an easier time trying this.

Fuzzel - the best among minimalist options

There are several options that focus on minimalism and speed: They can launch apps or pick an item from list like dmenu and they do it very fast.

For this category of tool, I recommend Fuzzel. It has a number of rofi and dmenu features, good documentation and ongoing maintenance. It's also widely packaged. See my page on Fuzzel for a more in-depth look at that.

Here will take a tour of some of the other options.

Wofi – Rofi, but for Wayland?

wofi 1.4.1 - Still cutting off icons

The name wofi implies that it might be "Wayland + Rofi". Wofi is definitely inspired by Rofi, but it doesn't try to be compatible. Compared to Fuzzel, Wofi has a more complex set of dependences, using GTK, CSS and Pango to render the output.

A benefit of wofi that are that it supports Pango (HTML) markup for the entries. By default, wofi doesn't display icons. When it does, the default design doesn't have much concern for design. Entries at the bottom will get cut off and there's no margin between the icons and the text.

One feature that wofi has that Fuzzel 1.10 does not is the --search option to pre-fill the search box and immediately filter the results.

Wofi has development has also been slow. For example, three years ago there was an issue opened to allow using wofi as a single-line prompt, something Rofi can do. The feature has not been added to Wofi, but it's not possible with Fuzzel.

If you just run wofi, it tells you needs a mode, but then doesn't tell you want the possible modes are:

$ wofi
I need a mode, please give me a mode, that's what --show is for

If you follow the advice and use --show, it still doesn't tell you want the possible modes are:

❯ wofi --show
wofi: option '--show' requires an argument
I need a mode, please give me a mode, that's what --show is for

OK, you try man wofi to find the possible modes, but they aren't there. It tells you read man 7 wofi.

It turns out there are just three modes, "run", "drun" and dmenu". If Wofi wanted to provide a better use experience, it could have mentioned this up front, or just started the drun mode by default. This would have been better:

$ wofi
Missing --show with one of: drun, run, dmenu

Yofi

yofi 0.2.2 with icons enabled. Running it spews many lines of SVG parsing errors.

Yofi supports launching desktop applications, binaries and has a dmenu mode, which it calls "dialog". Like Fuzzel, has added some mouse support.

  • Yofi has very little documentation in the README, no "man" page, and sparse documentation with "yofi help" as well. The documentation is found on its wiki. It would be nice of a bare man page or yofi --help mentioned that. While yofi supports icons, they are not enabled by default.

Unlike Wofi, Fuzzel and Rofi, Yofi does not support support showing icons in dmenu ("dialog") mode. A primary feature of Yofi seems to be that it's written in Rust.

Overall, Yofi seems to have fewer features and configuration options than Fuzzel.

tofi

tofi 0.9.1

The name tofi is because it's a tiny dynamic menu for Wayland. tofi provides three binaries: tofi for a dmenu-like behavior tofi-run for listing binaries and tofi-drun for displaying desktop apps. It's written in C and does not support icons currently.

tofi lacks some rofi/dmenu support that alternatives like wofi and fuzzel already have. For example, in mid-2024, tofi still had not added support for the -p prompt flag, something wofi and fuzzel have had for at least a couple of years.

One visual feature some people like about Tofi is how the list of options to pick is aligned with the right of the prompt. The effect can be emulated in Fuzzel as long as a single-character prompt is used.

bemenu

Bemenu is a dmenu-inspired tool that can run on in the terminal on X11 or Wayland. Bemenu does not have a built-in app launcher and does not support icons so it's a "no" vote for me. A curious feature of bemenu though is that it supports both Vim bindings in addition to conventional bindings. If you want to use exactly the same tool as a picker in the terminal, maybe this could be a tool for you.

dmenu-wl / wmenu

Like the classic dmenu, the Wayland-specific dmenu-wl take does not support app launching or icons. It can be used to create a single-line prompt to collect input, but fuzzel can do that too:

 echo '' | fuzzel --dmenu --prompt='>: ' -l 0 --anchor bottom

There's an issue open with Fuzzel to simplify that syntax:

Feature request: --prompt-only (dmenu -po)
This is a feature that exists in `dmenu`, `dmenu-wl` and `rofi` in dmenu mode. I don’t see it `bemenu`. The docs describe it like this: > same as -p but don’t wait for STDIN. Useful for a prompt with no menu It’s useful in combination with the --anchor support that was just added, because i…

The one stand-out feature of dmenu-wl is that it can display a full-width bar across the top or bottom of the monitor, while Fuzzel current expresses the width only in characters. I've opened an issue for Fuzzel to support this feature as well:

Feature Request: Full-width, single-line display like dmenu / dmenu-wl
I think Fuzzel can completely replace the functionality and design features of dmenu-wl except for one display feature: The classic dmenu display where it appears as a full-width bar across a monitor at the top or bottom. This is not personally important to me but perhaps this issue will a…

There's a fork of dmenu-wl called wmenu that's been updated more recently. Wmenu doesn't attempt to document any advantages it has over dmenu-wl. I can see that Wmenu is missing the `--prompt-only ` feature that dmenu-wl has. See the wmenu docs here.

If you really want the classic dmenu look, maybe one of these will be a good fit for you.

j4-dmenu-desktop

j4-dmenu-desktop is a bit different than any other others above because it's not trying to emulate dmenu or rofi. Instead, it follows the Unix philosophy of "do one thing well" and is only concerned with processing `.desktop` launcher files to build a menu to select one to launch. It then passes the result to a dmenu-like utility to launch them. It currently doesn't support icons.

If you want to use one of the text-only launchers like dmenu-wl or wmenu, then perhaps pairing them with j4-dmenu-desktop to launch desktop app will be of interest to you.

Summary

Use Rofi's Wayland fork if you want exactly Rofi, use dmenu-wl for a dmenu clone, try Ilia if you multi-function launcher and picker and try Fuzzel if you want a focused launcher and picker for Wayland with a good balance of features, documentation and maintenance. Enjoy!