Swift Launcher is a keyboard-first launcher written in Rust + Slint.
- Minimal latency: open → search → execute fast.
- Great UX: clean UI, solid keyboard navigation, sane defaults.
- Fuzzy search (ranked) over actions.
- Shell command actions (optional working directory).
- Desktop app actions (from
.desktopentries). - Project workflows (open folder, run dev server, run tests).
- Keyboard-only workflow (Up/Down select, Enter execute, Esc close).
- Cache entries.
- Theme config file
- Config file (TOML/JSON/RON), with optional hot-reload.
git clone https://github.com/pezfisk/swift-launcher
cd swift-launcher
cargo build --release
./target/release/swift-launcherSwift Launcher uses WebAssembly (WASM) Components for plugins, allowing you to write extensions in any language while maintaining security and performance.
Read WASM.md for a comprehensive explanation of:
- What WASM is and why we use it
- The Component Model and interfaces
- Shift's WASM architecture and how plugins are loaded
- Memory isolation and security guarantees
- How information flows between host and plugins
Key benefits:
- Polyglot: Write plugins in Rust, Python, Go, JavaScript, C, Zig, and more
- Safe: Each plugin runs in an isolated sandbox
- Fast: Near-native performance (95%+ of native speed)
- Reliable: One plugin crash doesn't crash Swift
Read PLUGINS.md for complete instructions on:
- Building the echo plugin in Rust, Python and JavaScript.
- How to target
wasm32-wasip2 - Installation and testing
- Best practices for plugin development
- Troubleshooting common issues
If no theme.conf exists at /home/user/.config/swift/theme.conf a default theme will be used
Here is an example theme.conf for reference:
[Window]
width=600
height=400
vertical-alignment=center
horizontal-alignment=center
background-color=#1e1e2e
border-radius=16
border-color=#74c7ec
border-width=1
[Action]
max-height=60
option-color=#313244
option-color-selected=#cba6f7
option-border-rodius=10
name-font-size=14
name-font-color=#cdd6f4
name-font-color-selected=#1e1e2e
exec-font-size=11
exec-font-color=#a6adc8
exec-font-color-selected=#45475a
exec-show=true
show-icons=true
[Runner]
font-size=16
font-color=#cdd6f4
background-color=#181825
border-color=#45475a
border-width=1
border-radious=8
height=45Default path:
- Native: ~/.config/swift/config.conf
Swift Launcher processes variables in two ways:
- Custom Variables: Defined in the [variables] section. These are great for setting your preferred terminal or editor once.
- System Variables: Because actions run via sh -c, you can use standard shell variables like $HOME, $PATH, or $HOSTNAME.
Different terminals require different flags to execute commands. Update your term variable based on your setup:
| Execution Flag | Terminals | Example term Variable |
|---|---|---|
| Standard -e | Alacritty, Ghostty, Konsole, Terminology, ST, UXTerm | term = alacritty -e vim |
| Double-Dash -- | Ptyxis, BlackBox, GNOME Terminal, Console (KGX) | term = ptyxis -- vim |
| Legacy -x | XFCE4 Terminal, Terminator, Guake | term = xfce4-terminal -x vim |
| No Flag Needed | Kitty, Foot, Tilix | term = kitty vim |
[variables]
term = "alacritty -e"
editor = "vim"
[actions]
name = "Open dotfiles"
cwd = /home/$USER/dotfiles
exec = $term $editor /home/$USER/dotfilesYou can add extra search engines, with a configuration file at ~/.config/swift/search.conf with the following structure
Trigger of the search engine = url of the search engine without https:// and ?= onwards
So for example, for brave it would be
b=search.brave.com/search
