App launcher and fuzzy finder for Wayland, inspired by rofi(1) and dmenu(1).
  • C 94.3%
  • Shell 3.8%
  • Meson 1.6%
  • Python 0.3%
Find a file
Image Whyme Lyu 179cc8e51d
Some checks are pending
ci/woodpecker/pr/woodpecker Pipeline is pending approval
ci/woodpecker/pull_request_closed/woodpecker Pipeline is pending approval
builds.sr.ht/freebsd-x64 Job completed
ci/woodpecker/push/woodpecker Pipeline was successful
Move delete-line closer to other delete-line-*
2025-12-24 09:32:04 +08:00
.builds ci: freebsd: 'wlroots' is not a package 2025-03-05 09:14:53 +01:00
.forgejo/issue_template docs: typo fix in issue template 2025-02-25 11:58:17 -05:00
3rd-party/nanosvg nanosvg: update to ea6a6aca009422bba0dbad4c80df6e6ba0c82183 2025-01-24 07:05:33 +01:00
completions config: add --mesg, --mesg-mode and --message-color command line options 2025-11-19 08:20:19 +01:00
doc Move delete-line closer to other delete-line-* 2025-12-24 09:32:04 +08:00
external external: wlr-protocols: bump 2021-06-27 10:52:14 +02:00
nanosvg meson/nanosvg: add support for linking against system's nanosvg 2024-07-18 18:09:55 +02:00
subprojects subprojects: use meson *.wrap files for tllist+fcft 2020-12-24 13:26:02 +01:00
test match: fzf: prioritize matches at word boundary, like fzf 2025-10-25 18:41:38 -04:00
.editorconfig internal: Add .editorconfig for shared cross-editor settings 2025-08-24 09:51:46 +02:00
.gitignore gitignore: ignore .cache 2022-08-09 18:42:34 +02:00
.gitmodules fcft/tllist: remove git submodules 2020-01-11 14:47:47 +01:00
.woodpecker.yaml ci: "meson [options]" is deprecated (do "meson setup [options]" instead) 2025-01-04 12:40:11 +01:00
application.c launch-prefix: Pass more environment variables 2025-11-12 11:52:12 +01:00
application.h launch-prefix: Pass more environment variables 2025-11-12 11:52:12 +01:00
CHANGELOG.md config: add --mesg, --mesg-mode and --message-color command line options 2025-11-19 08:20:19 +01:00
char32.c macros: replace direct use of __attribute__ with portable wrapper macros 2025-01-30 07:28:16 +00:00
char32.h macros: replace direct use of __attribute__ with portable wrapper macros 2025-01-30 07:28:16 +00:00
clipboard.c clipboard: disable debug logging 2025-05-11 18:04:07 +02:00
clipboard.h Add support for pasting text 2024-08-24 08:34:51 +02:00
column.c column: fix off-by-one when splitting input into columns 2025-08-23 10:26:17 +02:00
column.h config: --nth-delimiter=CHR 2025-08-12 07:39:31 +02:00
config.c config: add --mesg, --mesg-mode and --message-color command line options 2025-11-19 08:20:19 +01:00
config.h config: add --mesg, --mesg-mode and --message-color command line options 2025-11-19 08:20:19 +01:00
debug.c render: render match list using multiple rendering threads 2024-08-14 09:50:24 +02:00
debug.h render: render match list using multiple rendering threads 2024-08-14 09:50:24 +02:00
dmenu.c dmenu: add support for --match-nth 2025-09-14 07:53:01 +02:00
dmenu.h dmenu: add support for --match-nth 2025-09-14 07:53:01 +02:00
event.c dmenu: start rendering input before STDIN has been closed 2024-08-20 08:08:04 +02:00
event.h dmenu: start rendering input before STDIN has been closed 2024-08-20 08:08:04 +02:00
fdm.c Add xmalloc.h and xsnprintf.h and use to improve/simplify error handling 2025-01-13 09:28:55 +01:00
fdm.h fdm: sync with latest FDM - fdm_del() now closes FD 2019-11-05 11:00:15 +01:00
fuzzel.ini feat: config/cli option to disable mouse input 2025-07-31 17:16:55 +02:00
generate-version.sh generate-version: handle git repo not having any tags 2021-10-11 20:22:58 +02:00
icon.c launch-prefix: Pass more environment variables 2025-11-12 11:52:12 +01:00
icon.h icon: in application mode (not dmenu), filter out non-application icon theme dirs 2025-05-16 17:19:10 +02:00
key-binding.c key-binding: fix crash in debug builds, if exiting early 2025-07-30 15:43:07 +02:00
key-binding.h Add delete-line binding 2025-06-23 11:56:36 -04:00
LICENSE license: fix bad copy-paste: first commit was in 2019 2020-07-25 08:51:51 +02:00
log.c macros: replace direct use of __attribute__ with portable wrapper macros 2025-01-30 07:28:16 +00:00
log.h macros: replace direct use of __attribute__ with portable wrapper macros 2025-01-30 07:28:16 +00:00
macros.h macros: replace direct use of __attribute__ with portable wrapper macros 2025-01-30 07:28:16 +00:00
main.c config: add --mesg, --mesg-mode and --message-color command line options 2025-11-19 08:20:19 +01:00
match.c match: fzf: prioritize matches at word boundary, like fzf 2025-10-25 18:41:38 -04:00
match.h match: fzf: prioritize matches at word boundary, like fzf 2025-10-25 18:41:38 -04:00
meson.build test: add test for --match-nth 2025-09-14 07:53:18 +02:00
meson_options.txt Add resvg as SVG render option. 2025-08-24 09:44:52 +02:00
nanosvg.c meson/nanosvg: add support for linking against system's nanosvg 2024-07-18 18:09:55 +02:00
nanosvgrast.c meson/nanosvg: add support for linking against system's nanosvg 2024-07-18 18:09:55 +02:00
path.c path/xdg/main: include errno(3) description in more LOG_WARN() messages 2025-01-28 17:55:07 +00:00
path.h Add --list-executables-in-path command line option 2024-01-05 11:14:36 +00:00
PKGBUILD meson: "meson [options]" is deprecated, do "meson setup [optins]" instead 2025-08-28 07:20:37 +02:00
png-fuzzel.h Implement gamma-correct blending 2025-05-11 18:04:09 +02:00
png.c Implement gamma-correct blending 2025-05-11 18:04:09 +02:00
prompt.c render: scroll input to ensure cursor is always visible 2025-07-09 08:01:25 +02:00
prompt.h Add xmalloc.h and xsnprintf.h and use to improve/simplify error handling 2025-01-13 09:28:55 +01:00
README.md docs: README/Changelog/code comment for touchscreen support 2025-06-23 18:17:04 +02:00
render.c config: add --mesg, --mesg-mode and --message-color command line options 2025-11-19 08:20:19 +01:00
render.h config: add --mesg, --mesg-mode and --message-color command line options 2025-11-19 08:20:19 +01:00
shm.c Implement gamma-correct blending 2025-05-11 18:04:09 +02:00
shm.h Implement gamma-correct blending 2025-05-11 18:04:09 +02:00
srgb.py Implement gamma-correct blending 2025-05-11 18:04:09 +02:00
stride.h Add missing file 2019-09-29 13:00:03 +02:00
timing.c timing: finish: use time_stamp() when stop == NULL 2025-09-12 17:11:34 +02:00
timing.h timing: rename time_end() -> time_finish() 2025-09-12 17:11:32 +02:00
uri.c Add xmalloc.h and xsnprintf.h and use to improve/simplify error handling 2025-01-13 09:28:55 +01:00
uri.h Add support for pasting text 2024-08-24 08:34:51 +02:00
wayland.c config: add --mesg, --mesg-mode and --message-color command line options 2025-11-19 08:20:19 +01:00
wayland.h wayland: improve scrolling with mouse wheel and touchpad 2025-09-08 07:04:43 +02:00
xdg.c launch-prefix: Pass more environment variables 2025-11-12 11:52:12 +01:00
xdg.h config: new option filter-desktop 2023-06-06 09:31:32 -07:00
xmalloc.c Add xmalloc.h and xsnprintf.h and use to improve/simplify error handling 2025-01-13 09:28:55 +01:00
xmalloc.h Add xmalloc.h and xsnprintf.h and use to improve/simplify error handling 2025-01-13 09:28:55 +01:00
xsnprintf.c Add xmalloc.h and xsnprintf.h and use to improve/simplify error handling 2025-01-13 09:28:55 +01:00
xsnprintf.h Add xmalloc.h and xsnprintf.h and use to improve/simplify error handling 2025-01-13 09:28:55 +01:00

CI status

Fuzzel

Fuzzel is a Wayland-native application launcher and fuzzy finder, inspired by rofi and dmenu.

Packaging status

Screenshot

Screenshot

Fuzzel, with transparency, on top of a browser window showing a diff of a fuzzel commit

Features

For app launching

  • Fuzzy-find applications from a list and launch them
  • Icon support
  • Remembers frequently launched applications
  • Customize which .desktop files are searched
  • Option to filter apps based on OnlyShowIn and NotShowIn
  • Startup notification support
  • Launch prefix option to customize how apps are launched
  • Display a large icon of current selection if there are only a few matches
  • Option to display executables in $PATH
  • Option to execute the input rather than return an app
  • Support for localized strings

For dmenu mode

  • dmenu mode where newline separated entries are read from STDIN
  • Support for Rofi's protocol to support icons
  • Optional cache with custom path
  • Password mode
  • Prompt-only mode
  • Exact-match option to support multi-stage menus
  • Option to return index of what's selected rather than what's selected
  • Some dmenu option compatibility. Invoking it as dmenu enables dmenu mode
  • Option for null-separated input

For all modes

  • Numerous customizable key bindings, based on Emacs
  • Mouse & touchscreen support
  • Paste support
  • Emoji support
  • A number of theming options, which can be set in a separate include file
  • fzf-style matching with ability to filter huge lists
  • Optimized for performance
  • Zsh and Fish completions
  • Support for true fractional scaling
  • Wayland native

For details, see man fuzzel and man fuzzel.ini

Requirements

Runtime

  • pixman
  • wayland (client and cursor libraries)
  • xkbcommon
  • cairo (optional, required by librsvg)
  • libpng (optional)
  • librsvg (optional, for enhanced SVG icon support)
  • fcft 1

Fuzzel uses the builtin nanosvg backend to render SVG icons by default. Since nanosvg is somewhat limited, we also offer a librsvg backend for SVG icons. Note that librsvg also requires cairo.

Building

  • meson
  • ninja
  • wayland protocols
  • scdoc
  • tllist 1

Installation

To build, first, create a build directory, and switch to it:

mkdir -p bld/release && cd bld/release

Second, configure the build (if you intend to install it globally, you might also want --prefix=/usr):

meson --buildtype=release \
    -Denable-cairo=disabled|enabled|auto \
    -Dpng-backend=none|libpng \
    -Dsvg-backend=none|librsvg|nanosvg \
    ../..

-D{png,svg}-backend can be used to force-enable or force-disable a specific png and/or svg backend. Note that nanosvg is builtin (i.e. it needs to external dependencies).

-Denable-cairo can be used to force-enable or force-disable cairo support. When disabled, fuzzel will not be able to draw rounded corners, nor will it support SVGs using the librsvg backend.

Three, build it:

ninja

You can now run it directly from the build directory:

./fuzzel

Use command line arguments to configure the look-and-feel:

./fuzzel --help

Optionally, install it:

ninja install

For more detailed configuration information, see the man pages:

man fuzzel
man fuzzel.ini

Testing

Fuzzel has some automated tests in test/. To run them, Fish shell and wtype are required. The test runner can be installed within Fish shell with:

fisher install jorgebucaran/fishtape

Once installed, the tests can be run with:

fishtape test/*.fish

License

Fuzzel is released under the MIT license.

Fuzzel uses nanosvg, released under the Zlib license.

Sponsoring/donations

Donate using Liberapay


  1. can also be built as subprojects, in which case they are statically linked. ↩︎