Open-source project
davatorium/rofi avatar
davatorium/rofi

Rofi: A Window Switcher, Application Launcher, and dmenu Replacement for Linux

Rofi: A window switcher, application launcher and dmenu replacement

16,425 stars698 forksCNOASSERTION

At a glance

What is it?
Rofi is a configurable popup menu for Linux and BSD that functions as a window switcher, application launcher, SSH launcher, file browser, and drop-in dmenu replacement. It supports X11 and Wayland, uses Cairo for drawing and Pango for font rendering, and can be extended through scripts and plugins.
Who is it for?
Rofi is the right choice for Linux and BSD users who want a keyboard-driven, highly configurable launcher that goes beyond application launching to cover window switching, SSH connections, file browsing, and script-driven custom modes, all in a single tool. The manpages are the authoritative documentation and are more current than the wiki.
Can I use it commercially?
Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
Is it still maintained?
Yes. The repository last received commits 3 days ago.
What is it written in?
Mainly C, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 29, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What Rofi Does and Its Origin

Rofi provides a textual list of options where one or more items can be selected. The README traces its origin to simpleswitcher, written by Sean Pringle as a popup window switcher roughly based on superswitcher. Rofi extended that foundation with an application launcher and SSH launcher, and it can act as a drop-in dmenu replacement. The README credits Sean Pringle for the foundational work and lbonn for adding Wayland support in a fork that was later merged, with official Wayland support landing in 2025.

Rofi targets Linux and BSD desktop users who prefer keyboard navigation over mouse-driven application menus. Its built-in modes cover the most common launcher use cases, while its script and plugin interfaces let users extend it for custom workflows.

Built-in Modes and What Each Does

Rofi ships with eight built-in modes. The `run` mode launches applications from `$PATH` and optionally runs them in a terminal. The `drun` mode reads desktop files and launches applications in XDG-compliant fashion. The `window` mode switches between open windows on an EWMH-compatible window manager, with documented workarounds for i3 and bspwm. The `ssh` mode connects to remote hosts via SSH. The `filebrowser` mode is a basic file browser for opening files. The `keys` mode lists internal keybindings. The `script` mode lets users write custom modes using simple shell scripts. The `combi` mode merges multiple modes into a single list.

Text filtering in all modes supports tokenized matching (any word in any order), case-insensitive and SmartCase variants, and fuzzy, regex, prefix, and glob matching. Results can be ordered by Levenshtein distance or fzf-style scoring. History-based ordering keeps the last 25 choices at the top.

Installation and Building from Source

Rofi 2.0.0 was released on 2025-09-01. The last push to the repository was on 2026-09-27. The README refers readers to `INSTALL.md` for build instructions; the build system is Meson.

Rofi is packaged in most Linux distribution repositories, making package manager installation the simplest path. For distributions that do not have 2.0.0 packaged yet, or for users who want the `next` branch version, building from source with Meson is the documented approach. Wayland support is enabled by default along with X11/xcb. To build without X11 or without Wayland, pass the appropriate Meson option:

bash
meson build -Dxcb=disabled

or:

bash
meson build -Dwayland=disabled

At least one display backend must be enabled. The repository includes a `.build.yml` for CI and a `.gitlab-ci.yml` for GitLab CI, reflecting that the project supports multiple CI platforms.

Configuration and Themes

Rofi is configured through a configuration file, with the location documented in the manpages. The `CONFIG.md` file at the repository root and the `config/` directory provide references. The `themes/` directory in the repository contains bundled theme files that define colors, fonts, and layout.

The README gives a specific example for forcing the X11 backend when both are compiled in:

bash
rofi -x11 ...

On Wayland, Rofi auto-selects the Wayland backend based on the environment. The DPI handling on Wayland has a documented limitation: the output monitor is only known after the first surface is shown, making absolute-size window positioning difficult. The workaround is to pass the DPI value manually via the configuration system. Setting the `dpi` config option to `0` on a single-monitor setup causes Rofi to use that monitor's DPI automatically.

The `themes/` directory and the `doc/rofi-theme.5.markdown` manpage (referenced in the README) cover the theming system. The wiki also documents community themes, which are separate from the bundled ones.

Wayland Support: What Works and What Does Not

Official Wayland support arrived in 2025, contributed originally by lbonn in a fork and merged upstream. The README documents several features that are missing or limited in Wayland mode due to architectural differences between X11 and Wayland.

The `-normal-window` flag is not supported on Wayland and is described in the README as a deprecated toy feature even on X11. The `-monitor -n` option for fine-grained monitor selection is absent on Wayland. The `x-offset` and `y-offset` window positioning parameters work only from screen edges on Wayland. Fake transparency is not available in Wayland mode.

Window mode on KWin is limited because KWin implements different Wayland protocols than the wlr family. Teams running GNOME, KDE Plasma, or other non-wlr Wayland compositors should verify window mode behavior before depending on it.

Scripting and Extension Model

The `script` mode allows writing a custom mode using a shell script that outputs text lines. Rofi reads the script's stdout as the list of options and calls the script again with the selected item. The `Examples/` directory in the repository contains several shell scripts demonstrating this: `rofi-file-browser.sh`, `test_script_mode.sh`, `test_script_mode_color.sh`, and `test_script_mode_delim.sh`, among others. The `i3_switch_workspaces.sh` and `i3_empty_workspace.sh` scripts show integration with the i3 window manager.

For more complex extensions, Rofi also supports C plugins. The `script/` and `source/` directories in the repository hold the core source. The plugin interface allows adding new modes that integrate with Rofi's filtering and selection machinery directly in C rather than through script subprocess calls.

dmenu is the closest alternative to Rofi in function: both read a list from stdin and return a selection, and both appear as a popup in the terminal or launcher context. dmenu is simpler and has no built-in window switching or application launching. Rofi's built-in modes and theming system make it more capable, at the cost of more configuration surface.

Manpages, Documentation, and Version Matching

The README warns explicitly: match the documentation and scripts to the version of rofi used. The manpages are the most up-to-date documentation source, more current than the wiki or the README itself. The manpages included in the repository are `doc/rofi.1.markdown` and related files. The `mkdocs/` directory provides a documentation site configuration.

The project tracks multiple active versions. The `next` branch is the development branch. Version 2.0.0 (released 2025-09-01) is the current stable release; versions 1.7.9, 1.7.8, and older are also maintained on their own branches for users who have not upgraded. The README links directly to the source tree for each version. Using a theme or script designed for version 1.x on a 2.x installation may fail if configuration options changed between versions.

Rofi is licensed under NOASSERTION in the GitHub metadata; the actual license is in the `COPYING` file at the repository root. The `AUTHORS` file lists contributors.

Editorial conclusion

Rofi is the right choice for Linux and BSD users who want a keyboard-driven, highly configurable launcher that goes beyond application launching to cover window switching, SSH connections, file browsing, and script-driven custom modes, all in a single tool. The manpages are the authoritative documentation and are more current than the wiki. Rofi is not a UI toolkit or embeddable library, and it does not support Windows or macOS. Teams running Wayland compositors in the wlr family get full support; those on KWin will find window mode limited, as documented in the README.

Frequently asked questions

What is Rofi in Linux?

Rofi is a popup application launcher, window switcher, SSH launcher, file browser, and dmenu replacement for Linux and BSD. It displays a textual list of options, filters them as you type, and launches or switches to the selected item. It works on both X11 and Wayland.

What are the key differences between Rofi and dmenu?

dmenu is a minimal stdin-to-selection filter with no built-in modes; Rofi adds window switching, application launching from desktop files, SSH, and a file browser as built-in modes. Rofi also has a theming system, fuzzy matching, history ordering, and a Wayland backend, while dmenu has none of these by default.

Where can I find the Rofi configuration file?

The configuration file location is documented in the Rofi manpages, which the README identifies as the most authoritative and up-to-date source. The `CONFIG.md` file in the repository root also describes the configuration format and available options.

What is the best Rofi theme?

The `themes/` directory in the repository contains bundled themes. Community themes are documented on the Rofi wiki. The manpage `doc/rofi-theme.5.markdown` covers the theming syntax; configuration options that control appearance changed between major versions, so a theme's compatibility depends on which version it was written for.

Official sources

  1. davatorium/rofi on GitHub
  2. Issues
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/davatorium-rofi.svg)](https://hysenlabs.com/projects/davatorium-rofi)