MCPcopy Index your code
hub / github.com/chmouel/raffi

github.com/chmouel/raffi @v0.21.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.21.0 ↗ · + Follow
312 symbols 665 edges 25 files 43 documented · 14% updated 6d agov0.21.0 · 2026-04-14★ 102
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Raffi logo

Raffi Application Launcher

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.

Documentation

Primary documentation lives on the docs site:

Useful entry points:

Screenshot

image

See more screenshots below

Installation

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.

Usage

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/

Window Manager Integration

Sway

set $menu raffi -p
set $super Mod4
bindsym $super+Space exec $menu | xargs swaymsg exec --

Hyprland

$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

User Interfaces

Raffi supports two interface modes:

  • Fuzzel — uses the external Fuzzel launcher, integrates naturally with Wayland environments.
  • Native — built-in iced-based GUI with fuzzy search, keyboard navigation, and theme support.

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

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:

Development

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

Screenshots

File Browser (/)

optimized-file-browse

Currency Converter ($)

image

Calculator

image

Script Filter with github PR browser

optimized-pull-requests-dashboard

Script Filter with timezone converter

image

Light Theme

suspend-to-sleep-then-hibernate

Licence

This project is released under the MIT Licence.

Author

Chmouel Boudjnah

Extension points exported contracts — how you extend this code

EnvProvider (Interface)
A trait for checking environment variables. [2 implementers]
src/lib.rs
UI (Interface)
(no doc) [2 implementers]
src/ui/mod.rs
BinaryChecker (Interface)
A trait for checking if a binary exists. [2 implementers]
src/lib.rs
IconMapProvider (Interface)
A trait for providing an icon map. [1 implementers]
src/lib.rs

Core symbols most depended-on inside this repo

clear
called by 39
src/ui/wayland/state.rs
exists
called by 24
src/lib.rs
expand_config_value
called by 19
src/lib.rs
read_config_from_reader
called by 17
src/lib.rs
try_evaluate_math
called by 14
src/ui/wayland/support.rs
update
called by 12
src/ui/wayland/app.rs
save_query_to_history
called by 11
src/ui/wayland/app.rs
try_parse_multi_currency_conversion
called by 9
src/ui/wayland/currency.rs

Shape

Function 187
Method 60
Class 55
Enum 6
Interface 4

Languages

Rust97%
Python2%
Ruby1%
Go1%

Modules by API surface

src/lib.rs100 symbols
src/ui/wayland/app.rs40 symbols
src/ui/wayland/emoji.rs26 symbols
src/ui/wayland/currency.rs24 symbols
src/ui/wayland/tests.rs17 symbols
src/ui/wayland/types.rs16 symbols
src/ui/wayland/state.rs16 symbols
src/ui/wayland/support.rs14 symbols
src/ui/mod.rs9 symbols
src/ui/wayland/snippets.rs7 symbols
src/ui/wayland/theme.rs6 symbols
src/ui/wayland/browser.rs6 symbols

For agents

$ claude mcp add raffi \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact