The in-Möbius browser for discovering, installing, and updating
Möbius mini-apps. Lives at github.com/mobius-os/app-store.
A Möbius mini-app whose job is to install other Möbius mini-apps.
It pulls a curated catalog from the mobius-os organization and
can also install any public manifest URL — paste the URL, preview
the manifest, confirm permissions, install.
The store is meta: it's an app whose Install button hits the
atomic POST /api/apps/install endpoint with a manifest URL or
manifest preview. The backend fetches the entry file, compiles it,
seeds storage, uploads the icon, writes the editable source tree,
and registers any cron schedule as one transaction.
The first time a Möbius container boots, the entrypoint script
clones github.com/mobius-os/app-store and installs it via the
standard manifest install path — same code path users will trigger
from inside the store later. After that bootstrap, the store can
update itself + install any number of community apps.
See Möbius ticket 061 for the bootstrap details.
The default catalog is a hardcoded list of mobius-os/app-* repos
in constants.js. Browse renders immediately from generated manifest
snapshots, then refreshes installed-app status in the background. Install and
update actions always send the live manifest_url to the backend, so a
snapshot is never treated as install authority.
Manifest id == repo name minus the app- prefix == lowercased display name; renames set previous_id so installs migrate in place rather than duplicating.
- Publish your app as
mobius-os/app-<id>(public, MIT or compatible). Repo must contain a validmobius.jsonper the manifest spec. - Add the entry to
CATALOGinconstants.jsandcatalog.json. - Run
npm run refresh-catalogto validate every live manifest and refresh the baked first-paint snapshots.
If you don't want PR-curation, that's fine too — anyone can install
your app from a mobius.json URL using the From URL tab,
no PR required.
Shipping a new version of an app that's already in the catalog is just a repo push — you never touch this repo:
- Push your changes to the app repo (
mobius-os/app-<id>). - Bump the
versionin that repo's ownmobius.json. That version is human-facing: it's what the store shows on the card and in theUpdate to vXbutton.
Update detection is git-native: the backend compares each installed repo's actual content with upstream, so an update can surface even when the version string did not move. The snapshots keep first paint fast and resilient; refresh them when publishing Store changes, but app installation and updating still resolve the live manifest URL at click time.
The store requests only manage_apps: true so it can install
apps. It does not request cross_app_access — seeding storage
into a newly-installed app's own scope is done server-side by the
installer, so the store never needs cross-app write. It also does
not request share_with_apps (other apps cannot read the store's
storage).
MIT — see LICENSE.