Version 0.1.8
[0.1.8] - 2026-04-11
Added
-
open-webuioverlay — Browser-based chat UI for Ollama and OpenAI-compatible LLM backends, running as a Docker Compose sidecar- Serves the Open WebUI at port
3000(mapped from container port8080); auto-forwarded and opened in the browser - Pre-configured
OLLAMA_BASE_URL=http://ollama:11434so it connects automatically when theollamaoverlay is also selected - Persistent
open-webui-datavolume preserves conversation history and settings across container rebuilds - Supports any OpenAI-compatible backend via
OLLAMA_BASE_URL; not limited to Ollama - Suggests the
ollamaoverlay as its natural LLM backend
- Serves the Open WebUI at port
-
qdrantoverlay — High-performance vector database for similarity search and embeddings, running as a Docker Compose service- REST API on port
6333, gRPC on port6334; both ports forwarded from the devcontainer QDRANT_HOST,QDRANT_PORT, andQDRANT_URLpre-set in the container environment for zero-config SDK usage- Persistent
qdrant-datavolume and health check via/readyzendpoint - Suggests
ollama,python, andnodejsoverlays for embedding-generation workflows
- REST API on port
-
pgvectoroverlay — PostgreSQL 16 with the pgvector extension pre-installed, running as a Docker Compose service- Uses the official
pgvector/pgvector:pg16image;CREATE EXTENSION vector;works immediately with no manual setup postgresql-clientinstalled in the devcontainer;PGHOST,PGPORT,PGDATABASE, andPGUSERpre-set for seamlesspsqlusage- Conflicts with the
postgresoverlay (both provide a PostgreSQL service on port 5432 — choose one) - Fully parameterised:
PGVECTOR_DB,PGVECTOR_USER,PGVECTOR_PASSWORD,PGVECTOR_PORT,PGVECTOR_VERSIONconfigurable viasuperposition.ymlor--param - Suggests
ollama,python, andnodejsoverlays for RAG and embedding workflows
- Uses the official
-
k3doverlay — Lightweight local Kubernetes clusters running k3s in Docker, with faster startup and lower resource usage thankind- Installs the
k3dbinary viasetup.sh; supports amd64 and arm64 - Requires
docker-in-docker(auto-resolved dependency) to launch k3s nodes as Docker containers - Conflicts with
kind(both provision local Kubernetes clusters — choose one) - Suggests
kubectl-helmfor interacting with clusters viakubectland Helm - README includes a
k3dvskindcomparison table
- Installs the
-
skaffoldoverlay — Continuous build-test-deploy pipeline for Kubernetes applications- Installs the
skaffoldbinary viasetup.sh; supports amd64 and arm64 - Supports multiple builders (Docker, Buildpacks, Jib) and deployers (kubectl, Helm, Kustomize) via declarative
skaffold.yaml - Conflicts with
tilt(both serve the Kubernetes inner-loop development role — choose one) - Suggests
kubectl-helm,kind, andk3doverlays for a complete local Kubernetes workflow - README includes a
skaffoldvstiltcomparison table
- Installs the
-
Overlay parameters with safe
{{cs.KEY}}substitution — Overlays can now declare configurable parameters that are resolved at generation time without colliding with Docker Compose${VAR}, shell$VAR, VS Code${localWorkspaceFolder}, or GitHub Actions${{ }}syntax- Overlays declare parameters in
overlay.ymlunder aparameters:map, each with adescription, optionaldefault, and optionalsensitive: trueflag - Users supply values in
superposition.ymlunder a top-levelparameters:section, or via--param KEY=valueon the CLI (repeatable) - Resolution order: CLI overrides → project file → overlay defaults
- Missing required parameters (no default, no supplied value) → hard error before generation
- Unresolved
{{cs.*}}tokens in final output → hard error (catch-all safety net) - Unknown parameters supplied in
superposition.yml→ warning only (generation continues) - Docker Compose
${VAR:-default}, shell, VS Code, and GitHub Actions variable expressions pass through completely untouched - The
{{cs.*}}syntax can be nested inside Docker Compose defaults:${POSTGRES_PORT:-{{cs.POSTGRES_PORT}}}—csresolves the inner token at generation time, Docker resolves the outer at runtime - Interactive questionnaire prompts for each declared parameter (sensitive parameters use masked input)
postgresoverlay converted to use parameters as proof-of-concept:POSTGRES_DB,POSTGRES_USER,POSTGRES_PASSWORD,POSTGRES_PORT,POSTGRES_VERSIONare now fully configurable without forking the overlay- Spec committed under
docs/specs/011-overlay-parameters/spec.md
- Overlays declare parameters in
-
First-class project
envinsuperposition.yml— Container environment variables can now be declared once in the project file and routed automatically by stackstack: plainwrites projectenventries todevcontainer.json -> remoteEnvstack: composematerializes projectenventries into.devcontainer/.env, writesdocker-compose.yml -> services.devcontainer.environmentas${KEY}, and exposes the same values to the devcontainer viadevcontainer.json -> remoteEnv.KEY = ${containerEnv:KEY}- Supports string shorthand (
FOO: bar) and object form with explicit target override (target: auto | remoteEnv | composeEnv) - Compose values that reference
${NAME}or${NAME:-default}resolve from the repository root.envwhen available before being written to.devcontainer/.env customizations.envTemplateis now the canonical project-file field for variables written to.env.example;customizations.environmentremains as a deprecated read-compatible alias, but newly written project files normalize toenvTemplate
-
JetBrains IDE support (
--editor jetbrains) — Generates JetBrains project artifacts alongside the devcontainer configuration- Adds
customizations.jetbrains.backendtodevcontainer.json, selecting the IDE automatically from the primary language overlay (WebStorm for Node.js/Bun, PyCharm for Python, GoLand for Go, Rider for .NET, RustRover for Rust, IntelliJIdea for Java or generic) - Generates
.idea/.gitignoreat the project root, marking shared settings as VCS-tracked and excluding user-local entries - Generates language-specific run configuration XML files under
.idea/runConfigurations/(npm_dev.xmlfornpm run dev/ Node.js,bun_dev.xmlfor Bun,mkdocs_serve.xmlformkdocs serve,python_main.xmlforpython main.py,go_run.xmlforgo run ./...,dotnet_run.xmlfordotnet run,java_run.xmlfor a Java Application,rust_run.xmlforcargo run) - Existing
.idea/files are never overwritten — only missing files are written, preserving any user customisations - Falls back to a minimal
.idea/scaffold withIntelliJIdeabackend when no language overlay is selected - Editor profile question added to the interactive questionnaire (
? Editor profile: VS Code / JetBrains / None) editorfield persisted tosuperposition.jsonmanifest for reproducible regen
- Adds
-
cscommand alias —npm install -g container-superpositionnow registers bothcontainer-superpositionand the shortercscommand; all existingcs <subcommand>usage in docs and examples works without a separate install -
ollamaoverlay — Local LLM inference server via Ollama, running as a Docker Compose sidecar- Serves the Ollama REST API on port
11434; OpenAI-compatible endpoint available at/v1/ - Ollama CLI installed in devcontainer —
setup.shnow prefers copying/usr/bin/ollamafrom the localollama/ollamasidecar image, avoiding a second multi-gigabyte download during setup; when Docker is unavailable it falls back to the current official Linux release archives (prefers.tar.zst, falls back to legacy.tgz, and installszstdwhen required) instead of viaollama.com/install.sh OLLAMA_HOSTpre-configured — Set as acontainerEnvvariable tohttp://ollama:11434soollama pull / run / list / rmtarget the sidecar automatically with no manual setup- GPU passthrough built-in — Both the
ollamasidecar and thedevcontainerservice receive all NVIDIA GPUs viadeploy.resources.reservations.devices; enables GPU-accelerated tooling (torch,tensorflow, CUDA CLIs) directly in the dev environment - Mounts the host's
~/.ollamadirectory by default so models pulled on the host are immediately available — no re-download on rebuild; models pulled inside the devcontainer are also persisted to the host OLLAMA_MODELS_PATHenv var overrides the host model path (useful for external drives or Windows users)verify.shchecks CLI is installed,OLLAMA_HOSTis set, smoke-tests the REST API, and lists available models via the CLI- Suggests
codex,claude-code, andampoverlays for AI-assisted workflows - README documents the Ollama CLI UX, GPU prerequisites (NVIDIA Container Toolkit), and links to the
cudaoverlay
- Serves the Ollama REST API on port
-
Target-aware generation —
--targetnow produces workspace artifacts and setup guidance tailored to the selected deployment environment, not just compatibility warnings--target codespaces→ extendsdevcontainer.jsonwithhostRequirements(machine-size recommendation based on service count) and writesCODESPACES.mdwith Codespaces-specific setup guidance--target gitpod→ generates.gitpod.ymlat the project root (with tasks and port exposures from selected overlays) and writesGITPOD.mdwith Gitpod badge and usage notes--target devpod→ generatesdevpod.yamlat the project root (referencing the devcontainer) and writesDEVPOD.mdwithdevpod upinstructions--target local(explicit or default) → no change to existing behavior; no extra files written- Stale artifact cleanup — when switching target between runs (e.g. gitpod → codespaces), artifacts from the previous target (
.gitpod.yml) are removed automatically before new ones are written - Manifest records target —
superposition.jsonnow includes atargetfield; regeneration reproduces the correct target-aware output without re-prompting - Regen without
--targetinherits the target recorded in the existing manifest, so the correct artifacts are always reproduced
-
comfyuioverlay — ComfyUI node-based image/video generation UI running as a Docker Compose sidecar- Serves the ComfyUI web UI and REST/WebSocket API on port
8188; auto-forwarded and opened in the browser - Single shared models root (
/opt/comfyui-models) mounted into both the devcontainer and the ComfyUI sidecar via${COMFYUI_MODELS_HOST_PATH:-comfyui-models}; ComfyUI discoverscheckpoints/,loras/, etc. natively without per-subdirectory configuration - Named Docker volume
comfyui-modelsused by default (project-scoped, no explicitname:); models persist across container rebuilds and work on all platforms; settingCOMFYUI_MODELS_HOST_PATHin.envto a full absolute path switches to a bind mount (Docker Compose does not expand~in.envfiles) COMFYUI_MODELS_DIR=/opt/comfyui-modelsset indevcontainer.patch.jsonas a container-side constant; scripts and tools in the devcontainer use this variable to locate the models rootCOMFYUI_OUTPUT_PATHpersists generated images/videos to the host across container rebuilds (named volumecomfyui-outputby default)setup.shpre-creates all 7 model subdirectories (checkpoints,loras,controlnet,clip_vision,vae,embeddings,upscale_models) on first run; handles volume permission issues with sudo fallbackverify.shchecks$COMFYUI_MODELS_DIRexists, is writable, and all expected subdirectories are present, plus HTTP health check on the ComfyUI web UI endpoint.env.exampledocumentsCOMFYUI_MODELS_HOST_PATHwith examples using full absolute paths- README documents GPU acceleration (NVIDIA CUDA, AMD ROCm), CPU-only fallback, custom node persistence, and the ComfyUI REST/WebSocket API
- Suggests
cuda,python, andollamaoverlays for GPU-accelerated and AI-integrated workflows
- Serves the ComfyUI web UI and REST/WebSocket API on port
Changed
cs migratecommand — One-time migration from manifest-only repositories- Reads
superposition.json, converts the manifest to asuperposition.ymlproject file - Auto-discovers the manifest in common locations;
--from-manifest <path>for explicit path - Fails with a clear error if a project file already exists (use
--forceto overwrite) - Prints next-step guidance pointing toward
cs regen
- Reads
- BREAKING:
superposition.ymlis now the canonical input —initalways writes a project config file alongside the devcontainer. The--project-fileflag has been removed; project file writing is now the default behavior.- Migration: Remove
--project-filefrom any scripts usingcs init. The project file is now always written automatically.
- Migration: Remove
- BREAKING:
regenrequires a project file —regennow reads onlysuperposition.yml/.superposition.yml. It no longer falls back tosuperposition.jsonas an input source.- If
superposition.jsonexists but no project file is present,regenerrors with a clear message:Run 'cs migrate' to create a project file from your existing manifest. - Migration for manifest-only repos: Run
cs migrateonce to createsuperposition.yml, then useregenas normal. - Migration for CI scripts using
--from-manifest: The flag still works but emits a deprecation warning. Switch tocs migrate+regento remove the warning.
- If
--from-manifestdeprecated inregen— Emits a deprecation warning pointing towardcs migrate. The flag is retained for backward compatibility.init --no-scaffold— New flag to writesuperposition.ymlonly, without generating.devcontainer/. Equivalent to the old--write-manifest-onlybut conceptually cleaner.doctordrift detection —cs doctornow compares the project file overlay list against the last-generated manifest and reports a warning when they have diverged. Suggestsregento reconcile.