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
ODS Extensions
This directory contains all service extensions that ship with ODS. Each subdirectory under services/ is a self-contained extension with a manifest and optional compose files.
Documentation Map
| Document | What it covers |
|---|---|
| Extension Authoring Guide | How to create a new extension: directory structure, manifest contract, compose patterns, GPU overlays, enable/disable mechanism, validation, and runtime lifecycle |
| Build On ODS | How to fork ODS, ship a custom edition, keep changes rebase-friendly, and validate downstream changes |
| Extension Templates | Copy-ready manifest, compose, GPU overlay, and dashboard plugin starter files |
| Extension Catalog | List of all bundled extensions with ports, categories, and GPU compatibility |
| Manifest Schema Reference | JSON Schema specification for manifest.yaml — all fields, types, and validation rules |
| Host Agent API | API contract for the host agent that starts/stops extension containers from outside Docker |
| Dashboard API Extensions Endpoints | REST API for browsing, installing, enabling, disabling, and uninstalling extensions |
Directory Layout
extensions/
CATALOG.md # Bundled extension catalog
README.md # This file
schema/
service-manifest.v1.json # JSON Schema for manifest validation
README.md # Schema documentation
templates/
service-template.yaml # Commented manifest starter
compose-template.yaml # Commented compose starter
compose-gpu-swap.yaml # CPU base + GPU image swap pattern
compose-gpu-only.yaml # GPU-only overlay pattern
services/
<service-id>/
manifest.yaml # Service metadata (required)
compose.yaml # Docker Compose fragment (extension services)
compose.amd.yaml # AMD GPU overlay (optional)
compose.nvidia.yaml # NVIDIA GPU overlay (optional)
compose.local.yaml # Mode-specific overlay (optional)
README.md # Per-service documentation (optional)
Core services (llama-server, open-webui, dashboard, dashboard-api) only have a manifest.yaml here — their compose definitions live in docker-compose.base.yml at the repository root.
Quick Links
- Add an extension: 30-Minute Path
- Build a custom edition: Build On ODS
- Copy starter files: Extension Templates
- Validate manifests:
bash scripts/validate-manifests.shorods config validate - Audit extensions:
python3 scripts/audit-extensions.py --project-dir . - Enable/disable from CLI:
ods enable <id>/ods disable <id>