A fast, GPU-accelerated modal launcher for Linux & macOS. Built with Rust & GPUI.
Rust
20
416 commits
updated Sep 26, 2026
A blazing-fast, GPU-accelerated launcher and script engine for macOS. Built with Rust & GPUI for zero-lag performance and dynamic UI layouts.
Core Pillars • Installation • Key Features • Widgets & Theming • Interactive Scripts • Shortcuts
Recorded demo showing instant search, theming with custom theme_switcher script, clipboard manager script, and native file search plugin
AeroFi is a modern modal launcher designed for speed-obsessed macOS users. It bridges the gap between lightweight Unix dmenu/rofi tools and feature-rich productivity shells like Raycast, giving you rich UI components with zero configuration bloat.
Pure Rust and GPUI at its core. Experience instant cold starts, true zero-lag typing, and native Metal rendering without Electron, WebViews, or heavy runtimes.
No bulky SDKs or complex API wrappers. Your scripts (Bash, Python, Go) simply pipe structured text to stdout. AeroFi instantly turns it into a rich, interactive dashboard with live filtering and state management.
Strict separation of concerns: scripts don't know about pixels, they just request a layout (e.g. # @aerofi.preset grid). Your TOML theme takes over, automatically adapting the Dynamic Window Shell (resizing the window, padding, and icons) to perfectly fit the mode. No ugly CSS/RASI complexity.
| Feature | Rofi / dmenu | Alfred | Raycast | AeroFi |
|---|---|---|---|---|
| Platform | Linux (X11/Wayland) | macOS | macOS | macOS |
| Engine & Speed | C / C++ (CPU Render) | Objective-C / AppKit (Native) | React / Node.js (Heavy SDK) | Rust + GPUI Metal (Zero-Lag) |
| Configuration | Complex RASI / CSS | Closed GUI / Preferences | Closed GUI / App Settings | Clean TOML Design Tokens |
| Scripting Model | One-shot stdout | JSON stdout / Scripts | Heavy TS / React Extensions | Two-way IPC Protocol (No SDKs) |
| Window Geometry | Static window size | Fixed bar + dropdown | Fixed app frame | Dynamic Window Shell (Adapts to preset) |
Install aerofi and start it as a native macOS background service:
brew install frostymur/tap/aerofi
# Start as a background service (starts automatically at login)
brew services start aerofi
brew upgrade aerofi picks up new releases.
Download the latest prebuilt binary from GitHub Releases:
aerofi-mac-arm64.tar.gzaerofi-mac-x86_64.tar.gzUnpack and place in your $PATH (e.g. /usr/local/bin or ~/.local/bin):
# Example for Apple Silicon:
curl -L -o aerofi.tar.gz https://github.com/frostymur/aerofi/releases/latest/download/aerofi-mac-arm64.tar.gz
tar -xzf aerofi.tar.gz
sudo mv aerofi /usr/local/bin/
# Run aerofi:
aerofi &
cargo install --git https://github.com/frostymur/aerofi aerofi
git clone https://github.com/frostymur/aerofi
cd aerofi
cargo build --release
./target/release/aerofi
Performance
Compatibility
@aerofi.* tagsFlexibility & Customization
silent, compact, inline, fullOutput, pipe, and interactive rofi$palette tokens, custom layouts)Developer-Friendly
aerofi is completely customizable via transparent, human-readable TOML files in ~/.config/aerofi/:
theme.toml using box, text, icon, image, spacer, divider, and button widgets.[mainbox] (e.g. place widgets above InputBar, between elements, or below ListView).$palette color tokens.# Example: Adding a custom header and action footer in theme.toml
[mainbox]
children = ["header_bar", "InputBar", "ListView", "footer_bar"]
[widgets.header_bar]
type = "box"
orientation = "horizontal"
gap = 8.0
children = ["header_title", "spacer", "status_badge"]
[widgets.header_title]
type = "text"
text = "aerofi"
color = "$accent"
font_weight = "bold"
The built-in Dark Transparent theme is always available. Additional curated
themes ship in examples/themes/ — copy any of them to
~/.config/aerofi/themes/ and select it with theme = "<name>":
| Theme | Description |
|---|---|
| Tokyo Night | Deep indigo surfaces with neon cyan & sky blue accents and frosted glass blur. |
| Tokyo Night Grid | Compact 4-column grid layout with larger application icons. |
| Catppuccin Mocha | The Catppuccin Mocha palette in a transparent split two-pane layout. |
| Gruvbox Dark | Warm vintage retro-groove palette with high contrast and earthy tones. |
| Graphite Mono | Minimal strictly-monochrome graphite palette in a split layout. |
Themes support modular splitting via imports = ["colors/...", "layouts/..."] to effortlessly mix-and-match color palettes and window layouts.
Read the Customization Guide and explore
examples/themes/for complete references.
Turn any Bash, Python, Node.js, or Swift script into a dynamic macOS mini-app with @aerofi.mode rofi:
stdout and receives keyboard events (Enter, Tab, Ctrl+D, custom keys) via stdin in real-time.<span foreground="#7aa2f7" weight="bold">Title</span>).Tab, batch deletion with Ctrl+D, and custom keybindings.#!/usr/bin/env bash
# @aerofi.title Theme Switcher
# @aerofi.mode rofi
# @aerofi.icon 🎨
echo -e "\0prompt\x1fSelect a theme:\n\0markup-rows\x1ftrue\n\0flush"
echo -e "<b>Tokyo Night</b>\0icon\x1femoji:🌃\0info\x1fActive"
echo -e "<b>Gruvbox Dark</b>\0icon\x1femoji:🌲\0info\x1fCommunity"
Real-world scripts available in examples/scripts/:
clipboard.py — Interactive clipboard manager with syntax highlighting, multi-select (Tab), and item deletion (Ctrl+D)theme_switcher.py — Interactive Rofi theme previewer with live swatches and instant config updatingfull-output.sh — Markdown viewer rendering formatted GitHub Flavored Markdown inside the launchercompact.sh — Progress tracking with non-blocking floating toast status indicatorssilent.sh — Background automation with completion notification toastsCopy any script to ~/.config/aerofi/scripts/ to use it immediately.
Read the Scripting & Rofi Protocol Guide and the Multi-Step Guide, and check out
examples/scripts/for working implementations.
aerofi is inspired by rofi's Unix philosophy but built specifically for macOS:
rofi mode = rofi-compatible)You can port rofi scripts to aerofi with minimal changes.
| Shortcut | Context | Action |
|---|---|---|
Option+Space | Global | Toggle aerofi launcher window |
↑ / ↓ (or Ctrl+P / Ctrl+N) | Launcher | Navigate result list |
Enter | Launcher | Launch item (activates a running app) |
Shift+Enter | Launcher | Open a new instance of a running app (open -n) |
Cmd+R | Launcher | Reload configuration and rescan sources |
Escape | Launcher | Close aerofi window / Clear search |
Tab | Rofi Mode | Toggle multi-selection checkbox |
Ctrl+D | Rofi Mode | Secondary action (e.g. delete item) |
Launching applications. Enter (or clicking a row) activates an app that is
already running, matching macOS open. Press Shift+Enter to force a new
instance (open -n) — handy for apps like Terminal or Finder when you want a
second window. Apps that enforce a single instance may ignore Shift+Enter.
We welcome contributions! See CONTRIBUTING.md for guidelines.
MIT — See LICENSE
Rust
100.0%
A fast, GPU-accelerated modal launcher for Linux & macOS. Built with Rust & GPUI.
Rust
20
416 commits
updated Sep 26, 2026
A blazing-fast, GPU-accelerated launcher and script engine for macOS. Built with Rust & GPUI for zero-lag performance and dynamic UI layouts.
Core Pillars • Installation • Key Features • Widgets & Theming • Interactive Scripts • Shortcuts
Recorded demo showing instant search, theming with custom theme_switcher script, clipboard manager script, and native file search plugin
AeroFi is a modern modal launcher designed for speed-obsessed macOS users. It bridges the gap between lightweight Unix dmenu/rofi tools and feature-rich productivity shells like Raycast, giving you rich UI components with zero configuration bloat.
Pure Rust and GPUI at its core. Experience instant cold starts, true zero-lag typing, and native Metal rendering without Electron, WebViews, or heavy runtimes.
No bulky SDKs or complex API wrappers. Your scripts (Bash, Python, Go) simply pipe structured text to stdout. AeroFi instantly turns it into a rich, interactive dashboard with live filtering and state management.
Strict separation of concerns: scripts don't know about pixels, they just request a layout (e.g. # @aerofi.preset grid). Your TOML theme takes over, automatically adapting the Dynamic Window Shell (resizing the window, padding, and icons) to perfectly fit the mode. No ugly CSS/RASI complexity.
| Feature | Rofi / dmenu | Alfred | Raycast | AeroFi |
|---|---|---|---|---|
| Platform | Linux (X11/Wayland) | macOS | macOS | macOS |
| Engine & Speed | C / C++ (CPU Render) | Objective-C / AppKit (Native) | React / Node.js (Heavy SDK) | Rust + GPUI Metal (Zero-Lag) |
| Configuration | Complex RASI / CSS | Closed GUI / Preferences | Closed GUI / App Settings | Clean TOML Design Tokens |
| Scripting Model | One-shot stdout | JSON stdout / Scripts | Heavy TS / React Extensions | Two-way IPC Protocol (No SDKs) |
| Window Geometry | Static window size | Fixed bar + dropdown | Fixed app frame | Dynamic Window Shell (Adapts to preset) |
Install aerofi and start it as a native macOS background service:
brew install frostymur/tap/aerofi
# Start as a background service (starts automatically at login)
brew services start aerofi
brew upgrade aerofi picks up new releases.
Download the latest prebuilt binary from GitHub Releases:
aerofi-mac-arm64.tar.gzaerofi-mac-x86_64.tar.gzUnpack and place in your $PATH (e.g. /usr/local/bin or ~/.local/bin):
# Example for Apple Silicon:
curl -L -o aerofi.tar.gz https://github.com/frostymur/aerofi/releases/latest/download/aerofi-mac-arm64.tar.gz
tar -xzf aerofi.tar.gz
sudo mv aerofi /usr/local/bin/
# Run aerofi:
aerofi &
cargo install --git https://github.com/frostymur/aerofi aerofi
git clone https://github.com/frostymur/aerofi
cd aerofi
cargo build --release
./target/release/aerofi
Performance
Compatibility
@aerofi.* tagsFlexibility & Customization
silent, compact, inline, fullOutput, pipe, and interactive rofi$palette tokens, custom layouts)Developer-Friendly
aerofi is completely customizable via transparent, human-readable TOML files in ~/.config/aerofi/:
theme.toml using box, text, icon, image, spacer, divider, and button widgets.[mainbox] (e.g. place widgets above InputBar, between elements, or below ListView).$palette color tokens.# Example: Adding a custom header and action footer in theme.toml
[mainbox]
children = ["header_bar", "InputBar", "ListView", "footer_bar"]
[widgets.header_bar]
type = "box"
orientation = "horizontal"
gap = 8.0
children = ["header_title", "spacer", "status_badge"]
[widgets.header_title]
type = "text"
text = "aerofi"
color = "$accent"
font_weight = "bold"
The built-in Dark Transparent theme is always available. Additional curated
themes ship in examples/themes/ — copy any of them to
~/.config/aerofi/themes/ and select it with theme = "<name>":
| Theme | Description |
|---|---|
| Tokyo Night | Deep indigo surfaces with neon cyan & sky blue accents and frosted glass blur. |
| Tokyo Night Grid | Compact 4-column grid layout with larger application icons. |
| Catppuccin Mocha | The Catppuccin Mocha palette in a transparent split two-pane layout. |
| Gruvbox Dark | Warm vintage retro-groove palette with high contrast and earthy tones. |
| Graphite Mono | Minimal strictly-monochrome graphite palette in a split layout. |
Themes support modular splitting via imports = ["colors/...", "layouts/..."] to effortlessly mix-and-match color palettes and window layouts.
Read the Customization Guide and explore
examples/themes/for complete references.
Turn any Bash, Python, Node.js, or Swift script into a dynamic macOS mini-app with @aerofi.mode rofi:
stdout and receives keyboard events (Enter, Tab, Ctrl+D, custom keys) via stdin in real-time.<span foreground="#7aa2f7" weight="bold">Title</span>).Tab, batch deletion with Ctrl+D, and custom keybindings.#!/usr/bin/env bash
# @aerofi.title Theme Switcher
# @aerofi.mode rofi
# @aerofi.icon 🎨
echo -e "\0prompt\x1fSelect a theme:\n\0markup-rows\x1ftrue\n\0flush"
echo -e "<b>Tokyo Night</b>\0icon\x1femoji:🌃\0info\x1fActive"
echo -e "<b>Gruvbox Dark</b>\0icon\x1femoji:🌲\0info\x1fCommunity"
Real-world scripts available in examples/scripts/:
clipboard.py — Interactive clipboard manager with syntax highlighting, multi-select (Tab), and item deletion (Ctrl+D)theme_switcher.py — Interactive Rofi theme previewer with live swatches and instant config updatingfull-output.sh — Markdown viewer rendering formatted GitHub Flavored Markdown inside the launchercompact.sh — Progress tracking with non-blocking floating toast status indicatorssilent.sh — Background automation with completion notification toastsCopy any script to ~/.config/aerofi/scripts/ to use it immediately.
Read the Scripting & Rofi Protocol Guide and the Multi-Step Guide, and check out
examples/scripts/for working implementations.
aerofi is inspired by rofi's Unix philosophy but built specifically for macOS:
rofi mode = rofi-compatible)You can port rofi scripts to aerofi with minimal changes.
| Shortcut | Context | Action |
|---|---|---|
Option+Space | Global | Toggle aerofi launcher window |
↑ / ↓ (or Ctrl+P / Ctrl+N) | Launcher | Navigate result list |
Enter | Launcher | Launch item (activates a running app) |
Shift+Enter | Launcher | Open a new instance of a running app (open -n) |
Cmd+R | Launcher | Reload configuration and rescan sources |
Escape | Launcher | Close aerofi window / Clear search |
Tab | Rofi Mode | Toggle multi-selection checkbox |
Ctrl+D | Rofi Mode | Secondary action (e.g. delete item) |
Launching applications. Enter (or clicking a row) activates an app that is
already running, matching macOS open. Press Shift+Enter to force a new
instance (open -n) — handy for apps like Terminal or Finder when you want a
second window. Apps that enforce a single instance may ignore Shift+Enter.
We welcome contributions! See CONTRIBUTING.md for guidelines.
MIT — See LICENSE
Rust
100.0%