Changelog
0.5.0 January 23, 2026
- Added the option to specify a git branch instead of the default one for each repository in each workspace.
- Added options to retry provisioning a workspace and visualizing setup error logs.
-
Most Kubernetes objects created by CPS1 now have their names normalized. That is, their name is summarized to fit their type name length restriction and a random suffix is added to avoid collisions. This prevent some errors that could happen while provisioning environments with very large names that created resources with a very strict name size (e.g statefulsets).
-
Added a new configuration option to set which strategy to use for volume allocation for workspaces:
sharedPerUser: every workspace created by that user will consume a single volume from their namespaceisolatedPerWorkspace: every workspace gets its own isolated volume
The default strategy is isolatedPerWorkspace. To change it, configure the workspaceVolumes in the config object:
workspaceVolumes:
allocationStrategy: isolatedPerWorkspace # Or "sharedPerUser"
Other options added to workspaceVolumes includes size, accessMode, and storageClass. Here is an example with the default values:
workspaceVolumes:
allocationStrategy: isolatedPerWorkspace
size: 12Gi
storageClass: null # leaving it null means it will use the cluster default StorageClass
accessMode: ReadWriteOnce
-
Renamed the contrib chart to catalog, as we feel this name describes its purpose more clearly.
-
Added an optional CronJob that pauses every environment. Configure the values of the platform chart to use it. Here are the default values:
environmentScheduler: enabled: false # Change to true to enable serviceAccountName: "environment-scheduler" clusterRoleName: "environment-scheduler" clusterRoleBindingName: "environment-scheduler" cronJob: name: "environment-scheduler" schedule: "0 22 * * *" image: name: "docker.io/alpine/kubectl" tag: "1.34.2"
If you enable it with the default values every environment will be paused daily at 22:00.
- Added some extra customization options for the platform, such as the Ingress class and their annotations. Here are the default values:
ingress: className: nginx annotations: {}
The internal registry size is also configurable:
internalRegistry:
volumeSize: 50Gi
- Some options were included to control the pod placement for the CPS1 server (operator), gateway and internal OCI registry. The defaults are empty:
workloads: # See https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector nodeSelector: {} # See https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity affinity: {} # See https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/ tolerations: []
Here is an example to provision those pods on nodes tainted with workload=addons:NoSchedule:
workloads:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: workload
operator: In
values:
- addons
tolerations:
- key: workload
operator: Equal
value: addons
effect: NoSchedule
You can use this to create a node group with smaller nodes to run CPS1 and other cluster addons, while a node group with bigger nodes are available to run the development environments.
0.4.1 December 16, 2025
- Version 0.3 added a change where every template is built with user namespaces for Kubernetes 1.33 or newer. But some Kubernetes distributions/worker nodes combinations still doesn't properly support this feature such as Kind (Kubernetes in Docker) and EKS clusters with Bottlerocket. Therefore, now this behavior is opt-in. You can enable it setting CPS1's config
buildWithUserNamespacestotrue(it isfalseby default). - Fixed an issue where an SSH channel would be closed before completely streaming an exec's stderr if the stdout finished streaming.
0.4.0 December 11, 2025
- IDs from resources and workspaces are translated depending on the context to be used in Kubernetes objects name and CEL statements.
- More variables are available in CEL contexts to refer to services exposed by other workspaces. Now it's easy to connect multiple microservices within a single environment:
- The SSH gateway was updated to support JetBrains Gateway.
- Fixed a bug that could make a new environment page become empty
- Fixed the build logs display for templates with multiple workspaces
0.3.1 December 02, 2025
- Add validations in UI and CRDs to block invalid Resources and Workspaces IDs
0.3.0 December 02, 2025
- Add graceful shutdown to the SSH gateway
- Fix a security vulnerability where a custom built malicious SSH client could crash the SSH gateway
- Improve the web UI performance by removing some redundant network requests
- Add support for Kubernetes 1.34
- Fix progress display when a Workspace is starting
- Make the pause/resume button more responsive
- Fix the workspace list showing deleted workspaces
- Improve package selection UI in the template form
- Fix the HTTP gateway blocking preflight requests
- Fix the template form losing data when deleting a package
- Sort template options by name when starting a worskpace
- Build images isolated in user namespaces when possible (kubernetes 1.33 or newer and Linux kernel 6.3 or newer)
- Harden some security settings for workspace pods
- Add ResourceSets, Workspaces and Environments CRDs
- Add TemplateSnapshot and EnvironmentSnapshot
- Resolve CEL statements in ResourceSets
- Update UI to reflect new concepts: an Environment is created from a Template. Templates/Environments contains multiple Workspaces and Resources.
- Disable SSH and WebIDE buttons while workspace is not ready
- Remove some noise from CPS1 server logs
- Improve operator performance removing some network requests to the Kubernetes API
- Add default annotations for user namespaces' Service Accounts
- Resolve CEL statements in Workspaces' environment variables
0.2.0 August 08, 2025
- Fix gateway closing SSH connections after some minutes
- Improve gateway performance for SSH connections
- Improve gateway performance for HTTP requests
- Slightly decrease gateway memory usage
- Make users SSH into their $HOME instead of
/ - Make the gateway consumes less resources from the Kubernetes API Server
- Add support for tag properties in packages
- Fix a bug where resources and services forms would show default values instead of persisted values
- Add support for custom icons in packages
- Add the
aptpackage to the contrib chart - Add the
kubectlpackage to the contrib chart
0.1.0 July 16, 2025
- Initial release