
Raffi is an application launcher designed to sit on top of Fuzzel, or, if preferred, operate using its own built‑in interface. It allows commands and scripts to be defined in a YAML configuration file, with support for icons, arguments, conditional visibility, and script execution through configurable interpreters.
Primary documentation lives on the docs site:
Useful entry points:
See more screenshots below
Prebuilt binaries are available from the GitHub releases page. Download the archive or package suitable for your platform. If you intend to use the default interface, Fuzzel must also be installed.
On Arch Linux, Raffi can be installed from the AUR using a helper such as:
yay -S raffi-bin
On NixOS or using Nix (unstable channel):
nix-shell -p raffi
With LinuxBrew or Homebrew:
brew tap chmouel/raffi https://github.com/chmouel/raffi
brew install raffi
From crates.io:
cargo install raffi
To build from source:
git clone https://github.com/chmouel/raffi.git
cd raffi
cargo build --release
If you only require Fuzzel integration and want a significantly smaller binary, build without the native UI:
cargo build --release --no-default-features
This reduces the binary from roughly 15 MB to around 1.1 MB by removing the iced GUI dependency.
Running raffi launches configured entries through the selected interface. If your config does not define any valid launchers yet, Raffi falls back to auto-detected desktop applications from your system's .desktop files.
See the full CLI reference: https://chmouel.github.io/raffi/reference/cli-options/
set $menu raffi -p
set $super Mod4
bindsym $super+Space exec $menu | xargs swaymsg exec --
$super = SUPER
bind = $super, R, exec, (val=$(raffi -pI); echo $val | grep -q . && hyprctl dispatch exec "$val")
See also: Sway integration · Hyprland integration · Fuzzel integration
Raffi supports two interface modes:
The native interface includes built-in addons: calculator, currency converter, file browser, emoji/Nerd Fonts picker, script filters, web searches, and text snippets.
See: UI modes · Themes · Calculator · Currency converter · File browser · Script filters · Web search · Text snippets
Configuration is stored in $HOME/.config/raffi/raffi.yaml. Basic example:
version: 1
launchers:
firefox:
binary: firefox
args: [--marionette]
icon: firefox
description: Firefox browser with marionette enabled
If you do not create a config yet, Raffi can still show installed desktop applications by scanning XDG application entries.
For full configuration reference see the docs:
Contributions are welcome. Issues, feature requests, and pull requests can be submitted via GitHub.
To enable pre‑commit hooks that run cargo clippy before pushing:
pip install pre-commit
pre-commit install
/)$)This project is released under the MIT Licence.
Chmouel Boudjnah
$ claude mcp add raffi \
-- python -m otcore.mcp_server <graph>