Release 2025.06.01
Saturn Cloud release notes for 2025.06.01
Multi-Cluster Support
- Added Open Cluster Management (OCM) integration for deploying workloads across multiple Kubernetes clusters
- Hub cluster coordinates spoke clusters via ManifestWork resources, with workload status aggregated back to the hub
- Internal services (Pandora, Prometheus, Elasticsearch) can now communicate across clusters over a dedicated Traefik entrypoint with mTLS
- Docker registry secret management decoupled from the application into a standalone cronjob, so spoke clusters no longer need a full application deployment to refresh image pull credentials
- Workspaces can be pinned to specific clusters via a new
clustercolumn
New Cloud Providers
- Added support for Crusoe, Vultr, TensorWave, and k0rdent as cloud providers
- Added GCP installer with GKE cluster provisioning, GCS object storage, and GCP node management via Terraform
- Added OCI (Oracle Cloud Infrastructure) installer
- Added Nebius installer with instance types for CPU and H100 GPU configurations
- S3 bucket is now optional to support providers without S3-compatible object storage
- Config loading supports
gcs://URLs in addition tos3://
AMD GPU Support
- Added AMD as a hardware type alongside CPU and NVIDIA
- GPU tolerations, labels, and scheduling are now hardware-type-aware
- Added ROCm-based images for AMD GPU workloads
White Labeling
- The Saturn Cloud UI can now be rebranded for partner deployments
- Configurable brand name, logos, favicon, primary color, support email, and documentation URLs
- Admin CLI script for configuration (
setup_whitelabel.py) - Backend always returns white label config with Saturn Cloud defaults when not customized
Dashboard Redesign
- New dashboard page set as the default landing page
- Quick action items and resource templates displayed on dashboard
- Resource-specific navigation links from dashboard
- Updated quickstart icons and sidebar layout
Frontend Rewrite
- Frontend migrated from Vue 2 (vue-cli/webpack) to Vue 3 with Nuxt
- Net reduction of ~22,000 lines indicating a cleaner architecture
Resource Tags
- Resources (workspaces, deployments) can now be tagged with arbitrary key-value metadata
- Stored as JSONB, useful for organization and cost allocation (e.g.,
{"environment": "production", "project": "alpha"})
Idle Detection Overhaul
- Workspace auto-shutdown now uses Prometheus network activity metrics instead of JupyterHub’s internal API
- Checks Traefik open connections, Traefik request rate, and SSH connections to determine activity
- New Prometheus recording rules aggregate HTTP and SSH activity per resource
- Traefik and SSH proxy (sshpiper) now expose Prometheus metrics
- Dry-run mode added for testing idle detection configuration
Usage Tracking
- New hourly usage records table for per-hour usage tracking by subscription, user, and org
- Admin API endpoints for submitting and querying usage records with dollar amount breakdowns
- Usage limits card only shown when there is an hourly cap
Organization Lifecycle
- Organizations can be locked with a reason (admin action or no payment method)
- Org cleanup automation: configurable deletion schedules for trial expiry (7 days), no payment (30 days), and abuse (2 days)
- Cleanup runs as a daily cronjob with dry-run support and notification scheduling
- Free trial tracking via user metadata (IP, email domain, country, LinkedIn, job title)
- Trusted org flag added to usage limits, propagated to K8s labels for operator enforcement
Instance Type System
- Instance sizes now include
gpu_type,hardware_type,cloud,price_per_hour, anddescriptionfields - Operators can define custom instance sizes in installation config that get merged at install time
- GCP-specific ASG config supports GKE reservation affinity
Authentication
- Auth tokens can now be read from Kubernetes-mounted secret files, with automatic re-read on rotation
- Multi-cluster auth routing checks all cluster domains for resource access redirects
- Auth0 signup support on enterprise deployments
- Fixed password reset redirect to honor the
nextURL parameter
cert-manager Integration
- cert-manager and Let’s Encrypt integration added as optional apps
- httpreq-webhook support for DNS-01 challenges
- Runs on all cloud providers, with EKS-specific compatibility settings
Bug Fixes
- Fixed git repo URL validation to handle URLs without
.gitsuffix and Azure DevOps SSH URLs - Fixed org management endpoint to require admin permissions for PATCH operations
- Fixed wrong owner displayed when editing secrets
- Fixed cloud selection locked after resource creation (preventing accidental changes)
- Fixed progress bar overflow on resource cards
Infrastructure
- Deprecated
enforce_min_TLS12andenable_LB_access_logsconfig options removed - Load balancer extra security groups moved to the cloud-specific config section
- Installer container image now includes Google Cloud SDK, Nebius CLI, OCI CLI, and clusteradm
- Configurable storage classes for Elasticsearch and Prometheus (replacing hardcoded values)
- Network policies can be toggled off via
disableNetworkPolicyflag