Skip to content
TemporalDevServer examples

TemporalDevServer examples

TemporalDevServer runs a single-pod temporal server start-dev instance backed by embedded SQLite. It is designed for local development and CI — not for production. Data is ephemeral by default (wiped on pod restart); a Persistent variant keeps data across restarts via a PVC.

FileDescription
minimal.yamlMinimal ephemeral dev server (dev) — SQLite, UI enabled, no extra setup.
persistent.yamlDev server with a PVC (dev-persistent) and two extra namespaces (orders, billing).
namespace-on-devserver.yamlTemporalNamespace targeting the dev server via the polymorphic clusterRef.

Apply

# Minimal (ephemeral) dev server:
kubectl apply -f minimal.yaml

# Persistent variant with pre-created namespaces:
kubectl apply -f persistent.yaml

# Managed namespace pointing at the dev server:
kubectl apply -f namespace-on-devserver.yaml

# Check status (short name: tds):
kubectl get temporaldevservers
kubectl get tds

Accessing the dev server

The operator creates a Service named <name>-devserver in the same namespace:

EndpointUse
dev-devserver:7233Temporal frontend gRPC (SDK / CLI connections)
dev-devserver:8233Temporal Web UI

From inside the cluster (or via kubectl port-forward):

# Forward the UI to localhost:
kubectl port-forward svc/dev-devserver 8233:8233

# Run the Temporal CLI against the dev server:
temporal namespace list --address dev-devserver:7233

Namespaces

The default Temporal namespace is created automatically at startup. Additional namespaces can be pre-created two ways:

  1. spec.namespaces — list them in the TemporalDevServer spec (see persistent.yaml); they exist as soon as the pod is ready.
  2. TemporalNamespace CRs — create managed namespace objects with a clusterRef pointing at the dev server (see namespace-on-devserver.yaml); the operator reconciles them like it would against a full TemporalCluster.

Polymorphic clusterRef

TemporalNamespace, TemporalSchedule, and TemporalSearchAttribute each accept a clusterRef that can target either a TemporalCluster or a TemporalDevServer. The kind field defaults to TemporalCluster, so existing manifests are unaffected. To target a dev server, set kind: TemporalDevServer:

clusterRef:
  name: dev
  kind: TemporalDevServer

Storage

storage.typeBehaviour
Ephemeral (default)emptyDir volume — data is wiped when the pod restarts.
PersistentPVC provisioned with storage.size (default 1Gi) and optional storage.storageClassName.

Version field

spec.version is the Temporal server version (e.g. 1.31.1), the same value TemporalCluster.spec.version takes. The operator maps it to the matching temporalio/temporal CLI image (which runs temporal server start-dev) using the supported version matrix. When version is omitted, the latest supported server version is used.

To pin a specific CLI image directly instead, set spec.image (e.g. temporalio/temporal:1.7.2); it takes precedence over version.

Manifests

minimal.yaml

apiVersion: temporal.bmor10.com/v1alpha1
kind: TemporalDevServer
metadata:
  name: dev
spec:
  # Temporal server version; mapped to the matching temporalio/temporal CLI image.
  version: "1.31.1"
  ui:
    enabled: true
  storage:
    type: Ephemeral

namespace-on-devserver.yaml

apiVersion: temporal.bmor10.com/v1alpha1
kind: TemporalNamespace
metadata:
  name: my-app
spec:
  # Point at a TemporalDevServer instead of the default TemporalCluster kind.
  clusterRef:
    name: dev
    kind: TemporalDevServer
  retentionPeriod: 72h
  allowDeletion: true

persistent.yaml

apiVersion: temporal.bmor10.com/v1alpha1
kind: TemporalDevServer
metadata:
  name: dev-persistent
spec:
  version: "1.31.1"
  ui:
    enabled: true
  # Pre-create extra namespaces at startup (default is always available).
  namespaces:
    - orders
    - billing
  storage:
    type: Persistent
    size: 1Gi
  service:
    type: ClusterIP