Prerequisites
Before you begin, make sure you have these tools installed:- Docker (Docker Desktop or equivalent) — Install Docker
- kind (Kubernetes IN Docker) —
brew install kindor install guide - kubectl —
brew install kubectlor install guide - Helm —
brew install helmor install guide
No cloud account, Vault, or DNS configuration needed for local development. Everything runs in Docker.
One-Command Setup
Clone the repository and start the local environment:Create a kind cluster
Sets up a local Kubernetes cluster with port mappings for
localhost:8080 and localhost:8081Access the Platform
Once the setup completes, open your browser:dev@localhost (no OAuth required in dev mode).
Dev mode (
DEV_MODE=true) skips Google OAuth and creates a test user automatically. This is only for local development — never enable this in production.Create Your First Deployment
Now let’s deploy something!
The operator will create:
- A Kubernetes Deployment with nginx pods
- A Service to expose the pods
- A Traefik IngressRoute for HTTP routing
- A ConfigMap if the template includes config data
Access Your Deployment
Once the deployment is Running, you can access it at:my-first-app:
The
.localhost domain works without DNS because it’s a special reserved domain. Traefik routes requests based on the Host header.View Logs
Check the logs for the server and operator:Explore the UI
The local dev environment includes a full-featured React UI:Dashboard
- View all deployments with status cards
- Quick actions: restart, delete, view logs
- Metrics graphs (CPU, memory, request rate)
Teams
- Create teams
- Invite members (email invites disabled in dev mode)
- Manage roles:
team_admin,developer,viewer
Secrets
- Add organization-wide secrets
- Add deployment-specific secrets
- Secrets are stored in the database (no Vault in dev mode)
Templates
- Browse system templates (nginx, LibreChat, etc.)
- Create custom templates with YAML specs
- Set visibility:
private,team, ororg
Make Code Changes
After editing Go or React code, rebuild and reload:- Rebuild Docker images for server and operator
- Load new images into the kind cluster
- Restart the deployments
- Wait for rollout to complete
Teardown
When you’re done, delete the entire kind cluster:make dev-local again.
Troubleshooting
Port Conflict on 8081 or 8080
Another process is using the port. Find and stop it:deploy/dev/kind-config.yaml.
Pods in CrashLoopBackOff
Check the logs:Deployment Not Accessible at *.localhost:8080
Ensure Traefik is running:Cannot Access http://localhost:8081
Verify the server pod is running:CrashLoopBackOff, check logs:
What’s Next?
Local Development Guide
Deep dive into local dev workflows and configuration
Architecture Overview
Learn how k8s-scheduler components work together
Environment Variables (Dev Mode)
The dev overlay automatically sets these viadeploy/dev/configmap-patch.yaml:
| Variable | Dev Value | Notes |
|---|---|---|
DEV_MODE | true | Enables dev login, skips OAuth validation |
SESSION_BACKEND | memory | No Redis needed |
COOKIE_SECURE | false | No TLS in local dev |
SECRETS_BACKEND | database | No Vault needed (uses encrypted DB storage) |
BILLING_ENABLED | false | No Stripe needed |
DEPLOYMENT_DOMAIN | localhost | IngressRoutes use *.localhost |
DISABLE_NETWORK_POLICIES | true | Operator skips network policies |
REACT_UI | true | Serve embedded React SPA |
deploy/dev/configmap-patch.yaml and running make dev-reload.