-
Notifications
You must be signed in to change notification settings - Fork 2
Templates Catalog
Templates define the containerized applications users can launch as streaming sessions. They live in the streamspace-templates sibling repo, alongside the Dockerfile sources for custom images.
streamspace-templates/
├── images/ # Dockerfile sources for custom images
│ └── chrome-selkies/ # First custom Selkies-native image
├── selkies/ # Selkies-native template manifests
│ └── chrome-selkies.yaml
├── browsers/ # Inherited LinuxServer-based templates
├── development/ # Inherited LinuxServer-based templates
├── webtop/ # Inherited LinuxServer-based templates
├── … (~50 inherited categories)
├── catalog.yaml # Catalog metadata
└── .github/workflows/
└── build-images.yml # Multi-arch build / cosign sign / SBOM
The Selkies-only platform supports templates whose spec.streamingProtocol is selkies and whose pod exposes the Selkies endpoint on port 8080.
| Template | Image | Streaming |
|---|---|---|
chrome-selkies |
ghcr.io/streamspace-dev/chrome-selkies:latest |
Selkies (WebRTC) on :8080 |
This image is produced by the build pipeline in streamspace-templates/.github/workflows/build-images.yml — multi-arch (amd64/arm64), cosign-signed, with an SPDX SBOM attestation.
Roughly 195 templates inherited from the LinuxServer.io catalog still ship in subdirectories under browsers/, webtop/, etc. They reference lscr.io/linuxserver/<image> images that use KasmVNC on port 3000 — they do not work end-to-end with the Selkies-only control plane.
These remain in the repo as a reference set for the catalog migration, but they are not currently usable. Replacing them with Selkies-native equivalents (using the same images/ build pipeline) is tracked work — see the project board.
- Create
images/<name>/with aDockerfile(and entrypoint if needed) - Match the standards in
images/README.md:- Selkies-GStreamer on port 8080
- OCI labels with title/description/vendor/source
- Health check on
:8080/ - Standard env knobs:
DISPLAY_SIZEW,DISPLAY_SIZEH,SELKIES_ENCODER,SELKIES_ENABLE_AUDIO,TZ
- Add a template manifest under
selkies/<name>.yaml:
apiVersion: stream.space/v1alpha1
kind: Template
metadata:
name: <name>
namespace: workspaces
spec:
displayName: <Human Name>
description: <One-liner>
category: <category>
baseImage: ghcr.io/streamspace-dev/<name>:latest
streamingProtocol: selkies
defaultResources:
requests:
memory: 2Gi
cpu: 1000m
ports:
- name: selkies
containerPort: 8080
protocol: TCP- Open a PR — CI will build only the changed image, sign it, and attach an SBOM. Merging to
mainpublishes:latestand:sha-<short>; pushing avX.Y.Ztag publishes the semver tags.
# Confirm signature (keyless, GitHub Actions OIDC)
cosign verify ghcr.io/streamspace-dev/chrome-selkies:latest \
--certificate-identity-regexp '^https://github.com/streamspace-dev/streamspace-templates/' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
# Inspect SBOM
cosign download attestation ghcr.io/streamspace-dev/chrome-selkies:latest \
--predicate-type https://spdx.dev/Document- Honor the env knobs above so users can resize displays and toggle audio without rebuilding
- Use a non-root user inside the container
- Don't bake credentials or org-specific config into the image
- Pin upstream base image versions (e.g.
selkies-gstreamer:24.04, not:latest)
See the repo's CONTRIBUTING.md for the full submission workflow.