Skip to Content

Custom app stores

Companion Hub can hold more than one app store, and Settings β†’ App Stores lists the ones you have. What you can do there is narrower than it looks, so this page starts with the part that decides whether the rest is useful to you.

You cannot add an app store from the dashboard. The Add App Store button opens a dialog whose submit button is disabled, above the text β€œFeature coming soon β€” Custom app store setup is under maintenance. Your Hub uses the CI Marketplace automatically; no manual store URL is needed.” The cihub CLI has no app-store command either. This is the current state of the shipped product, not a configuration problem at your end.

What your Hub actually has

Every Hub registers one store for itself: CI Marketplace, slug ci-marketplace. It is not a Git repository β€” it is an API-backed store (type: ci_cloud_api) pointed at CI Cloud, registered automatically at startup and kept in sync from there. You do not add it and should not try to remove it.

Git-repository stores β€” a repo with an apps/ directory, one folder per app, cloned into <ROOT_FOLDER_HOST>/repos/ β€” are still supported by the sync code, which refers to them as legacy git stores. They are how stores worked before CI Marketplace. Nothing in the dashboard creates one.

The two store types the sync code knows about, and how each reaches the App Store view:

What you can still do in Settings β†’ App Stores

ActionWorks todayNotes
See every store and whether it is enabledβœ“The table is the full list
Refreshβœ“Re-syncs enabled stores and invalidates the catalog cache
Edit a store β€” rename, enable/disableβœ“The name is capped at 16 characters
Delete a storeConditionallyRefused while the store has installed apps, or when it is the last store
Add a storeNoDialog disabled β€” see the callout above
Everything the Settings β†’ App Stores page offers, and whether it does anything.

Deleting is refused more often than you would expect

Two rules are enforced by the server, and both return an error rather than doing anything partial:

  • β€œThere are installed apps that belong to this appstore. Please uninstall them first” β€” a store with any installed app cannot be deleted. Uninstall its apps first.
  • β€œYou cannot delete the last appstore” β€” your Hub must always have at least one.

Disabling a store is the lighter option: its apps drop out of the App Store view without touching anything you have already installed.

Both rules the server enforces before a store is removed, and the lighter alternative:

The API still exists

The Hub backend still serves POST /api/marketplace/create (session-authenticated, same as the rest of the marketplace routes), so the capability was not removed from the server β€” only the way in from the dashboard was. It is undocumented here on purpose: it is not a supported user-facing path, its request shape is not guaranteed, and nothing in the UI helps you if a store created that way misbehaves.

Apps from any store run on your machine with the same access as any other app. A docker-compose.json can mount host paths and read your data β€” which is why the Settings page carries its own β€œMake sure you trust the appstores you add!” warning.

If you were trying to test an app before submitting it

That is the usual reason people come looking for this page, and the custom-store route is not available for it. Publish your first app covers what to do instead.

Ready to publish to the community store? Submit at ci.computer/store-submitΒ  β€” see Submitting an app to the Store for the required files and review process.

Last updated on