Files
light-heart-labs--dreamserver/ods/extensions/templates
wehub-resource-sync 9e8f1bbeed
Dashboard / frontend (push) Failing after 0s
Dashboard / api (push) Failing after 0s
Lint PowerShell / powershell-lint (ubuntu-latest) (push) Failing after 1s
Python Lint / Lint Python with Ruff (push) Failing after 1s
ShellCheck / Lint shell scripts (push) Failing after 1s
Matrix Smoke / linux-smoke (push) Failing after 1s
Matrix Smoke / distro: cachyos (push) Failing after 15s
Matrix Smoke / distro: linux-mint-21.3 (push) Failing after 15s
Matrix Smoke / distro: debian-12 (push) Failing after 5m21s
Matrix Smoke / distro: fedora-41 (push) Failing after 4m56s
Matrix Smoke / distro: ubuntu-24.04 (push) Failing after 2m13s
Matrix Smoke / distro: rocky-9 (push) Failing after 10m39s
Matrix Smoke / distro: manjaro (push) Failing after 12m11s
Matrix Smoke / distro: opensuse-tw (push) Failing after 11m53s
Matrix Smoke / distro: archlinux (push) Failing after 20m3s
Matrix Smoke / distro: ubuntu-22.04 (push) Failing after 13m49s
Validate .env Schema / tier-1-env-validation (push) Successful in 52s
Validate .env Schema / tier-2-env-validation (push) Successful in 44s
Validate .env Schema / tier-3-env-validation (push) Successful in 52s
Validate .env Schema / tier-4-env-validation (push) Successful in 51s
Validate Extensions Catalog / Check catalog is up-to-date (push) Failing after 9m47s
Secret Scan / Scan for secrets (push) Failing after 21m4s
Validate Docker Compose / Validate Docker Compose files (push) Has been cancelled
Python Type Check / Type check with mypy (push) Has been cancelled
Validate .env Schema / tier-0-env-validation (push) Has been cancelled
Test Linux / integration-smoke (push) Has been cancelled
Lint PowerShell / powershell-lint (windows-latest) (push) Has been cancelled
Matrix Smoke / macos-smoke (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:31:33 +08:00
..

Extension Templates

These files are starter patterns for downstream builders and service authors. They are templates only; they are not loaded by the service registry until you copy them into extensions/services/<your-service>/ and rename the manifest to manifest.yaml.

Files

Template Use it when
service-template.yaml You need a commented manifest.yaml starting point
compose-template.yaml Your service has one normal Docker Compose definition
compose-gpu-swap.yaml Your service has a CPU base image and GPU-specific image tags
compose-gpu-only.yaml Your service only runs with a GPU and needs backend-specific compose files
dashboard-plugin-template.js Your service needs a dashboard plugin entry point

Copy Path

mkdir -p extensions/services/my-service
cp extensions/templates/service-template.yaml extensions/services/my-service/manifest.yaml
cp extensions/templates/compose-template.yaml extensions/services/my-service/compose.yaml

Then edit:

  • service.id
  • service.name
  • service.container_name
  • service.default_host
  • service.port
  • service.external_port_env
  • service.external_port_default
  • service.health
  • service.depends_on
  • service.env_vars
  • feature IDs and required services
  • compose service name, image, ports, volumes, and healthcheck

The manifest service.id, compose service key, container_name, and data directory should all use the same service identity.

Validation

From the ods/ directory:

python scripts/audit-extensions.py --project-dir . my-service
python scripts/audit-extensions.py --project-dir .
docker compose -f docker-compose.base.yml -f extensions/services/my-service/compose.yaml config
git diff --check

If your service has GPU overlays, run compose config with the relevant platform overlay as well:

docker compose -f docker-compose.base.yml -f docker-compose.nvidia.yml \
  -f extensions/services/my-service/compose.yaml \
  -f extensions/services/my-service/compose.nvidia.yaml config

Compatibility Notes

Extensions are most stable when they:

  • keep persistent data under ./data/<service-id>/
  • expose only the ports users need
  • declare secrets in service.env_vars
  • use healthchecks that work before login
  • avoid broad host filesystem mounts
  • avoid changing core service IDs or aliases

For broader downstream guidance, read docs/BUILD-ON-ODS-SERVER.md.