Contributing to the Yundera App Store
The Yundera App Store is an open-source, curated collection of Docker-based applications. Anyone can contribute a new app or improve an existing one.
Source of truth
The CONTRIBUTING.md in the AppStore repository is the authoritative reference. This developer guide provides an orientation and quick reference; when in doubt, the CONTRIBUTING.md wins.
Repositories
| Repository | Purpose |
|---|---|
| Yundera/AppStore | Official curated app store shipped to every PCS |
| Yundera/AppStoreLab | Staging store for testing before promoting to production |
Contribution workflow
- Build your app under
Apps/{AppName}/following the file structure and conventions. - Test locally on your own PCS: fresh install, uninstall/reinstall (data preserved), and upgrade.
- Fork the repo, test by pointing the App Store source at your fork (and/or stage in AppStoreLab).
- Open a PR with all required files and every checklist item passing.
- Update asset URLs to point at the
mainbranch before merge (Yundera/AppStore@main, not your fork).
App folder structure
Apps/{AppName}/
├── docker-compose.yml # Required — the app definition
├── icon.png # Required — 192×192 px, transparent background
├── thumbnail.png # Required — 784×442 px
├── screenshot-1.png # Required — 1280×720 px (at least one)
└── rationale.md # Required only when deviating from conventions
Essential conventions (cheat sheet)
| Area | Rule |
|---|---|
| Image tags | Pinned version (e.g., :0.1.2). Never :latest. |
| cpu_shares | Required on every service. Scale: 10–100. |
| User | user: $PUID:$PGID when touching user dirs. Root only for /DATA/AppData/{AppName}/. |
| Data | Persist under /DATA/AppData/$AppID/. Must survive uninstall/reinstall. |
| Networking | Join the external pcs network. Use expose: (not ports:). |
| Auth | Mandatory, enabled by default. Use AppShield sidecar or the app's built-in auth. |
| Assets | URLs via jsDelivr: https://cdn.jsdelivr.net/gh/Yundera/AppStore@main/Apps/{AppName}/{file} |
For the full specification, see Adding an App.