free-launch

Crates.iofree-launch
lib.rsfree-launch
version0.2.4
created_at2025-08-01 07:59:53.876943+00
updated_at2025-09-05 23:08:35.108265+00
descriptionA simple fuzzy launcher written in Rust.
homepage
repositoryhttps://github.com/symplasma/free-launch
max_upload_size
id1776226
size224,750
Elio Grieco (egrieco)

documentation

README

Free Launch

A fuzzy launcher written in Rust to replace Ulauncher.

Because there is no such thing as a free launch.

Why Build This

NixOS warned me of multiple security issues in libsoup-2.74.3 which was a dependency for Ulauncher. See the related nixpxgs issue ulauncher: dependency on webkitgtk_4 gives insecure dependency warning · Issue #430262.

Other Rust-based launchers don't meet my requirements:

  • They are not being actively developed.
  • They don't run on my setup.

Versions

Version v0.1.0 was written with GTK bindings. The code is still available under the gtk_based branch.

Managing additional state was proving to be overly complicated in GTK so the current version was rewritten in egui/eframe which is proving far easier to work with. Additionally, the app seems to launch faster and do not miss the first keystroke anymore, even when typing very quickly.

Launchers in C and Other Languages

This is far from an exhaustive list. I'm mostly focusing on Rust based launchers for Linux.

  • Ulauncher: The best option I had found, but unfortunately it depends on libsoup-2.74.3 which is marked as insecure in nixpkgs.
  • albert: I was actually using this first but it had a few issues. Can't remember what they were at the moment but I left it for Ulauncher.
  • rofi: Not a big fan of the interface on this one, even though it's very popular.
  • Krunner: This looks decent, worth trying for those on KDE. Actually, it should be usable on NixOS even without running KDE as the window manager.

Rust Based Launchers

  • Loungy: This looks really excellent but: "Loungy is currently not in active development. As a new dad, my development resources have dwindled."
  • gauntlet: Recommended by Matthias Grandl, creator of Loungy but: "Web-first cross-platform application launcher with React-based plugins". No thank you.
  • kickoff: Looks great but panics with: layer shell is not available: NotPresent
  • elbey: Incomplete, but worth keeping an eye on.
  • raffi: Fully config based. Does not auto-discover apps.
  • jolly: Looks good but panics with: Failed to initialize any backend! Wayland status: NoWaylandLib
  • dlauncher: Based on Ulauncher which sounds good. Just need to get it to compile...
  • sklauncher: Not bad, but I don't love the interface, even though it reminds me of fzf/skim/picleo which is kinda awesome.
  • fuzzle: Looks good but is not on crates.io.

More Rust based launchers can be found here for those that want to keep digging: ‘fuzzy launcher’ search on Lib.rs.

Features

  • Written entirely in Rust
  • Show all *.desktop files and allow launching them
  • Show all executables in path and allow launching them
  • Do not select the first item, now that we have highlight instead.
  • Launch highlighted item, even if the search box is empty

Performance

  • Fast launch, but could always be faster...
  • Index/load items in a separate thread to not block window display
  • Proper rendering and lazy loading only for the items that fit on screen
  • Daemon mode with visibility switch command like Ulauncher for instantaneous invocation (allow re-showing of the window without re-reading config and re-loading items)
    • Add --daemon flag that will keep the program running in the background
    • Make LaunchItem loading/refresh a thing that happens only once at launch
    • Allow on demand refresh of LaunchItems
    • Use fsevents or similar to auto-refresh LaunchItems

UI and UX

  • Deduplicate listed items (and allow debugging by showing the paths of where duplicates are from)
  • Frecency based sorting
  • Make page up/down work properly
  • Interactive help screen
  • Integrate picleo for better fuzzy finding

Functionality

  • System commands: lock screen, sleep, hibernate, reboot, shutdown
  • Run or raise functionality for launching applications or focusing their windows
  • Integrate search templates from search-cli
  • Add actions for items (besides launch), invoked with Tab
    • Reveal item in filesystem
    • Show info for item
    • Quick preview item
    • Copy/Move item
  • Add additional item types
    • Running apps
    • Open application windows
    • Open browser tabs
  • Path navigation with autocomplete

Configuration

  • Custom commands via a config file
  • Add a config file to:
    • Override descriptions
    • Add alternate names/aliases for programs
    • Hide programs, possibly duplicates
    • Add programs that are at odd paths or are not otherwise discovered
    • Set a default size/position or remember the size once moved
  • Browser search templates according to config
  • Synonyms/keywords from config

Troubleshooting and Known Issues

  • Better detection of screen size: This is proving much more difficult than it should be to do reliably

Future Features

  • Integrate Symplasma
    • Quick jump to common paths
    • Allow storing of items, either from the clipboard or from the current selection
    • Allow collecting items from the current clipboard
    • Use common Symplasma config lib
  • Allow launching of shell aliases and functions?
  • Plugin system?
Commit count: 0

cargo fmt