{"id":49465744,"url":"https://github.com/codespace-operator/codespace-operator","last_synced_at":"2026-04-30T12:33:23.956Z","repository":{"id":311842623,"uuid":"1042354842","full_name":"codespace-operator/codespace-operator","owner":"codespace-operator","description":"Operator to deploy web IDEs securely","archived":false,"fork":false,"pushed_at":"2025-10-29T20:25:15.000Z","size":718,"stargazers_count":0,"open_issues_count":20,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-30T12:33:18.426Z","etag":null,"topics":["administration","air-gapped","codespace","ide","jupyter","kubernetes","oidc","operator","vscode","web","workspace"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/codespace-operator.png","metadata":{"files":{"readme":"README.md","changelog":"changelogs/CHANGELOG.codespace.md","contributing":"CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-08-21T22:13:37.000Z","updated_at":"2025-09-11T19:22:37.000Z","dependencies_parsed_at":"2025-08-27T08:34:19.600Z","dependency_job_id":"fea82f8e-81ab-47fe-9e0a-aac751565632","html_url":"https://github.com/codespace-operator/codespace-operator","commit_stats":null,"previous_names":["codespace-operator/codespace-operator"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/codespace-operator/codespace-operator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codespace-operator%2Fcodespace-operator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codespace-operator%2Fcodespace-operator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codespace-operator%2Fcodespace-operator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codespace-operator%2Fcodespace-operator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/codespace-operator","download_url":"https://codeload.github.com/codespace-operator/codespace-operator/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codespace-operator%2Fcodespace-operator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32465009,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-29T22:27:22.272Z","status":"online","status_checked_at":"2026-04-30T02:00:05.929Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["administration","air-gapped","codespace","ide","jupyter","kubernetes","oidc","operator","vscode","web","workspace"],"created_at":"2026-04-30T12:33:21.961Z","updated_at":"2026-04-30T12:33:23.947Z","avatar_url":"https://github.com/codespace-operator.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Codespace Operator\n\nSpin up **web IDE sessions** (JupyterLab, VS Code, ...) on Kubernetes using a single custom resource.\n\n---\n\n## What it does\n\n- Reconciles a `Session` into Kubernetes primitives:\n  - `Deployment` running your IDE container\n  - `ServiceAccount`, `Service`, optional `Ingress`\n  - optional PVCs for **home** and **scratch**\n- Updates status fields (`status.url`, `status.phase`: `Pending` / `Ready` / `Error`).\n- Ships a web **Admin UI** and a tiny HTTP **API server** for convenience.\n\n### Example: a single Jupyter session\n\n```yaml\napiVersion: codespace.codespace.dev/v1\nkind: Session\nmetadata:\n  name: alice\nspec:\n  profile:\n    ide: jupyterlab\n    image: jupyter/base-notebook:latest\n    cmd:\n      [\"start-notebook.sh\", \"--NotebookApp.token=\", \"--NotebookApp.password=\"]\n  auth:\n    mode: oauth2proxy\n    oidc:\n      issuerURL: https://issuer.example.com/\n  home:\n    size: 20Gi\n    storageClassName: fast-ssd\n    mountPath: /home/jovyan\n  scratch:\n    size: 100Gi\n    mountPath: /scratch\n  networking:\n    host: alice.lab.example.com\n    tlsSecretName: alice-tls\n```\n\n---\n\n## Install (production)\n\n\u003e **CRDs are released separately from the chart.** Install CRDs once, then install/upgrade the chart whenever you ship a new app version.\n\n1. **Install CRDs** (pick from GitHub Releases)\n\n```bash\nkubectl apply -f https://github.com/codespace-operator/codespace-operator/releases/download/crd-v\u003cCRD_VERSION\u003e/codespace-operator-crds.yaml\n```\n\n2. **Install the Helm chart** (published as an OCI artifact)\n\n```bash\nhelm registry login ghcr.io\nhelm install codespace-operator oci://ghcr.io/codespace-operator/charts/codespace-operator \\\n  --namespace codespace-operator-system \\\n  --create-namespace \\\n  --version \u003cCHART_VERSION\u003e\n```\n\n3. **Create your first Session**\n\n```bash\nkubectl apply -f - \u003c\u003c'YAML'\napiVersion: codespace.codespace.dev/v1\nkind: Session\nmetadata:\n  name: demo-session\n  namespace: default\nspec:\n  profile:\n    ide: jupyterlab\n    image: jupyter/minimal-notebook:latest\n    cmd: [\"start-notebook.sh\",\"--NotebookApp.token=\"]\n  networking:\n    host: demo.codespace.test\nYAML\n```\n\n---\n\n## Quick start (Developers)\n\n### Prerequisites\n\n- Go **1.25**\n- Node **20**\n- `kubectl` **1.24+**\n- `kind` **v0.22+**\n\nWe use `*.codespace.test` for DNS during dev (resolves to `127.0.0.1`).\n\n### One-command local cluster\n\nRuns kind, installs ingress, builds/loads images, installs CRDs, deploys chart, applies a demo session.\n\n```bash\n./contrib/scripts/setup.sh\n```\n\nWhen it finishes:\n\n```\nUI  : http://console.codespace.test/\nApp : http://demo.codespace.test\n```\n\n### Manual workflow\n\nBuild UI + server:\n\n```bash\nmake build-server\n./bin/codespace-server\n```\n\nBuild images:\n\n```bash\nmake docker-build           # operator\nmake docker-build-server    # API server (embeds UI)\n```\n\nInstall chart (manager + server + UI):\n\n```bash\nhelm upgrade --install codespace-operator oci://ghcr.io/codespace-operator/charts/codespace\n```\n\nCleanup:\n\n```bash\n./contrib/scripts/teardown.sh\n```\n\n---\n\n## Configuration\n\n### Helm values\n\nSee [`charts/codespace/values.yaml`](https://github.com/codespace-operator/charts/blob/main/charts/codespace/values.yaml) for all options (service accounts, RBAC, network policy, ingress, resources, etc.).\n\n### Supported IDE profiles (defaults)\n\n- `jupyterlab` → image `jupyter/minimal-notebook:latest`, cmd `start-notebook.sh --NotebookApp.token=`\n- `vscode` → image `codercom/code-server:latest`, cmd `--bind-addr 0.0.0.0:8080 --auth none`\n\n---\n\n## Architecture\n\n- **Session Controller** (`cmd/main.go`, `internal/controller/`) - reconciles `Session` CRs into `Deployment`/`Service`/`Ingress`/PVC.\n- **Server** (`internal/server/`) - Core API used by the UI; serves the built UI from `/static`.\n- **Web UI** (`ui/`) - PatternFly + React admin console.\n- **CRDs** (`api/`, generated into `config/crd/bases/`).\n\n---\n\n## Releases \u0026 Versioning\n\nThis repo uses three **independent release lanes** with semantic‑release:\n\n- **Operator (images)** - **tags**: `app-vX.Y.Z`\n  Builds/pushes `ghcr.io/codespace-operator/codespace-operator:\u003capp-version\u003e` and `codespace-server:\u003capp-version\u003e`.\n  Config: `release.operator.cjs`\n\n- **CRDs** - **tags**: `crd-vX.Y.Z`\n  Publishes `dist/codespace-operator-crds.yaml` and a tarball as release assets.\n  Config: `release.crd.cjs`\n\n**Commit scopes decide which lane releases:**\n\n- Operator scopes: `operator`, `controller`, `server`, `ui`\n- CRD scopes: `crd`, `api`\n\nSee **[CONTRIBUTING.md](./CONTRIBUTING.md)** for Conventional Commit rules and PR templates.\n\n---\n\n## Uninstall\n\n```bash\nhelm -n codespace-operator-system uninstall codespace-operator || true\nmake uninstall || true   # deletes CRDs if you installed via `make install`\nkind delete cluster --name codespace || true\n```\n\n---\n\n## Contributing \u0026 Security\n\n- Read **[CONTRIBUTING.md](./CONTRIBUTING.md)** for commit rules, local hooks, and release lanes.\n- Security reports: please do **not** open public issues. Contact maintainers per the Security section in CONTRIBUTING.\n\n---\n\n## License\n\nApache-2.0\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodespace-operator%2Fcodespace-operator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcodespace-operator%2Fcodespace-operator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodespace-operator%2Fcodespace-operator/lists"}