RustCast, a retired Raycast alternative in Rust
An open source alternative to raycast, in rust!! (retired)
At a glance
- What is it?
- RustCast is a popup launcher for macOS written in Rust, with app search, shell script execution, clipboard history, a calculator, emoji and file search and a TOML configuration file, and its README now opens by saying that it is no longer being maintained and pointing at other projects instead. The dependency list in the manifest is the most useful technical document, because it explains the macOS-only decision and the shape of every feature in the list.
- Who is it for?
- RustCast is a good study of a small, well-organised Rust desktop application, and the dependency list explains the design in a way the feature list does not, but it is not something to adopt today: the author states that it is no longer maintained and recommends other projects instead.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 3 days ago.
- What is it written in?
- Mainly Rust, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on November 7, 2026, and from our analysis. They are not legal advice.
Editorial analysis
The README opens with an ending
The most striking thing about this repository is the note at the top, marked as important. RustCast is no longer being maintained. The author explains the sequence: they had been recommending Tinycast, but the developer seems to take bug reports as bad, and now they have decided to become a contributor to Floe instead. Another alternative they know of is Tuna, which is inspired by Quicksilver and is closed source.
That is an unusually candid retirement notice, and it tells you a lot about the project in one paragraph. It is a single-maintainer open source project that was offered as an alternative to a commercial launcher, and the maintainer handled the end of it by naming three specific successors and explaining why one of them was not recommended, rather than leaving the repository to rot. The repository description itself carries the word retired in parentheses.
There is also a sentence about the sponsors. Those who sponsor the author also get a personal easter egg inside RustCast, which is a small and peculiar arrangement: the funding of a discontinued open source application is acknowledged through a hidden feature in that application, and the easter egg list further down the README makes several of them explicit.
Everything else in the repository, the feature list with dates, the credits, the sponsor list and the configuration documentation, is written in the tone of a project that was being run as a hobby with a community around it, and the retirement notice reads like a handover rather than an abandonment. The support routes are still listed, GitHub discussions, issues and the Discord, plus a contact address at the rustcast.app domain.
The feature list, dated to the day
The features are listed with completion dates, which makes the list unusually informative, because you can see the order in which a launcher gets built and the pace of the last few months of work.
The foundation came in November 2025: autoloading the installed applications, and searching through them. The searcher also gained a small utility in the same period, a randomvar command that generates a number between zero and a hundred. Image icons next to the text followed on 13 December 2025, along with customisable themes with configurable colours, and scrollable options the day before.
The scripting support is the feature that makes it a launcher rather than a search box. Variables can be passed into custom shell scripts, and there is a separate repository for a RustCast library for shell scripts, so the shell integration is a supported extension point rather than an accident.
The built-in utilities accumulated quickly from late December 2025 into March 2026: Spotify control, a Google query triggered by typing a question and ending it with a question mark, a calculator on 27 December 2025, clipboard history on 29 December 2025 reachable by typing cbhist, a blurred or transparent background in early January, arrow key selection of options, tray icons, unit conversions in mid January contributed by another developer, emoji searching, RustCast modes in early March, better configuration documentation, image rendering from the clipboard history, file searching, Ctrl-N and Ctrl-P vim motions for navigating results, and a settings panel in March 2026.
The planned list is short: popup note-taking, plugin support, which is marked as partially implemented, a hyperkey feature to map Command, Option, Control and Shift to a physical key, better hotkey picking, and the ability to pick between tabs in Firefox or Chromium using Puppeteer.
And the not-planned list has one entry that decides the whole scope: cross platform support, cancelled for now, as not within the author's ability to support and maintain.
The Cargo manifest explains the design better than the feature list
The dependency list is where a Rust project like this explains itself, because every feature has a crate behind it.
The user interface is iced, the cross-platform GUI library, at version 0.14 with the image and tokio features. That choice is the reason the application was ever plausible on more than one platform, and it is also the reason the retirement is a bigger loss than it looks: the UI layer was not the obstacle.
The macOS-specific layer is the objc2 family. There are crates for AppKit with the NSImage and NSScreen features, for application services with HIServices and Processes, for core foundation, for core graphics with the CGEvent, CGEventTypes, CGRemoteOperation, CGEventSource and libc features, for event kit, for foundation with the date formatter, formatter and string features, and for service management. That is the native macOS API surface, bound to Rust, and it is what the keyboard handling, the window behaviour and the system integration are built on. A Windows port would have needed a different set of bindings entirely, which is exactly what the credits describe happening: Nazeofel is credited as the initiator of Windows support and Mnem42 as having helped add it, and the not-planned list says that cross platform work was cancelled.
The rest of the list maps to features one for one. arboard is the clipboard crate behind the clipboard history, and the same crate is why the feature is privacy sensitive. evalexpr is the expression evaluator behind the calculator. emojis is the emoji set behind emoji search. nucleo-matcher is the fuzzy matcher behind the app search, and its presence is a good sign for search quality. rand is the random number generator. rusqlite with the bundled feature is the embedded database, and the migrations/ directory in the repository is where its schema history lives. minreq with https is the HTTP client behind the Google query and the remote features. tray-icon is the tray icon, global-hotkey is the hotkey support, rfd is the native file dialog, and icns, image and hex and sha2 are the packaging and hashing helpers.
The manifest also says the package version is 0.8.3 while the latest release tag is v0.8.5, and the description calls it a productivity app for macOS, which is the honest summary of where the project ended up.
A TOML file the application writes for you
The configuration story is short and, for a Rust project, slightly unusual, because the file format is TOML rather than the JSON or YAML that a web-oriented project would use.
The config file should be located at ~/.config/rustcast/config.toml. RustCast creates the default configuration for you, and the readme points at two files in the repository: the default options in docs/default.toml, and the full list of everything you can configure in docs/config.toml, with the complete documentation in the project wiki.
Two paths to the same information is a small redundancy, and it is a sensible one. The default file shows what the application does when you have not changed anything, the full list shows the shape of every key, and the wiki holds the prose. A launcher is configured once and then lived with, so a user who wants to change one hotkey should be able to do it by reading a list of keys rather than by reading a manual.
The toml crate is in the dependency list alongside serde and serde_json, which is the standard Rust arrangement: serde for the data structures, toml for the serialisation format, and the JSON support there for the plugin and extension files. The migrations/ directory and the rusqlite dependency point to the same conclusion for the state the application keeps between runs, which is what a launcher with a clipboard history and a settings panel needs.
Two install routes, and a shell script library beside it
Installation is offered in the two ways a macOS user expects.
The Homebrew route is a cask from the author's own tap:
brew install --cask unsecretised/tap/rustcastThe other route is the disk image from the latest GitHub release, and the readme links the direct download URL for the dmg. The release assets are the distribution mechanism, with the badge for total downloads pointing at the releases page.
The scripting integration deserves a note because it is the part that extends the application beyond a search box. Variables can be passed into custom shell scripts, and there is a separate repository for a RustCast Library for shell scripts, which is the library a script author uses to interact with the launcher. Plugin support is on the planned list and marked as partially implemented since 15 December 2025, which suggests the shell script path is the mature half of that idea and the general plugin API is the unfinished half.
The trade-off of that feature is the obvious one and the readme does not soften it. A launcher that can run shell scripts with variables is a launcher that can run anything the user can run, and the blast radius of a typo in a script invoked from a search box is the whole user account. The same is true of the clipboard history, which keeps a rolling record of everything copied, and the arboard dependency in the manifest is the reason that is technically possible.
For a project that has been retired, both of those features are reasons to look before you install.
The credit list is the story of who built it
The acknowledgements section is longer than most, and it is a map of a one-person project with a community around it.
Nazeofel is credited as the first sponsor and as the initiator of Windows support, and is also the person behind the randomvar easter egg, described as a random variable on Discord. Mnem42 helped add Windows support. Random Scientist is the first ever community contributor to RustCast. Lemon sponsored the author and gave him free Discord Nitro, and has a lemon easter egg that shows the word lemon in the launcher. Julie, or Zoey, gave extensive feedback and had been using RustCast since almost the first version. Hriztam added the unit conversions. Lars-Schumann sponsored the project and has the easter egg where searching for f returns ferris.rs. Tanishq Dubey improved the file search to use mdfind, the macOS Spotlight index, which is the kind of change that turns a slow feature into a fast one. JON is a contributor.
The last line is the traditional one about the people who starred the repository, and a separate section lists the contributors to the macOS version through a generated contributors image.
Read as an engineering record, the list says something specific. The application started on macOS, picked up Windows work early enough to have two people credited on it, and then stopped. The Spotlight integration for file search came from outside, and so did the unit conversions. That is the profile of a project whose direction was set by whoever happened to show up, and it is also the profile of a project where the maintainer carried the parts nobody else wanted, which is what makes a retirement note like this one understandable.
Where RustCast is the wrong choice now
The first limit is the one at the top of the readme, and it is decisive. The project is no longer being maintained, the author has moved on to contributing to Floe, and the alternatives named are Tinycast and Tuna. Adopting a launcher whose author has said it is finished means adopting a codebase that will not receive a fix for a macOS API change, a dependency that will eventually stop building, or a security report.
The second is the platform. Cross platform support is on the not-planned list, the manifest describes the application as a productivity app for macOS, and the dependency list is saturated with objc2 bindings. The Windows work that two contributors started was abandoned, and the current build is a macOS application.
The third is the version mismatch, which is small but telling. The manifest says 0.8.3 and the release list ends at v0.8.5, so the source in the repository is not the code in the newest download, which is a mild complication for anybody reading the source to understand the behaviour of the binary they installed.
The fourth is the plugin story, which is half built. The shell script integration works and has its own library repository, but general plugin support is marked as partially implemented, so a user who wants to extend the launcher in a supported way has a narrower road than the readme's headline suggests.
The fifth is the security posture of the two features that make a launcher useful. Shell scripts with variables, and a persistent clipboard history, are the two things a security-conscious user should look at first, and a project that is not maintained is not a good place to find that analysis.
Editorial conclusion
RustCast is a good study of a small, well-organised Rust desktop application, and the dependency list explains the design in a way the feature list does not, but it is not something to adopt today: the author states that it is no longer maintained and recommends other projects instead. Before installing it for anything, understand that the config is a TOML file, that the app is macOS only, and that the two features a launcher most often wants, running shell scripts with variables and keeping a clipboard history, are also the two with the widest blast radius. The licence is MIT, the newest release is v0.8.5 from 2026-07-31, and the last push was on 2026-10-03.
Frequently asked questions
Is RustCast still maintained?
No. The README says RustCast is no longer being maintained, explains that the author had been recommending Tinycast before deciding to become a contributor to Floe, and names Tuna as another alternative that is closed source. The repository description marks the project as retired.
How do I install RustCast?
With Homebrew, using the cask from the author's tap, `brew install --cask unsecretised/tap/rustcast`, or by downloading the dmg from the latest GitHub release, whose download link the README points to directly.
Where is the RustCast configuration file?
At ~/.config/rustcast/config.toml, and RustCast creates the default configuration for you. The default options are shown in docs/default.toml, the full list of configurable keys in docs/config.toml, and the complete documentation is in the project wiki.
Can RustCast run custom shell scripts?
Yes, and variables can be passed into them. There is a separate RustCast Library for shell scripts repository for that, while general plugin support is on the planned list and marked as partially implemented since 15 December 2025.
Does RustCast run on Windows or Linux?
Not now. Cross platform support is listed as not planned and cancelled for now, the Cargo manifest describes the project as a productivity app for macOS, and the dependency list is built on the objc2 bindings for the macOS frameworks.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/mystikolab-rustcast)Was this useful?