Create an App Store From Scratch
Use this path when you are creating a new ZimaOS-compatible third-party store.
If you already have a v1 zip-based store, read Migration Strategy first. Migration reuses most of the existing Apps/ tree and has a shorter path.
Minimum source files
A new store using the v2 protocol starts with:
store-config.json: store identity and store-level localized text.supported-languages.json: locale candidates for generated output.Apps/<AppName>/docker-compose.yml: one source compose file per app.- app assets such as
icon.svg,thumbnail.png, andscreenshot-1.png.
scripts/build_dist.sh is optional but recommended for local builds. CI can call IceWhaleTech/build-appstore-action directly.
Build path
- Create the repository structure described in Repository Structure.
- Add
store-config.jsonwith a stablestore_id, localizedname,maintainer, and optional description. - Add
supported-languages.jsonwith the locales you want the build to consider. - Add one directory per app under
Apps/. - Put Docker runtime configuration in standard Compose sections.
- Put store metadata in the top-level
x-casaosblock. - Run the build action or
./scripts/build_dist.sh. - Publish the generated
dist/directory to static hosting.
First app checklist
For each app, make sure the source compose has:
- top-level Compose
name services- top-level
x-casaos.id x-casaos.mainx-casaos.indexx-casaos.port_mapx-casaos.iconx-casaos.titlex-casaos.category
Recommended metadata:
taglinedescriptionauthordeveloperarchitecturesversionwebsite,repo,support, ordocswhen available
Publish target
Stores using the v2 protocol are consumed as static files. Any HTTPS static host works:
- GitHub Pages
- Cloudflare Pages
- Netlify
- self-hosted Nginx
- any CDN or object storage that serves the generated files unchanged
Set the build base-url to the final public URL where dist/ will be reachable. This URL is written into generated app file and asset paths.