Raycast-compatible launcher for Linux
Find a file
ByteAtATime 3f861343ff
ci: pin WebkitGTK version in nightly workflow
We have to pin the version of this dependency because there appears to be some incompatibility problems on certain OS, where running the AppImage results in a EGL_BAD_PARAMETER. Reproducible on Fedora Workstation 42.

This fix comes from ZMK studio/s fix for the same problem.
2025-07-15 11:48:38 -07:00
.github/workflows ci: pin WebkitGTK version in nightly workflow 2025-07-15 11:48:38 -07:00
.vscode style: formatting 2025-06-11 14:58:11 -07:00
images docs: new preview gif 2025-07-12 22:18:27 -07:00
packages/protocol refactor(rpc): migrate to generic RPC proxy for sidecar commands 2025-07-03 09:43:27 -07:00
sidecar ci: add github action for building 2025-07-12 16:26:24 -07:00
src fix(command-palette): fix Escape key not hiding command palette 2025-07-13 11:17:19 -07:00
src-tauri perf: update Cargo.toml profiles for optimization 2025-07-14 09:11:04 -07:00
static Initial commit 2025-06-10 11:24:18 -07:00
.gitignore Initial commit 2025-06-10 11:24:18 -07:00
.prettierignore style: formatting 2025-06-11 14:58:11 -07:00
.prettierrc feat: add prettier and eslint 2025-06-11 14:55:40 -07:00
components.json feat: initialize shadcn 2025-06-10 11:39:02 -07:00
eslint.config.js chore(eslint): add global ignores for src-tauri and sidecar 2025-07-09 11:03:24 -07:00
LICENSE chore: add license 2025-07-13 15:30:17 -07:00
package.json feat: tweak theming 2025-07-13 09:14:32 -07:00
pnpm-lock.yaml feat: tweak theming 2025-07-13 09:14:32 -07:00
pnpm-workspace.yaml feat: add sidecar protocol i/o checking with Zod 2025-06-12 19:35:42 -07:00
README.md docs: update readme with more info about building from source 2025-07-14 09:19:26 -07:00
svelte.config.js style: formatting 2025-06-11 14:58:11 -07:00
tsconfig.json test(frontend): add vitest for unit and component testing 2025-07-06 15:09:06 -07:00
vite.config.js test(frontend): add vitest for unit and component testing 2025-07-06 15:09:06 -07:00
vitest-setup-client.ts test(frontend): add vitest for unit and component testing 2025-07-06 15:09:06 -07:00

Raycast for Linux

An open-source, Raycast-inspired launcher for Linux.

For more background on this project, I have a post here.

GIF of Raycast Linux, showing off its main features

Disclaimer: This is a hobby project and is not affiliated with, nor endorsed by, the official Raycast team.

Features

This launcher aims to recreate most of Raycast's core features on Linux:

  • Extensible Command Palette: The core of the application. Search for and launch applications, run commands, execute quicklinks, and more.
  • Extension Support: Run extensions built Raycast's API. Features a built-in store to browse and install extensions from the official Raycast Store.
  • Powerful Calculator: A smart calculator integrated directly into the search bar, powered by SoulverCore. It handles unit conversions, currency, and complex math expressions.
  • Clipboard History: A searchable history of everything you've copied, with support for text, images, links, and colors.
  • Snippets: Create and manage text snippets that can be expanded anywhere on your system. Supports dynamic placeholders for dates, clipboard content, and more.
  • AI Integration: Connects to OpenRouter to bring the power of various AI models directly into the launcher.
  • And more to come!

🧩 Extension Compatibility

While the goal is to support a wide range of Raycast extensions, there are some inherent limitations due to the differences between macOS and Linux. Common reasons an extension might not work include:

  1. macOS-specific APIs: Many extensions rely on native macOS features like AppleScript (runAppleScript), hardcoded paths (/Applications/), or specific system libraries that do not exist on Linux.
  2. Native Binaries: Extensions that bundle pre-compiled binaries for macOS will not work. Similarly, extensions that use Swift to interact with the operating system won't work either.
  3. Assumed Permissions: Extensions may assume they have access to macOS-specific permissioned data (like Contacts or Calendars) which have no direct equivalent.

🚀 Installation

You can download the latest release from the GitHub Releases page.

Currently, only an .AppImage is provided. After downloading, make it executable:

chmod +x <downloaded-file-name>.AppImage
./<downloaded-file-name>.AppImage

This will open a long-running process in the background. To toggle the visibility of the window, simply run it again.

Depending on your environment, you may be able to bind the script to a hotkey. For example, on Hyprland:

bind = ALT, Space, exec, /path/to/raycast-linux.AppImage

System Requirements

The application requires glibc version 2.38, which is installed by default on Ubuntu 24.04, Fedora 40, and recent versions of Arch Linux.

Wayland users: For the global snippet expansion feature to work, the application needs permission to read keyboard events. The recommended and most secure method is to add a udev rule.

  1. Create the udev rule file:

    sudo nano /etc/udev/rules.d/99-raycast-linux.rules
    
  2. Add the following line to the file: This rule grants the user at the physical console access to keyboard devices.

    KERNEL=="event*", ENV{ID_INPUT_KEYBOARD}=="1", TAG+="uaccess"
    
  3. Reload the udev rules to apply the changes:

    sudo udevadm control --reload-rules && sudo udevadm trigger
    

🛠️ Building from Source

If you prefer to build the project from its source code, you'll need to set up the development environment.

Prerequisites

  • Rust: Install via rustup.
  • Node.js: Use a recent LTS version. pnpm is the package manager for this project (npm i -g pnpm).
  • Tauri Prerequisites: Follow the official Tauri guide to install system dependencies.
  • Swift Toolchain: The calculator feature uses a Swift wrapper around SoulverCore.

Installation & Running

  1. Clone the repository:

    git clone https://github.com/ByteAtATime/raycast-linux.git
    cd raycast-linux
    
  2. Install dependencies: This project uses a pnpm workspace. Install all dependencies from the root directory.

    pnpm install
    
  3. Build the Node.js sidecar binary: This step compiles the JavaScript plugin host into a binary that Tauri can execute.

    pnpm --filter sidecar build
    
  4. Compile SoulverCore Wrapper: This step compiles the wrapper around SoulverCore into a shared object file.

    swift build -c release --package-path src-tauri/SoulverWrapper
    
  5. Run in development mode: This command will launch the Tauri application with hot-reloading for the frontend. Note that you may need to tweak LD_LIBRARY_PATH to point to the SoulverWrapper.

    export LD_LIBRARY_PATH="$(pwd)/src-tauri/SoulverWrapper/Vendor/SoulverCore-linux:$(pwd)/src-tauri/SoulverWrapper/.build/release"
    pnpm tauri dev
    

🙏 Acknowledgements

This project stands on the shoulders of giants:

  • A huge thank you to the team behind the original Raycast.
  • The powerful calculator is powered by SoulverCore by Acqualia. Special thanks to Zac for getting me a Linux build -- on his vacation, no less!

📜 License

This project is licensed under the MIT License.