Show HN: Vicinae – A native, Raycast-compatible launcher for Linux

github.com

181 points by aurellius 5 months ago

Hi HN!

I’ve always been a fan of application launchers, and I was impressed by the approach the Raycast team took — especially their extension system. About six months ago I started building something similar for Linux, aiming to integrate deeply at the OS level and give extensions a lot of power.

Vicinae is written in C++ with Qt Widgets. I chose Widgets over QML for more imperative control of the UI, especially around extension handling. So far that’s worked well — modern C++ is great.

To support my goals I built a number of custom widgets, including a fully virtualized list that can efficiently render tens of thousands of items. That gave me a lot of respect for Qt — it’s a powerful framework that mostly stayed out of my way.

A key feature is support for Raycast extensions (React + TypeScript), most of which can be installed and used directly inside the launcher (though not all features are implemented yet). There’s also a native API package (@vicinae/api) for writing Vicinae-specific extensions with additional capabilities. This required writing a custom React reconciler — surprisingly straightforward, though still unpolished.

Like Raycast, Vicinae ships with powerful built-in modules, but the goal isn’t to make a clone. I want it to grow into its own project that fits the FOSS model better, while staying compatible with the Raycast ecosystem. I also plan to bring it to other OSes eventually.

I’d love feedback on the technical approach, and suggestions for what would make this useful to you. Contributions are very welcome — I’ve already been pleasantly surprised by how quickly people started helping.

Docs: https://docs.vicinae.com Repo: https://github.com/vicinaehq/vicinae

robinhood 5 months ago

This is amazing and incredible. Thanks for this. Raycast is great, and there are not many good launchers on Linux unfortunately. Launchers are so important in my opinion to interact with the computer. I hope this project will change the situation on Linux.

  • aurellius 5 months ago

    thanks! I think so too. Easy extensibility is also a very important factor imo. I think React (declarative UI in general) has it good there.

xn--yt9h 5 months ago

Installation was easy, and it works as expected without interfering with i3 window controls.

However, the sole reason I'm keeping an eye out for raycast-compatible launchers is the ability to integrate the raindrop.io extension - which seems to be broken when used through Vicinae.

Maybe someone else running raindrop got it to work; "TypeError: Cannot read properties of undefined (reading 'subscribers')".

  • aurellius 5 months ago

    what version are you running? I'm currently working on improving extension support but yes, some are still in a broken state.

    • aurellius 5 months ago

      the newly released 0.9.4 should fix some of your issues.

      • xn--yt9h 5 months ago

        Indeed it did. Hats off to you sir! Thanks for the update.

diath 5 months ago

This is actually very impressive - such a high quality project on technical level. I'll definitely dig into the source to see how the React & C++ widgets integration works as it looks like an interesting approach.

  • aurellius 5 months ago

    Thanks! Honestly a lot of the code you will find has very messy parts to it but that's mostly because I didn't get the time to make it any better yet

mgrandl 5 months ago

Insanely cool. I wrote my own raycast inspired launcher a while ago and never got around to adding proper extension support. There is also https://github.com/project-gauntlet/gauntlet which also has react extensions, but not raycast compatible afaik.

kwbr3000 5 months ago
  • aurellius 5 months ago

    Yeah I know about this project, but I don't know how joining forces would go as the tech stack is entirely different.

    • Self-Perfection 5 months ago

      It would help if somebody makes a comparison.

      Mostly comparison of consumed RAM with identical set of extensions might help me choose without trying each of this projects.

      • aurellius 5 months ago

        I usually try to optimize for CPU usage more than I do for RAM, mostly because I care about my battery life and for things to remain snappy. Although Vicinae does a lot of caching where it can it probably maintains a quite reasonable memory footprint when compared to apps with web frontends.

        • Self-Perfection 5 months ago

          IMO after launcher is optimized to be truly idle while there is no interaction with it shaving memory usage becomes more important for snappiness and battery life. Extra RAM that launcher uses it the same RAM that other apps cannot use and therefore become more laggy. I expect on average shaving off 100 MB of launcher RAM usage will save more battery then reducing time for rendering its window by 0.1s

          Or after a while without interaction bloated RAM get swapped out and launcher invocation need to fetch swapped out info.

          For comparison here is how krunner looks on my current machine. After some time without interactions:

            $ systemctl --user status plasma-krunner.service|head
            ● plasma-krunner.service - KRunner
                 Loaded: loaded (/usr/lib/systemd/user/plasma-krunner.service; static)
                 Active: active (running) since Sun 2025-08-10 20:31:40 WEST; 1 month 12 days ago
               Main PID: 57749 (krunner)
                  Tasks: 37 (limit: 17782)
                 Memory: 64.6M (peak: 1.4G swap: 338.2M swap peak: 679.8M zswap: 12.4M)
                    CPU: 2h 58.702s
                 CGroup: /user.slice/user-1000.slice/user@1000.service/background.slice/plasma-krunner.service
                         └─57749 /usr/bin/krunner
          
          
          It seems to me I feel how it was less on the first invocation.
tertle950 5 months ago

never knew I wanted this until I saw it! this looks very fully featured and awesome, will keep in mind for the future

  • aurellius 5 months ago

    yeah. The general idea of having anything at a few keystrokes is the most amazing thing to me

dinkleberg 5 months ago

This is fantastic! Raycast is one of the few things I miss on Linux. It looks like that is no longer the case.

Great to see it already has a Nix flake too! I was able to get it setup basically instantly.

  • aurellius 5 months ago

    Thanks, although it's not up to Raycast's level (yet)!

imiric 5 months ago

This looks very slick and polished. Nice work!

I'm used to drun/rofi and enjoy their simplicity, but have also secretly envied the out-of-the-box experience of more fully featured launchers on macOS. I remember using Spotlight and Alfred many years ago, and being impressed by the experience.

I like that you chose to make it compatible with Raycast, and how easy it is to extend, based on a quick look at the docs.

I'll definitely keep an eye on your project, and give it a try. Thanks for sharing!

  • aurellius 5 months ago

    I have a very similar experience, I used mac for a long time, then moved to linux and used the simpler alternatives. Then I found Raycast and their extension system, and thought it would be amazing to have something similar on Linux, so I made this :)

sureglymop 5 months ago

Works great on hyprland with uwsm! I hope window resizing will be supported as it would be nice for extensions (that wish to resize it temporarily). Already have some extension idea.

  • aurellius 5 months ago

    Extension resizing would be tricky from a UX standpoint, as it would make things a little bit unpredictable, but general window resizing will definitely be a thing

    • sureglymop 5 months ago

      I'm picturing this: an extension that, for whatever program is under the cursor, tries to list all keyboard shortcuts/hotkeys. One could then search through them or "launch" them from there. I've always wanted to build this as a fullscreen app but this could be even better.

raun1 5 months ago

I've been ogling Raycast for a while now, wishing I could have that level of functionality. I'm excited to try this instead of ilia in Regolith.

rubymamis 5 months ago

Great job! Would love to see a write up on how you implemented that - especially React integration into the Qt app.

  • aurellius 5 months ago

    Thanks! Yeah I will definitely write something like that in the future

avdept 5 months ago

Any chance to compile it for macOS ARM?

  • aurellius 5 months ago

    not yet but that's the next target

alluro2 5 months ago

Looks amazing, thank you - installing!

mkarrmann 5 months ago

Thank you so much for making this!

bazhand 5 months ago

Installing (Arch btw), love the UI

  • aurellius 5 months ago

    thank you! (from a gentoo user, I guess that makes us cousins)

kevinpiac 5 months ago

I love it! Incredible work!

whydoineedthis 5 months ago

I dont understand why I would use this. Can someone eli5?

tbezman 5 months ago

this is crazy. nice job