Skip to content
ByteAtATime

Recreating Raycast on Linux

Published: at 10:00 AM

Raycast is an amazing productivity tool, but it doesn’t run on Linux. Over my summer break, I decided to fix that.

This post kicks off a series diving into the project. I’ll cover the backstory, what the app does, and a high-level look at how it works. Future posts will get into the technical details, like rendering Raycast extensions on Linux or integrating a Swift-based calculator engine. If you’re into Rust, Tauri, or open-source productivity tools, stick around!

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

Motivation

The idea for this project started last year when I was a 14-year-old, new to Hack Club. During a conversation about Raycast, someone randomly threw out the idea: “We should make something like this for Linux.” I thought it was cool, so I… promptly ignored it for the next month.

The idea stayed buried until early this year, when a friend mentioned that Raycast had raised $30 million to “bring Raycast to new platforms.” My first thought was, “$30 million? To build a launcher?” My second thought was, “Hey, I can prolly do that myself!”

So naturally, I put it on the backburner again in favor of playing video games studying for finals.

Fast-forward to summer 2025. I’d just finished my freshman year with time on my hands and no college applications to stress about. Perfect timing to actually tackle this thing, and this is what came out!

What does it do?

GIF of Raycast Linux, showing off its main features

Well, it does Raycast things; the idea was to recreate the core Raycast features on Linux. Specifically, here is what I’ve managed to implement so far:

  • Command Palette: Launch apps, extensions, and use the calculator!

  • Extension Support: This was the big challenge. You can browse and install extensions from Raycast’s official store. Not everything works at the moment (see below!)

  • Integrated Calculator: Powered by SoulverCore, it handles math, unit conversions, and even currency/crypto rates. Type “5 EUR to USD” and get an instant answer. Shoutout to the Soulver team for helping with a custom build!

  • Clipboard History: Encrypted and searchable. It stores text, images, links, and colors. Preview and paste from history without digging through menus.

  • Snippets System: Create expandable text templates with placeholders for dates, clipboard contents, or random values. It works globally, even outside the app.

  • And more!

Architecture

At the core, it’s just a Tauri app: Rust for the backend, Svelte 5 for the UI. For extensions, I run a Node.js sidecar process that mocks Raycast’s API. (I’ll eventually have a post about this — stay tuned!)

The trickiest part was rendering. Raycast extensions use React on NodeJS, but the frontend is neither React nor NodeJS. I built a custom React reconciler that translates React components into a JSON-like format, then sends them to the frontend to render.

For the calculator, I integrated SoulverCore via a Swift wrapper compiled for Linux. Clipboard and snippets use Rust’s ecosystem for encryption and input handling, supporting both X11 and Wayland.

Extension Compatibility

One of the goals of this project was to be fully interoperable with Raycast. The most difficult aspect, by far, are extensions. Here are just a few reasons extensions might not work:

  1. They use AppleScript - for example, the Google Chrome extension
  2. They hardcode macOS paths - for example, the VSCode extension
  3. They run Swift code - for example, the Color Picker extension
  4. They use Apple products, for example, the Apple Notes extension

This compatibility nightmare was one of the hardest parts of this project. While it means we can’t have 100% parity, the core API is solid, and I’m always looking for creative ways to bridge the gap.

Technical details

This is actually a really interesting topic I would be interested in writing more about! I’ll likely make this a series, where the next posts will be about the technical side of things.

If you would be interested in hearing more, it would mean a lot if you subscribed to my email list. I don’t spam, I promise!

What’s next?

For the project, here are some things I would like to accomplish:

  • MacOS and Windows support
  • Optimize extension performance (the Pokémon extension takes over 300ms to load)
  • Move sidecar logic to Rust side
  • Cover full Raycast API

If this sounds cool, check out the GitHub repo: github.com/ByteAtATime/raycast-linux. Star it, fork it, or contribute!