Open Source · Apache 2.0 · v0.1.0

Browser-accessible workspaces
on Kubernetes

Kube Workspaces runs development environments as pods in your cluster — with a web UI, optional OIDC auth, reverse proxy, and no database required.

Get Started View on GitHub Documentation
How it works

Architecture

Four loosely-coupled components, all deployed to your cluster.

Browser → Ingress → Frontend (Next.js)  ← workspace UI
                    → API      (Go/Goa)   ← REST + auth
                    → Proxy    (Go)       ← /proxy/{ns}/{name}/...
                              ↓
                    Kubernetes API ServerController (kubebuilder)
                              ↓
                    StatefulSet + Service (per workspace)

Everything you need

Built for teams running development environments on Kubernetes.

Full PodSpec Flexibility

Workspaces wrap a full Kubernetes PodSpec — any container, any resource limit, any volume mount.

Optional OIDC Auth

Auth is off by default. When enabled, supports Dex, Google, Okta, Auth0, or any OIDC provider.

Browser-Based Access

Built-in reverse proxy with full WebSocket support. Works with VS Code Server, noVNC desktops, Jupyter, and more.

Kubernetes-Native RBAC

Three roles: admin, editor, viewer. Namespace-level access control. No separate auth database.

No Database Required

All state lives in Kubernetes CRDs and Secrets. No external dependencies beyond your cluster.

Multiple Deploy Options

Helm, Kustomize, or ArgoCD. Images published to ghcr.io/kube-workspaces/*.

Start / Stop Workspaces

Annotation-driven start/stop sets StatefulSet replicas to 0 without deleting the workspace CR.

Personal Namespaces

Auto-created per user with configurable naming templates and RoleBindings via the User controller.

Dark Mode

Class-based dark mode with theme persistence. No flash on load. Multiple color themes available.

Deploy

Quick Start

Get Kube Workspaces running in minutes. Choose your preferred deployment method.

# Create a local cluster
kind create cluster

# Install CRDs
kubectl apply --server-side -k \
  https://github.com/kube-workspaces/deploy/kustomize/crds

# Deploy all components
kubectl apply --server-side -k \
  https://github.com/kube-workspaces/deploy/kustomize/base

# Port-forward the frontend
kubectl port-forward svc/kube-workspaces-frontend 3000:80 \
  -n kube-workspaces-system
kubectl apply --server-side -k \
  https://github.com/kube-workspaces/deploy/kustomize/crds

kubectl apply --server-side -k \
  https://github.com/kube-workspaces/deploy/kustomize/base
helm install kube-workspaces \
  oci://ghcr.io/kube-workspaces/charts/kube-workspaces \
  --namespace kube-workspaces-system \
  --create-namespace
kubectl apply -f \
  https://raw.githubusercontent.com/kube-workspaces/deploy/main/argocd/application.yaml

Open http://localhost:3000 — auth is disabled by default, no login required.
See the full deployment guide for production setup, OIDC auth, and ingress configuration.

Repositories

Each component is an independent repository under the kube-workspaces org.

Workspace Images

Available Images

Any container image that serves HTTP works. These are tested and ready to use.

Image Description Port
codercom/code-server:latest Browser-based VS Code 8080
gitpod/openvscode-server:latest Open VS Code Server 8080
flaccid/debian-desktop:latest Full Linux desktop (noVNC) 6901
kasmweb/desktop:1.19.0 Ubuntu desktop (KasmVNC) 6901
kasmweb/chrome:1.19.0 Chrome browser (KasmVNC) 6901
linuxserver/firefox:latest Firefox browser (KasmVNC) 3000
jupyter/datascience-notebook:latest Jupyter Notebook (Data Science) 8888
filebrowser/filebrowser:latest Web-based file manager 8080