Release 2026.02.01
Saturn Cloud release notes for 2026.02.01
Infrastructure Component Upgrades
| Component | Version |
|---|---|
| Traefik | v3.6.7 |
| OpenSearch | 2.19.0 |
| Prometheus | v3.9.1 |
| Cluster Autoscaler | v1.35.0 |
| Calico | v3.31.3 |
| NVIDIA Device Plugin | v0.17.4 |
| NFS CSI Sidecars | v4.12.1 |
| PostgreSQL | 18 |
| EKS (AWS) | 1.35 |
Traefik v3
- Upgraded to Traefik v3.6.7
- CRD API group migrated from
traefik.containo.ustotraefik.io - Migration script handles both Helm-managed and application-created IngressRoutes, Middlewares, TLSOptions, and TLSStores across all namespaces
OpenSearch
- Migrated log storage to OpenSearch 2.19.0
- All resource names change from
elasticsearch-*toopensearch-* - Init container now uses the
saturnK8sUtilsimage instead of the Elasticsearch image - Values keys renamed:
replicas.elasticsearchtoreplicas.opensearch,computeResources.elasticsearchtocomputeResources.opensearch
PostgreSQL 18
- Blue-green migration strategy: old and new Postgres run side-by-side during migration
- Migration script performs
pg_dumpall | psql, re-hashes passwords for scram-sha-256 compatibility, patches secrets to point to the new instance, and verifies table counts - Three-phase deployment: current version, both running, new version only
- Includes dry-run mode
API Standardization
Significant work was done to standardize the Saturn Cloud API across all routes. The frontend API client is now auto-generated from the backend’s OpenAPI spec, replacing the hand-maintained client with type-safe generated TypeScript.
Pagination
All list endpoints now use consistent cursor-based pagination with prev_key/next_key instead of mixed pagination styles. Affected endpoints include workspaces, deployments, jobs, Dask clusters, images, image tags, groups, invitations, orgs, secrets, service accounts, shared folders, SSH keys, subscriptions, tokens, users, and recipes.
Breaking Changes
- Logs endpoints (
/api/{workspaces,deployments,jobs,dask_clusters}/{id}/logs):logsfield changed from a string to a list of objects with metadata per log line - Viewer endpoints (
/api/{workspaces,deployments}/{id}/viewers): Removeduser_id/group_id/name/avatar_urlfields, replaced withidentitynested schema. POST now returns only the newly created viewer. - SSH key endpoints: Renamed from
/api/ssh-private-keysand/api/ssh-public-keys(hyphenated) to/api/ssh_private_keysand/api/ssh_public_keys(underscored). Old endpoints are deprecated. List keys renamed fromsshkeystossh_private_keys/ssh_public_keys. - Users endpoint (
/api/users): Replacedqquery parameter with structured query schema. Removedorg_idquery parameter. - External repos: Removed
privatefield (was alwaystrue). - Resource recipes (
/api/resource_recipes): Removed entirely.
Deprecations
PUTreplaced byPATCHon: workspaces routes, deployment routes, Dask cluster routes, shared folders, service accounts, user preferences/api/base_imagesdeprecated in favor of/api/images?is_base=true/api/invitations/{id}/approveand/api/invitations/{id}/rejectdeprecated in favor ofPATCH /api/invitations/{id}/api/service_accounts/entitlementsdeprecated in favor of/api/service_account_entitlements/api/user/org-membershipsdeprecated in favor of/api/user/owners
Other API Changes
/api/deployments/infoand/api/jobs/infoseparated into distinct endpoints- Dask clusters:
job_idseparated fromdeployment_idin request/response schemas - Recipes:
spec.secrets.typerenamed tospec.secrets.attachment_type - Service accounts: POST response no longer wraps object in a
service_accountkey - User preferences:
user_idparameter removed (current user only) /api/userGET: removedinfokey (use/api/infoinstead)
Nuxt UI v4
- Frontend upgraded to Nuxt v4 and Nuxt UI v4
- Complete visual refresh of all UI components (modals, sidebars, navigation, forms, page headers)
Resource Form Improvements
- Resource create/edit forms reorganized into a unified component structure
- “Advanced settings” checkbox removed; all settings are visible by default
- Environment variables use a structured key-value table input
- Paginated select components for large lists
Pod Summary API
- Pod data extracted from runtime summaries into a dedicated paginated
pod_summariesAPI - Polling interval scales with collection size for large pod sets
- Reduces API response sizes for deployments with many pods
Resource Type Standardization
- Resource types consolidated:
JUPYTER_WORKSPACEandRSTUDIO_WORKSPACEmerged intoWORKSPACE,DASK_CLUSTERrenamed toDASK - Database migration updates
usage_limitsandresource_statustables in-place
Database Index Optimization
- Added partial indexes optimized for paginated queries across 12+ tables
- Replaces old composite COALESCE-based indexes with conditional partial indexes
Frontend UX
- Org switching works without navigating back to dashboard
- Standardized page headers across all pages
- Resource status no longer flickers briefly after starting a resource
- Subscription info cached in a Pinia store to reduce redundant API calls
- Improved show/hide password toggle behavior
- Improved responsiveness of log viewer pages
- Navigation items filtered by disabled state
Bug Fixes
- Fixed multi-cluster job unscheduling leaving orphaned CronJobs on remote clusters
- Fixed operator token refresh always using
managerURIfrom env instead of the configured source - Added startup probe to operator deployment
- Fixed excess ReplicaSet accumulation in operator
Operator
- All component images (Calico, OpenSearch, Postgres18) now flow through the operator’s top-level
imagesconfig - AWS region wired through to cluster-autoscaler
- RBAC expanded for Calico staged policy resources, Traefik nodes/configmaps, and cluster-autoscaler volumeattachments/resourceclaims
- New
scripts/migrate.shhandles Traefik CRD migration and Postgres upgrade with dry-run support - New
scripts/upgrade-eks.pyfor incremental EKS cluster version upgrades
Security Updates
- Updated cryptography, marshmallow, authlib, deepdiff (Python)
- Updated lodash, webpack, h3, devalue, nuxt (JavaScript)
- User creation no longer sets dummy passwords; uses null for OAuth-only users