frostymur/aerofi

A fast, GPU-accelerated modal launcher for Linux & macOS. Built with Rust & GPUI.

Rust

20

416 commits

updated Sep 26, 2026

See the code

See what people are saying

README

aerofi — Fast, native, rofi-inspired macOS launcher

A blazing-fast, GPU-accelerated launcher and script engine for macOS. Built with Rust & GPUI for zero-lag performance and dynamic UI layouts.

Release CI Platform Language Memory License


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.

⚡️ Core Pillars

1. GPU-Powered Performance

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.

2. Plug & Play Scripting

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.

3. Semantic TOML Themes & Dynamic Shells

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.


🥊 How It Compares

FeatureRofi / dmenuAlfredRaycastAeroFi
PlatformLinux (X11/Wayland)macOSmacOSmacOS
Engine & SpeedC / C++ (CPU Render)Objective-C / AppKit (Native)React / Node.js (Heavy SDK)Rust + GPUI Metal (Zero-Lag)
ConfigurationComplex RASI / CSSClosed GUI / PreferencesClosed GUI / App SettingsClean TOML Design Tokens
Scripting ModelOne-shot stdoutJSON stdout / ScriptsHeavy TS / React ExtensionsTwo-way IPC Protocol (No SDKs)
Window GeometryStatic window sizeFixed bar + dropdownFixed app frameDynamic Window Shell (Adapts to preset)

Installation

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.

Prebuilt Binary (Direct Download)

Download the latest prebuilt binary from GitHub Releases:

Unpack 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

cargo install --git https://github.com/frostymur/aerofi aerofi

Build from Source

git clone https://github.com/frostymur/aerofi
cd aerofi
cargo build --release
./target/release/aerofi

Key Features

Performance

  • 🪶 ~40 MB memory footprint
  • 🚀 Instant startup and 120 FPS Metal rendering

Compatibility

  • 📜 Huge ecosystem: drop in any Raycast script command or build your own with @aerofi.* tags
  • 🔑 Zero-friction Carbon hotkey (no Accessibility permissions required)

Flexibility & Customization

  • 6 execution modes: silent, compact, inline, fullOutput, pipe, and interactive rofi
  • 📌 Pinned items — keep favourite apps & scripts at the top of the results
  • 🧩 Declarative widget engine (custom headers, footers, action buttons, status pills)
  • 🎨 Deep TOML theming (frosted glass blur, fonts, $palette tokens, custom layouts)
  • 🔌 Native C ABI plugins (Rust, C, C++, Swift)

Developer-Friendly

  • 💻 Open source (MIT license)
  • 📚 Full documentation & examples
  • 🚀 Active development

Declarative Widgets & Theming

aerofi is completely customizable via transparent, human-readable TOML files in ~/.config/aerofi/:

  • Declarative Widget System: Compose custom headers, footers, status pills, and action strips directly in theme.toml using box, text, icon, image, spacer, divider, and button widgets.
  • Layout Control: Freely rearrange the UI hierarchy in [mainbox] (e.g. place widgets above InputBar, between elements, or below ListView).
  • macOS Glassmorphism: Native translucent frosted glass blur, opacity, border radii, shadows, and reusable $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"

Bundled Themes & Modular Architecture

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>":

ThemeDescription
Tokyo NightDeep indigo surfaces with neon cyan & sky blue accents and frosted glass blur.
Tokyo Night GridCompact 4-column grid layout with larger application icons.
Catppuccin MochaThe Catppuccin Mocha palette in a transparent split two-pane layout.
Gruvbox DarkWarm vintage retro-groove palette with high contrast and earthy tones.
Graphite MonoMinimal 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.


Interactive Rofi Scripts & IPC

Turn any Bash, Python, Node.js, or Swift script into a dynamic macOS mini-app with @aerofi.mode rofi:

  • Bidirectional Streaming: Your script outputs items via stdout and receives keyboard events (Enter, Tab, Ctrl+D, custom keys) via stdin in real-time.
  • Pango Markup Formatting: Full support for rich colors, bold text, and badges (<span foreground="#7aa2f7" weight="bold">Title</span>).
  • Multi-Selection & Actions: Interactive multi-select with Tab, batch deletion with Ctrl+D, and custom keybindings.
  • Instant Live Updates: Update lists, badges, and search prompts dynamically without restarting the script.
#!/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"

Ready-to-Use Scripts

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 updating
  • full-output.sh — Markdown viewer rendering formatted GitHub Flavored Markdown inside the launcher
  • compact.sh — Progress tracking with non-blocking floating toast status indicators
  • silent.sh — Background automation with completion notification toasts

Copy 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.


For rofi Users

aerofi is inspired by rofi's Unix philosophy but built specifically for macOS:

  • Same stdin/stdout piping model (rofi mode = rofi-compatible)
  • Native macOS experience (no X11 layers)
  • GPUI rendering (120 FPS, Metal acceleration)
  • Compatible with community script ecosystems

You can port rofi scripts to aerofi with minimal changes.


Default Shortcuts

ShortcutContextAction
Option+SpaceGlobalToggle aerofi launcher window
↑ / ↓ (or Ctrl+P / Ctrl+N)LauncherNavigate result list
EnterLauncherLaunch item (activates a running app)
Shift+EnterLauncherOpen a new instance of a running app (open -n)
Cmd+RLauncherReload configuration and rescan sources
EscapeLauncherClose aerofi window / Clear search
TabRofi ModeToggle multi-selection checkbox
Ctrl+DRofi ModeSecondary 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.


Getting Help

Contributing

We welcome contributions! See CONTRIBUTING.md for guidelines.

License

MIT — See LICENSE

Credits

  • Built on GPUI — the GPU-accelerated UI framework from Zed
  • Inspired by rofi
  • Drop-in compatibility with community script-commands
alfred-alternative
app-launcher
application-launcher
gpui
launcher
macos
macos-utility
productivity
raycast-alternative
rust
spotlight-replacement

Contributors

frostymur

412 commits

zsh-sage

4 commits

frostymur/aerofi

A fast, GPU-accelerated modal launcher for Linux & macOS. Built with Rust & GPUI.

Rust

20

416 commits

updated Sep 26, 2026

See the code

See what people are saying

README

aerofi — Fast, native, rofi-inspired macOS launcher

A blazing-fast, GPU-accelerated launcher and script engine for macOS. Built with Rust & GPUI for zero-lag performance and dynamic UI layouts.

Release CI Platform Language Memory License


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.

⚡️ Core Pillars

1. GPU-Powered Performance

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.

2. Plug & Play Scripting

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.

3. Semantic TOML Themes & Dynamic Shells

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.


🥊 How It Compares

FeatureRofi / dmenuAlfredRaycastAeroFi
PlatformLinux (X11/Wayland)macOSmacOSmacOS
Engine & SpeedC / C++ (CPU Render)Objective-C / AppKit (Native)React / Node.js (Heavy SDK)Rust + GPUI Metal (Zero-Lag)
ConfigurationComplex RASI / CSSClosed GUI / PreferencesClosed GUI / App SettingsClean TOML Design Tokens
Scripting ModelOne-shot stdoutJSON stdout / ScriptsHeavy TS / React ExtensionsTwo-way IPC Protocol (No SDKs)
Window GeometryStatic window sizeFixed bar + dropdownFixed app frameDynamic Window Shell (Adapts to preset)

Installation

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.

Prebuilt Binary (Direct Download)

Download the latest prebuilt binary from GitHub Releases:

Unpack 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

cargo install --git https://github.com/frostymur/aerofi aerofi

Build from Source

git clone https://github.com/frostymur/aerofi
cd aerofi
cargo build --release
./target/release/aerofi

Key Features

Performance

  • 🪶 ~40 MB memory footprint
  • 🚀 Instant startup and 120 FPS Metal rendering

Compatibility

  • 📜 Huge ecosystem: drop in any Raycast script command or build your own with @aerofi.* tags
  • 🔑 Zero-friction Carbon hotkey (no Accessibility permissions required)

Flexibility & Customization

  • 6 execution modes: silent, compact, inline, fullOutput, pipe, and interactive rofi
  • 📌 Pinned items — keep favourite apps & scripts at the top of the results
  • 🧩 Declarative widget engine (custom headers, footers, action buttons, status pills)
  • 🎨 Deep TOML theming (frosted glass blur, fonts, $palette tokens, custom layouts)
  • 🔌 Native C ABI plugins (Rust, C, C++, Swift)

Developer-Friendly

  • 💻 Open source (MIT license)
  • 📚 Full documentation & examples
  • 🚀 Active development

Declarative Widgets & Theming

aerofi is completely customizable via transparent, human-readable TOML files in ~/.config/aerofi/:

  • Declarative Widget System: Compose custom headers, footers, status pills, and action strips directly in theme.toml using box, text, icon, image, spacer, divider, and button widgets.
  • Layout Control: Freely rearrange the UI hierarchy in [mainbox] (e.g. place widgets above InputBar, between elements, or below ListView).
  • macOS Glassmorphism: Native translucent frosted glass blur, opacity, border radii, shadows, and reusable $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"

Bundled Themes & Modular Architecture

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>":

ThemeDescription
Tokyo NightDeep indigo surfaces with neon cyan & sky blue accents and frosted glass blur.
Tokyo Night GridCompact 4-column grid layout with larger application icons.
Catppuccin MochaThe Catppuccin Mocha palette in a transparent split two-pane layout.
Gruvbox DarkWarm vintage retro-groove palette with high contrast and earthy tones.
Graphite MonoMinimal 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.


Interactive Rofi Scripts & IPC

Turn any Bash, Python, Node.js, or Swift script into a dynamic macOS mini-app with @aerofi.mode rofi:

  • Bidirectional Streaming: Your script outputs items via stdout and receives keyboard events (Enter, Tab, Ctrl+D, custom keys) via stdin in real-time.
  • Pango Markup Formatting: Full support for rich colors, bold text, and badges (<span foreground="#7aa2f7" weight="bold">Title</span>).
  • Multi-Selection & Actions: Interactive multi-select with Tab, batch deletion with Ctrl+D, and custom keybindings.
  • Instant Live Updates: Update lists, badges, and search prompts dynamically without restarting the script.
#!/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"

Ready-to-Use Scripts

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 updating
  • full-output.sh — Markdown viewer rendering formatted GitHub Flavored Markdown inside the launcher
  • compact.sh — Progress tracking with non-blocking floating toast status indicators
  • silent.sh — Background automation with completion notification toasts

Copy 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.


For rofi Users

aerofi is inspired by rofi's Unix philosophy but built specifically for macOS:

  • Same stdin/stdout piping model (rofi mode = rofi-compatible)
  • Native macOS experience (no X11 layers)
  • GPUI rendering (120 FPS, Metal acceleration)
  • Compatible with community script ecosystems

You can port rofi scripts to aerofi with minimal changes.


Default Shortcuts

ShortcutContextAction
Option+SpaceGlobalToggle aerofi launcher window
↑ / ↓ (or Ctrl+P / Ctrl+N)LauncherNavigate result list
EnterLauncherLaunch item (activates a running app)
Shift+EnterLauncherOpen a new instance of a running app (open -n)
Cmd+RLauncherReload configuration and rescan sources
EscapeLauncherClose aerofi window / Clear search
TabRofi ModeToggle multi-selection checkbox
Ctrl+DRofi ModeSecondary 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.


Getting Help

Contributing

We welcome contributions! See CONTRIBUTING.md for guidelines.

License

MIT — See LICENSE

Credits

  • Built on GPUI — the GPU-accelerated UI framework from Zed
  • Inspired by rofi
  • Drop-in compatibility with community script-commands
alfred-alternative
app-launcher
application-launcher
gpui
launcher
macos
macos-utility
productivity
raycast-alternative
rust
spotlight-replacement

Contributors

frostymur

412 commits

zsh-sage

4 commits

Languages

Rust

100.0%