gentian-apps
App Store catalog for Gentian OS — ComponentProfile bundles plus first-party app implementations.
This is the single source of truth for the ComponentProfile catalog metadata of the community
(ce) and maintained (me) editions. Proprietary profiles live in their supplier's catalog.
Structure
profiles/ # App catalog bundles (ce + me editions) — published as the catalog a cluster installs from
odoo/ # family with addons (L3)
base/
base-ce/ # dir is short; the profile is odoo-base-ce
addons/
crm-ce/ # -> odoo-crm-ce
invoicing-ce/ # -> odoo-invoicing-ce
packages/ # AppPackage presets (not deployable)
nextcloud/ # family with addons (L3)
base/
base-ce/ # -> nextcloud-base-ce
addons/ # 9 addons, enabled per tenant
calendar-ce/ # -> nextcloud-calendar-ce
packages/ # AppPackage presets: office, suite
xwiki/ # true singleton: stays flat
paperless-ngx/ # singleton with a companion: paperless-ngx-ce + its MCP server (spec.extensions)
apps/ # first-party implementations (FastAPI + React + Helm)
_template/ # scaffold for new first-party apps (the one source of truth)
charts/ # Helm charts published to oci://ghcr.io/gentian-org/charts
odoo/ # Gentian-authored chart for OCB — backs all 10 odoo profiles
paperless-ngx/ # Gentian-authored chart for the official Paperless-ngx image
gentian-sidecar-*/ # sidecar charts referenced by profiles
images/ # Dockerfiles published to ghcr.io
contracts/ # integration contract schemas
Discovery: catalog = profiles/ · implementation = apps/<name>/ · chart = charts/<name>/
A profile bundle is identified by its profile.yaml, at any depth. It is published under the
profile's metadata.name, not under the directory's — so directories can be short
(addons/crm-ce holds odoo-crm-ce) and CI enforces that metadata.name is globally unique
rather than that it matches the folder.
A bundle is published as one file with one digest: the profile and, after it, the other
objects the app needs on a cluster (its Composition, its OIDC pack, the ConfigMaps its composition
reads, its customization records). The bundle's kustomization.yaml lists what goes in; nothing
else in the directory reaches a cluster. What a bundle may hold and how it is named:
docs/profile-bundles.md.
apps/ is only for first-party apps we build. A chart that wraps an upstream image — vendored
or Gentian-authored — belongs in charts/<name>/, and its profile references it by OCI
coordinates, not by path. Charts and images are not nested inside profiles: charts/odoo
backs 10 profiles, and 7 profiles wrap external charts this repo never contains. See
docs/app-profile-guide.md §2 for why this repo is organized as a
distribution repo rather than an application monorepo.
Branches
Work lands on develop; main is what is released, and a release is a tag on it. v05,
the branch the new architecture was built on, is merged into develop and frozen — do not
push to it.
| Catalog address | Images | Charts | |
|---|---|---|---|
main | https://gentian-org.github.io/gentian-apps/ | version, latest | <version> |
develop | https://gentian-org.github.io/gentian-apps/develop/ | develop-<sha7> | <version>-develop.<sha7> |
A platform release is one tag vX.Y.Z on gentian-os, gentian-ui and gentian-apps, marking what
was tested together. The catalog may move between platform releases, so a newer catalog has
to stay readable by an older platform. The rules: docs/releasing.md.
Licensing
There is no license for the repository as a whole: every app carries its
own. It is the SPDX-License-Identifier: comment at the top of the app's
profile.yaml, and it covers what this repository holds for that app — its
profile, its chart and its image build. A new app is not accepted without one.
What belongs to no single app is Apache-2.0
(LICENSES/Apache-2.0.txt): scripts/,
contracts/, docs/, the CI workflows, apps/_template, the
sidecar charts and images, and images/nextcloud-mcp.
Guides
| Guide | Audience |
|---|---|
| docs/app-profile-guide.md | Publish an existing Helm chart (profile YAML only) |
| docs/custom-app-guide.md | Build a new Gentian-native app end-to-end |
Adding an upstream app
Add profiles/<app>/ (see docs/app-profile-guide.md).
kubectl gentian apps list
Adding a first-party app
- Copy
apps/_template/→apps/<name>/ - Implement backend + frontend + chart
- Add
profiles/<name>/profile.yaml(+kustomization.yaml) - CI (
.github/workflows/apps-ci.yaml) publishes images + OCI chart
Related repos
| Repo | Purpose |
|---|---|
| gentian-os | Orchestrator, CRDs, kernel |
| gentian-deployments | Per-environment tenant state |
| gentian-ui | Portal shell |