Skip to main content

Blueprint

A blueprint is the configuration template from which workspaces are provisioned. It describes everything the Provisioner needs to create a workspace: the container image, compute resources, network policy, persistent volumes, environment variables, and optional services. Blueprints are organized into inheritance hierarchies and can be composed layer by layer, allowing common configuration to be defined once and reused across many concrete blueprints.

Platform blueprint fields

Platform blueprints are created by platform administrators. A platform blueprint can be concrete — directly selectable by users — or a template (isTemplate: true), which exists only to be inherited from and cannot be provisioned directly. The platform blueprint defines following fields.

FieldTypeDescription
namestringRequired. Unique name, 1–40 characters.
descriptionstringOptional description, max 500 characters.
isTemplateboolMarks as a base template; cannot be provisioned directly. Default: false.
templatestringParent blueprint name to inherit from.
splashstringLogin banner shown at SSH connect. Supports Go template variables.
imagestringRequired. Workspace container image.
imagePullPolicystringImage pull policy: Always, Never, or IfNotPresent. Default: IfNotPresent.
hostnamestringPod hostname. Supports CEL expressions.
subdomainstringPod subdomain. Supports CEL expressions.
k8shelldobjectk8shelld daemon configuration. See k8shelld.
envmapEnvironment variables injected into the workspace container.
networkobjectNetwork policy configuration. See Network.
resourcesobjectCPU and memory limits. Default: 500m / 512Mi. See Resources.
podmanobjectPodman sidecar configuration. See Podman.
storagesmapNamed storage volumes. See Storage.
initScriptslistInit scripts run on first workspace start. See Init scripts.
securityContextobjectKubernetes SecurityContext for the workspace container.
extFilesmapExternal files to mount into the workspace container.
enableAppsboolEnable in-workspace app management. Default: false.
appsmapIn-workspace app definitions. See Apps.

Custom blueprint fields

Custom blueprints are defined by developers in a .k8shell.yaml file at the root of their repository. A custom blueprint always references a platform blueprint as its parent via the template field and can override or extend a subset of its settings without requiring admin access. Custom blueprint defines following fileds.

FieldTypeDescription
templatestringRequired. Platform blueprint to inherit from.
namestringOptional name override.
splashstringLogin banner override.
imagestringContainer image override.
envmapEnvironment variables (merged with parent).
networkobjectNetwork policy overrides. See Network.
resourcesobjectResource limit overrides. See Resources.
storagesmapStorage volume additions or overrides. See Storage.
initScriptslistInit scripts (appended to parent list). See Init scripts.
enableAppsboolEnable app management.
appsmapApp definitions. See Apps.
info

The division between platform and custom blueprint fields is deliberate. Fields that control security-sensitive configuration — such as Linux capabilities, security contexts, and k8shelld settings — are only available to platform administrators. Custom blueprints are intentionally limited to workload-level concerns, ensuring that developer-defined blueprints cannot circumvent platform security policy.

k8shelld

Configuration for the k8shelld daemon container injected into the workspace pod.

FieldTypeDescription
imagestringRequired. k8shelld container image.
imagePullPolicystringImage pull policy: Always, Never, or IfNotPresent.
ignoreOrphanslistProcess names that k8shelld should not treat as orphans.
connection.allowAnyNSboolAllow connections from any namespace.
connection.allowAnySAboolAllow connections from any service account.

Resources

CPU and memory limits applied to a container.

FieldTypeDescription
cpustringRequired. CPU limit (e.g. 500m, 2).
memorystringRequired. Memory limit (e.g. 512Mi, 4Gi).

Network

Network policy for the workspace pod.

FieldTypeDescription
networkPolicyClassstringPredefined policy class: workspace, system, isolated, user, or organization. Default: workspace.
allowEgressToCIDRslistCIDR ranges to permit outbound traffic to.
allowEgressToPodslistPod label selectors to permit outbound traffic to.

Storage

Named storage volumes mounted into the workspace container. Each entry in the storages map is keyed by a logical name.

FieldTypeDescription
enabledboolWhether this storage is active.
idstringAlphanumeric identifier used for the underlying PVC or volume name.
typestringStorage type: local, shared, emptyDir, or memory. Default: local.
pathstringMount path inside the container. Must start with /. Supports CEL expressions.
readonlyboolMount as read-only. Default: false.
sizeLimitstringSize limit for emptyDir and memory types (Kubernetes resource quantity).
existingClaimstringRequired for shared type. Name of an existing PVC to mount.
fsOwnerUidintUID for fsGroup volume ownership fix-up.
fsOwnerGidintGID for fsGroup volume ownership fix-up.
claimSpecobjectFull Kubernetes PersistentVolumeClaimSpec for provisioned volumes.
claimSpecAnnotationsmapAnnotations added to the generated PVC.

Podman

Configuration for the optional Podman sidecar that enables Docker-in-Docker workloads.

FieldTypeDescription
enabledboolEnable the Podman sidecar. Default: false.
imagestringPodman container image. Required when enabled.
resourcesobjectCPU and memory limits for the Podman container. Default: 500m / 512Mi.
createDockerSockSymlinkboolCreate a /var/run/docker.sock symlink pointing to the Podman socket. Default: false.
parentStoragesboolMount workspace storages into the Podman container. Default: true.
extFilesmapExtra files to mount into the Podman container.
storagesmapPodman-specific storage volumes.
securityContextobjectKubernetes SecurityContext for the Podman container.

Init scripts

A list of named shell scripts that run once on the first workspace start.

FieldTypeDescription
namestringRequired. Unique script name.
scriptstringRequired. Shell script content.

Apps

In-workspace apps are lightweight services managed by k8shelld. Each entry in the apps map is keyed by a logical name.

FieldTypeDescription
namestringDisplay name. Required when enabled.
enabledboolWhether this app is active. Default: false.
binarystringPath to the app binary. Required when enabled.
versionCmdlistCommand to check the installed version.
versionRegexstringRegex to extract the version string from versionCmd output.
installstringShell command to install the app if not present.
startlistCommand to start the app. Required when enabled.
listenintPort the app listens on.
restartPolicystringRestart policy: always, on-failure, or never.
maxRestartBackoffdurationMaximum backoff duration between restart attempts.
installAsRootboolRun the install command as root. Default: false.
autoStartboolStart the app automatically when the workspace starts. Default: false.
protocolstringApp protocol: http, https, ws, wss, tcp, or udp.