-
Notifications
You must be signed in to change notification settings - Fork 2
Development Guide
joshuaaferguson edited this page Nov 15, 2025
·
1 revision
This page combines AGENTS.md, CONTRIBUTING.md, docs/CONTROLLER_GUIDE.md, and PLUGIN_DEVELOPMENT.md into a concise contributor workflow across all three repositories.
-
controller/: Kubebuilder project; controllers incontrollers/, APIs underapi/v1alpha1, helpers inpkg/. -
api/: Go service withcmd/main.go,internal/packages (auth, middleware, db, webhook). Tests live next to source. -
ui/: React + Vite app using TS, MUI, React Query, Zustand. Components undersrc/, hooks insrc/hooks/, tests*.test.tsx. -
chart/,manifests/,terraform/: Deployment assets.scripts/contains helper automation. - Docs live in root (
README.md,QUICKSTART.md,DEPLOYMENT.md, etc.) anddocs/.
-
make dev-setup– checks Go/Node/Docker/kubectl/Helm and installs Go modules + npm deps. -
make fmt– gofmt controllers/API, run UI formatter (npm run format). -
make lint– golangci-lint for Go, ESLint for UI (install golangci-lint locally). -
make test– runs Go tests with coverage and UI tests (npm test -- --coverage --watchAll=false). - Component builds:
make build-controller,make build-api,make build-ui. Docker targets available viamake docker-build-*. - UI dev server:
cd ui && npm run dev; backend binaries viago run ./cmd/main.go.
-
Go: gofmt tabs, idiomatic package names, table-driven tests,
context.Contextfor external calls. Controllers follow<resource>_controller.gonaming. - TypeScript: Strict typing, PascalCase components, camelCase props/hooks, co-located Emotion/MUI styling. Keep components focused and reuse hooks.
-
Commits: Conventional Commits (
feat(repos): ...,docs(site): ...). Use imperative tense under 72 chars. -
PRs: Describe scope, link issues/ROADMAP items, include screenshots or CLI output for visible changes, and note
make fmt lint teststatus.
- Plugin directories live under
official/orcommunity/withmanifest.json,index.js/ts, optional config schema, and assets. - Supported types: extension UI widgets, webhook handlers, API integrations, UI themes. Events include session/user/template lifecycle and system notifications.
-
catalog.yamllists discoverable plugins with metadata consumed by the controller/UI. - Use the Plugin API’s
streamspaceglobal (session/user/template APIs, notifications, email, storage, commands, logging). Lifecycle hooksonLoad/onUnloadmanage registrations. - Test plugins locally via the StreamSpace CLI or UI plugin sandbox before submitting PRs to
streamspace-plugins.
- Organize templates by category directories (
browsers/,development/, etc.). File names should be lowercase kebab-case (firefox-browser.yaml). - Follow the
stream.space/v1alpha1 Templatespec: include metadata,displayName, description, category, icon, image, resources, env vars, ports, VNC config, and tags. - Update
catalog.yamlwith new entries, validate withkubectl apply --dry-run=client -f <file>and CRD server dry-run.
See Testing-and-QA for verification expectations and Security-and-Compliance for required hardening steps when touching auth or infrastructure-sensitive code.