Standalone apps for Omarchy, all in one place.
Install · Use · Publish an app · How it works
OmaStore is an app store for Omarchy. It finds community
apps published on GitHub, shows what each one does, and installs the app's
latest release into your account with a menu entry, without sudo. It keeps
the apps up to date, lets you go back to the previous version, and removes
them cleanly.
| Discover | See the details before installing |
|---|---|
![]() |
![]() |
Early days: an app joins the catalog when its author adds an
omastore.tomlto the repository, so the catalog is still small. Publishing takes three steps.
- One place to find apps. Search, categories, screenshots, and each app's README, release notes, changelog and similar apps.
- Install without touching the system. Apps live in
~/.local/share/omastore/apps/, with a command in~/.local/binand a menu entry. Uninstalling removes exactly what was installed. - Apps that stay current. Updates whose download can be verified install
on their own after
omarchy update, when you open the store (at most every 12 hours) and from the daily timer of a package install. You get a notification of what changed. Updates without a checksum wait for you. Turn it off in Settings. - Updates you can undo. An update keeps the version it replaced: an open app keeps running, and Go back returns to the previous version without downloading anything. Each app shows its install and update history.
- Know what you install. Every download is checked against GitHub's sha256 or the release's checksum; a file with neither needs your confirmation. When the author attests the build, the app page shows Built by this repository's GitHub Actions (verified with Sigstore). In Settings you can allow only apps that have this provenance.
- The whole app, not only the binary. The system packages an app declares
in its
PKGBUILD, and the libraries its executable needs and your system lacks, are listed on its page. The missing ones from the pacman repositories install with one click (pacman asks for your password; AUR packages are never installed for you). Apps with a background service get theirsystemd --userunit set up, kept across updates and removed with the app. - Problem apps leave the catalog. Report this app to OmaStore on an app's page opens a form; apps the maintainers confirm as harmful or misleading are blocked for everyone: they leave the catalog, are never installed or updated, and people who have one see why. Stars on GitHub are the ratings (the ★ button on each page).
- Feels like Omarchy. Follows the active theme's colors and fonts and switches with it, works from the keyboard, and speaks English and Brazilian Portuguese (it follows the system language).
On Omarchy (or Arch), without sudo:
curl -fsSLO https://github.com/KitsuneForgering/OmaStore/releases/latest/download/install.sh
sh install.shThen open OmaStore from the menu. The first run downloads the daily catalog snapshot (checked against its build attestation), so the apps show up right away; later refreshes ask GitHub only for what changed.
Recommended: gh auth login (or export GITHUB_TOKEN=...). Without a
token, GitHub allows 60 requests per hour, which is not enough to index the
whole catalog, and starring apps needs it.
What the script does:
- downloads the latest release for Linux x86_64, checks it against the
published SHA-256 (the check covers the tarball, not
install.shitself) and installsomastore,omastoredandomastore-guiinto your account; - needs
curl,tar,sha256sumand Qt 6 (qt6-base,qt6-declarative,qt6-svg); - on Omarchy, adds a hook so
omarchy updatealso updates your OmaStore apps (--no-hooksskips it); - copies the skills for app authors into each coding agent
you have (
--no-skillsskips it). An older copy of the same skill is moved to~/.local/share/omastore/skill-backups/and replaced by the current one.
OmaStore updates itself: the sidebar offers Update OmaStore when a release
is out (or run omastore self-update). To remove it, with its skills and hook
(your catalog and the apps you installed stay):
sh install.sh --uninstallOther ways to install
pacman: download the PKGBUILD attached to the
latest release
(package omastore-bin) and run makepkg -si. To build master instead:
git clone https://github.com/KitsuneForgering/OmaStore
cd OmaStore/packaging/arch
makepkg -si
systemctl --user enable --now omastored.socket # optional: on-demand daemon
systemctl --user enable --now omastore-index.timer # optional: daily catalog refresh and updatesA package cannot write to your home, so link the Omarchy hook yourself:
ln -s /usr/share/omastore/omarchy/omastore.hook ~/.config/omarchy/hooks/post-update.d/.
Without the socket unit, the interface starts the daemon when it needs it.
From source: with the development requirements,
git clone https://github.com/KitsuneForgering/OmaStore
cd OmaStore
make dist VERSION=v0.4.0-dev
sh packaging/install.sh dist/omastore-0.4.0-dev-x86_64-linux.tar.gzmake release && sudo make install (default PREFIX=/usr/local) also works
and takes over from a per-user installation.
Open an app's page, press Install, then Open. The Installed page lists your apps and their updates; Settings in the sidebar turns automatic updates and the provenance requirement on or off.
| Key | Action |
|---|---|
/ |
search |
h j k l or arrows, Enter |
move through the apps, open one |
i / u |
install / update the open app |
Esc |
go back |
Ctrl+R |
look for new apps and versions |
? or F1 |
list every shortcut |
Links of the form omastore://owner/repo (in a README, a chat) open the app's
page; a window already open shows it instead of opening another.
Everything also works from the command line:
omastore list --category Graphics
omastore show pch/rawmakase # details, files and their build provenance
omastore install pch/rawmakase
omastore update # every installed app (or the ones you name)
omastore rollback pch/rawmakase # back to the version the last update replaced
omastore uninstall pch/rawmakase # refuses while it runs; --force removes it anyway
omastore deps pch/rawmakase # system dependencies; --install installs them
omastore auto-update off # automatic updates (on by default)
omastore require-provenance on # only attested builds (off by default)
omastore help # every commandYour app joins the catalog in three steps:
- Add an
omastore.tomlat the root of the default branch. It can be empty: fields fix what the store would guess wrong (icon, executable, which file to install) and declare a background service if the app has one. - Publish a release with a Linux binary, a tarball per architecture,
ideally built by a GitHub Actions workflow with
actions/attest-build-provenanceso users see that your repository built it. - Check it: open Publish your app in the sidebar, or run
omastore check owner/repo. It shows what the store sees, what blocks it, and a ready-to-commitomastore.toml. The checker downloads and inspects release files without installing or running the app.
Using a coding agent? The author skills write the manifest,
set up the release workflow and audit the app with OmaStore itself. The full
rules are in docs/authors.md.
omastore-gui (C++/Qt Quick) ── JSON-RPC 2.0 / Unix socket ──▶ omastored (Go)
presentation only indexer, SQLite cache,
installer, image cache
- Discovery: repositories with an app
omastore.toml, found through GitHub code search, theomarchytopic and curated lists. An SQLite cache with conditional requests means a refresh only reprocesses what changed. - Downloads come only from the repository's latest stable release, never from a URL in the manifest. The digest is checked, and build attestations are verified with Sigstore and must be signed by a workflow of the app's own repository.
- Installation never runs anything from the package, guards against path
traversal and symlinks leaving the app's folder, never overwrites files that
are not OmaStore's or shadows system commands, and is undone if something
fails midway. System packages are the only thing installed as root: only when
you accept, through
pkexec pacman -S --needed, from the configured repositories. - The interface never touches the network: images and data come through
the daemon. Protocol:
docs/ipc.md. Ideas under discussion:docs/ideas/.
Requirements: Go 1.26+, a C compiler (CGO, for SQLite), Qt 6.5+ (qt6-base,
qt6-declarative, qt6-svg; qt6-tools for the translations), CMake and Ninja.
make # builds everything (bin/ and frontend/build/)
make check # gofmt + vet + backend tests (what CI runs)
make test # all tests, backend and frontend
make run-gui # opens the interface with the daemon from bin/
make help # every targetTests do not access the network: the GitHub API is simulated with httptest,
the daemon with a fake QLocalServer, and build attestations with a recorded
bundle and trust root.
Bug reports, ideas, translations and pull requests are welcome: see CONTRIBUTING.md, and CHANGELOG.md for what changed in each release. Report security problems privately, as described in SECURITY.md.
MIT — see LICENSE.



