Open-source project
oliverschwendener/ueli avatar
oliverschwendener/ueli

Ueli: a cross-platform keystroke launcher built on Electron and TypeScript

Cross-Platform Keystroke Launcher

4,603 stars276 forksTypeScriptMIT

At a glance

What is it?
Ueli puts a search box behind Alt+Space on Windows, macOS and Linux, with extensions for app search, file search, calculator, currency conversion and more. The install path differs sharply per platform, and the Linux hotkey story has a documented caveat.
Who is it for?
Adopt Ueli if you want one launcher across Windows, macOS and Linux and you accept unsigned binaries on macOS and Linux, or the Microsoft Store build on Windows. Do not adopt it if you need a signed, notarized macOS package out of the box, or if you run a Wayland session and cannot bind a custom shortcut yourself.
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 19 days ago.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 30, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What Ueli is for, and who ends up using it

Ueli is a keystroke launcher: a window that appears over whatever you are doing, takes a query, and returns a list of things you can act on. The repository describes it as cross-platform, and the release history shows builds for Windows, macOS and Linux from the same codebase. The intended user is someone who wants one launcher habit across more than one operating system, rather than a different tool per machine.

The scope is wider than launching applications. The extension list in the README covers Application Search, File Search and Simple File Search, Browser Bookmarks, Calculator, Color Converter, Base64 Conversion, Currency Conversion, a Password Generator, UUID / GUID Generator, DeepL Translator, JetBrains Toolbox, Visual Studio Code, Terminal Launcher, System Commands, System Settings, Windows Control Panel, Appearance Switcher, Quick Formatter, Rowland Text Editor, Custom Web Search, Web Search and Ueli Commands. That is a long list, and it tells you the project is positioned as a general command surface, not just an app switcher.

The obvious audience is developers and power users who already live on the keyboard. The less obvious audience is anyone standardising a team on one launcher; the cross-platform claim is the pitch there, since the same keybinding and the same settings vocabulary apply on all three systems.

How the launcher is put together

The repository layout points to an Electron application. package.json declares `electron`, `electron-vite` for the build, `electron-builder` for packaging, React with `@fluentui/react-components` for the interface, and TypeScript throughout. The `main` entry is `out/main/index.js`, which is the Electron main process bundle produced by `electron-vite build`.

That split matters when you evaluate the project. The search index, extension logic and system integration live in the main process; the window you type into is a renderer. Extensions are therefore not sandboxed browser widgets, they are modules with access to the host system, which is what allows File Search, Terminal Launcher and System Commands to exist at all. It is also why the project ships a PRIVACY_STATEMENT file at the repository root rather than leaving the question open.

Each extension has its own README under docs/Extensions, and the top-level README links to each one. The main README states that enabling an extension in the Extensions view adds a dedicated entry in the left navigation for that extension's settings. The Settings section of the README is marked "Under construction", so the documentation for global settings is thinner than the per-extension pages.

Installing Ueli and running a first search

The README is explicit that you should download Ueli only from the Microsoft Store, from https://ueli.app, or from this repository. On Windows the store route is the supported one, and the README gives a winget command for it:

bash
winget install Ueli -s msstore

The `-s msstore` flag pins the source to the Microsoft Store. The README notes that manually downloaded Windows binaries are not signed, and that Windows will prevent you from installing or opening them.

On macOS and Linux, installation means downloading from the releases page. The README states that macOS binaries are neither signed nor notarized, so the first launch is blocked. The documented workaround is to open System Settings, go to Privacy & Security, and click "Open anyway".

Once the app is running, the first steps are in the README. Launch the app and the main window appears; type what you are looking for. The global hotkey is Alt+Space, which shows and hides Ueli. Arrow keys move through results, Enter launches the selected item. To reach the extra actions for a result, press Cmd+K on macOS or Ctrl+K on Windows and Linux, then Enter to invoke the highlighted action and Escape to close the menu. Settings open with Cmd+, on macOS or Ctrl+, on Windows and Linux.

A concrete first use is adding something to favorites. Open the additional actions menu for a result and choose "Add to Favorites"; the README states that the item then always appears first in the search result list. Favorites can also be managed from the Favorites page in settings, where an "x" icon removes an entry.

The Wayland hotkey problem, and other rough edges

The README has a Known issues section, and for Linux it is blunt: global hotkeys may not work under Wayland sessions. The workaround it gives is to bind a custom shortcut in your system settings that calls `ueli` to show and focus the main window, or `ueli --toggle` to toggle it. Those two invocations are the only CLI surface the README documents.

That is a real constraint, not a footnote. On a Wayland desktop, the single feature that defines a keystroke launcher, the global hotkey, may simply not fire until you configure it yourself outside the app. If your distribution defaults to Wayland and you are not willing to edit your desktop's keyboard shortcuts, Ueli is the wrong tool on that machine.

The signing situation is the second rough edge, and the README frames it as a cost decision: Windows binaries from the releases page are unsigned, and macOS binaries are neither signed nor notarized. The macOS path requires the Privacy & Security detour on first launch. For a personal machine that is a few clicks. For a managed fleet with application control policies, it is a blocker you should confirm before rolling anything out.

A third gap is documentation. The Settings section of the README says "Under construction", so anything beyond the first-steps list, the extension pages and the Debug view is not described there. The Debug view itself is documented: go to Settings, click Debug, and look for logs. That is the first place to look when an extension misbehaves.

Ueli against Flow Launcher and Albert

The natural comparison is Flow Launcher on Windows and Albert on Linux. Both appear in the searches people run around this project, and the difference in approach is worth stating plainly.

Flow Launcher is a Windows application. Its plugin ecosystem and its clipboard handling are Windows-specific concerns, which is why people search for Flow Launcher clipboard behaviour rather than a cross-platform equivalent. Ueli's bet is the opposite: one TypeScript codebase, one settings model and one extension API across Windows, macOS and Linux. If you only ever use Windows, that portability buys you nothing, and you are accepting Electron's memory footprint for a feature set a native Windows launcher already covers.

Albert is the Linux-side comparison. It is a Linux launcher, and the searches around it are framed as "Albert Ubuntu". Ueli on Linux inherits the Wayland hotkey caveat described above, so on a modern Ubuntu Wayland session you may end up doing manual shortcut binding that an Albert user would not. On X11 sessions the caveat does not apply according to the README, which scopes the problem to Wayland sessions specifically.

The honest summary: choose Ueli when the cross-platform constraint is real for you, and choose a platform-native launcher when it is not. The extension list is broad, but breadth is not the differentiator here; the shared codebase is.

Building from source, licence and maintenance cost

The repository is MIT licensed, and the LICENSE file sits at the root alongside PRIVACY_STATEMENT and CODE_OF_CONDUCT.md. MIT is permissive: you can use, modify and redistribute the code, including in closed products, provided the copyright notice and permission notice are preserved. That is a statement about the licence text, not legal advice for your situation; if you plan to redistribute a modified build, read the LICENSE file yourself.

The contribution guidelines are the entry point for source work, and they come with requirements. Node.js 24 is listed as a requirement, and commit signing must be enabled. Setup is `npm install`, then `npm run dev` to run in development mode. The package.json shows a `postinstall` hook that runs `npm run rebuild`, which in turn runs `electron-builder install-app-deps`, so native dependencies are rebuilt automatically after install.

Quality gates are exposed as separate scripts: `npm run format:check`, `npm run format:write`, `npm run lint`, `npm run typecheck` and `npm run test`, with `npm run check` chaining typecheck, lint, format check and tests. Packaging is `npm run build` followed by `npm run package`, and `package:publish` adds `--publish always`. The toolchain is current and opinionated: oxlint and oxfmt for lint and format, vitest for tests, TypeScript 7 and Vite 8 in devDependencies.

Upgrade cost depends on which channel you are on. Microsoft Store installs update through the store. macOS and Linux users download new releases from the releases page, and each release brings the same unsigned-binary friction on macOS. The last push to the repository was on 2026-09-12, and the most recent tagged release listed is v9.29.0 from 2026-06-22, so release cadence is roughly monthly rather than continuous.

Editorial conclusion

Adopt Ueli if you want one launcher across Windows, macOS and Linux and you accept unsigned binaries on macOS and Linux, or the Microsoft Store build on Windows. Do not adopt it if you need a signed, notarized macOS package out of the box, or if you run a Wayland session and cannot bind a custom shortcut yourself. Before installing, verify the release page for your platform, confirm whether you can live with the Privacy & Security workaround on macOS, and check the Extensions wiki page for the specific extensions you need.

Frequently asked questions

How do I install Ueli on Windows?

The README points to the Microsoft Store, or to winget with `winget install Ueli -s msstore`. Manually downloaded Windows binaries from the releases page are not signed, and Windows will prevent you from installing or opening them.

Why does macOS block Ueli when I try to open it?

The README states that macOS binaries are neither signed nor notarized because of cost reasons, so macOS blocks the first launch. Open System Settings, go to Privacy & Security and click "Open anyway".

Does Ueli work on Linux with Wayland?

The README lists global hotkeys as a known issue under Wayland sessions. The documented workaround is to bind a custom shortcut in your system settings that calls `ueli` to show and focus the main window, or `ueli --toggle` to toggle it.

Official sources

  1. License: MIT
  2. oliverschwendener/ueli on GitHub
  3. Project website
  4. README
  5. Releases
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.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/oliverschwendener-ueli.svg)](https://hysenlabs.com/projects/oliverschwendener-ueli)