Manifests
werkr uses a declarative, Kubernetes-inspired manifest format. You describe the desired state of your resources in YAML files, and werkr takes care of making it happen.
How It Works
When you run wer apply -f manifest.yaml, werkr stores the desired state
and begins reconciling it against the actual state of your infrastructure. Internally,
werkr runs reconciler loops that continuously work toward eventual consistency - creating
VMs, installing tools, setting up SSH access, and configuring port forwarding as needed.
This means you don't need to worry about ordering or manual steps. Define what you want, apply it, and werkr handles the rest.
Resource Types
werkr manages three resource types, all defined as YAML manifests:
- Workstation - A development environment (local VM or cloud instance)
- WorkstationConfig - Tools, packages, files, and settings to apply to matching workstations
- SSHKey - SSH keys to forward to workstations for Git access and remote authentication
Manifest Structure
Every manifest follows the same structure, based on the Kubernetes API conventions:
apiVersion: werkr.dev/v1alpha1
kind: <Workstation | WorkstationConfig | SSHKey>
metadata:
name: <string> # Unique name for the resource
labels: # Optional key-value pairs (used for selector matching)
<key>: <value>
spec:
... # Resource-specific configuration Multiple Resources in One File
You can define multiple resources in a single YAML file, separated by ---.
This is useful for keeping a workstation and its configuration together:
# my-environment.yaml
apiVersion: werkr.dev/v1alpha1
kind: Workstation
metadata:
name: my-dev-env
labels:
team: platform
spec:
os:
id: ubuntu-24.04
provider: aws
providerConfig:
region: us-east-1
machineType: t2.micro
resources:
diskSize: 20
---
apiVersion: werkr.dev/v1alpha1
kind: WorkstationConfig
metadata:
name: platform-tools
spec:
selector:
matchLabels:
team: platform
portForward:
autoForward: true
contents:
devtools:
- docker
- kubectl
- kind
packages:
- tmux
---
apiVersion: werkr.dev/v1alpha1
kind: SSHKey
metadata:
name: id-ed25519
spec:
path: ~/.ssh/id_ed25519 # Apply everything at once
wer apply -f my-environment.yaml Applying from Directories
You can also point wer apply at a directory to apply all YAML files in it:
wer apply -f ./manifests/ Updating Resources
To update a resource, edit the manifest and run wer apply again. werkr
detects the changes and reconciles the resource to match the new desired state.
You can also use wer edit to modify a resource interactively,
wer patch for targeted field updates from the command line, or
wer copy to create a new resource from an existing blueprint.
Next Steps
Create your first local workstation or remote workstation, or explore the reference documentation for Configurations, SSH Keys, and Workstations.