Web UI and server for managing DataFlow Operator: view and edit DataFlow manifests, processor logs, and metrics.
- web/ — Vue 3 + Vite frontend (dashboard, manifests, logs, metrics). Build:
cd web && npm install && npm run build; output inweb/dist/, copied into the Docker image as/app/static. - cmd/server/ — GUI server entrypoint.
- internal/gui/ — HTTP server, static file serving and API (
/api/dataflows,/api/logs,/api/status,/api/namespaces).
The image is built separately from the operator image. On docker build, the frontend (Node) is built first, then the Go server; static assets come from the Vue build.
The github.com/dataflow-operator/dataflow dependency is fetched from GitHub (main/master branch), no local replace. Build from the dataflow-web directory:
# from dataflow-web directory
cd dataflow-web
docker build -t dataflow-web:local .
# or from repo root
docker build -f dataflow-web/Dockerfile -t dataflow-web:local dataflow-webImage contents: binary /app/server, static files in /app/static. Server listens on port 8080.
The repo includes a Taskfile. After installing Task (go install github.com/go-task/task/v3/cmd/task@latest or via brew/apt):
task install # Go deps + npm in web/
task build # build frontend + static/ + server binary
task run # run ./server (after build)
task dev # dev mode: Go server + Vite dev in parallel
task web:test # frontend tests
task docker # build Docker image
task --list # list tasksOption 1 — Go only (requires pre-built static):
cd dataflow-web
# Build frontend and copy to static (or use the image)
cd web && npm install && npm run build && cp -r dist/* ../static/ 2>/dev/null || true
cd ..
go run ./cmd/server --bind-address=:8080Option 2 — frontend dev with hot reload:
# Terminal 1: backend
cd dataflow-web && go run ./cmd/server --bind-address=:8080
# Terminal 2: frontend (proxy to :8080)
cd dataflow-web/web && npm install && npm run devOpen http://localhost:8080 (option 1) or http://localhost:5173 (option 2). Cluster access requires KUBECONFIG or in-cluster config.
Deploy via Helm with gui.enabled=true. See Web GUI documentation for configuration and deployment details.