container-superposition 0.1.1 → 0.1.3-pr.159.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +88 -811
- package/dist/scripts/generate-schema.d.ts +14 -0
- package/dist/scripts/generate-schema.d.ts.map +1 -0
- package/dist/scripts/generate-schema.js +406 -0
- package/dist/scripts/generate-schema.js.map +1 -0
- package/dist/scripts/init.js +1 -1187
- package/dist/scripts/init.js.map +1 -1
- package/dist/tool/cli/args.d.ts +20 -0
- package/dist/tool/cli/args.d.ts.map +1 -0
- package/dist/tool/cli/args.js +325 -0
- package/dist/tool/cli/args.js.map +1 -0
- package/dist/tool/cli/run.d.ts +2 -0
- package/dist/tool/cli/run.d.ts.map +1 -0
- package/dist/tool/cli/run.js +318 -0
- package/dist/tool/cli/run.js.map +1 -0
- package/dist/tool/commands/adopt.d.ts +63 -0
- package/dist/tool/commands/adopt.d.ts.map +1 -0
- package/dist/tool/commands/adopt.js +1072 -0
- package/dist/tool/commands/adopt.js.map +1 -0
- package/dist/tool/commands/doctor.d.ts +19 -0
- package/dist/tool/commands/doctor.d.ts.map +1 -0
- package/dist/tool/commands/doctor.js +3157 -0
- package/dist/tool/commands/doctor.js.map +1 -0
- package/dist/tool/commands/explain.d.ts +13 -0
- package/dist/tool/commands/explain.d.ts.map +1 -0
- package/dist/tool/commands/explain.js +317 -0
- package/dist/tool/commands/explain.js.map +1 -0
- package/dist/tool/commands/hash.d.ts +36 -0
- package/dist/tool/commands/hash.d.ts.map +1 -0
- package/dist/tool/commands/hash.js +242 -0
- package/dist/tool/commands/hash.js.map +1 -0
- package/dist/tool/commands/list.d.ts +16 -0
- package/dist/tool/commands/list.d.ts.map +1 -0
- package/dist/tool/commands/list.js +121 -0
- package/dist/tool/commands/list.js.map +1 -0
- package/dist/tool/commands/migrate.d.ts +7 -0
- package/dist/tool/commands/migrate.d.ts.map +1 -0
- package/dist/tool/commands/migrate.js +52 -0
- package/dist/tool/commands/migrate.js.map +1 -0
- package/dist/tool/commands/plan.d.ts +69 -0
- package/dist/tool/commands/plan.d.ts.map +1 -0
- package/dist/tool/commands/plan.js +1071 -0
- package/dist/tool/commands/plan.js.map +1 -0
- package/dist/tool/questionnaire/answers.d.ts +16 -0
- package/dist/tool/questionnaire/answers.d.ts.map +1 -0
- package/dist/tool/questionnaire/answers.js +102 -0
- package/dist/tool/questionnaire/answers.js.map +1 -0
- package/dist/tool/questionnaire/composer.d.ts +18 -2
- package/dist/tool/questionnaire/composer.d.ts.map +1 -1
- package/dist/tool/questionnaire/composer.js +1544 -215
- package/dist/tool/questionnaire/composer.js.map +1 -1
- package/dist/tool/questionnaire/presets.d.ts +60 -0
- package/dist/tool/questionnaire/presets.d.ts.map +1 -0
- package/dist/tool/questionnaire/presets.js +165 -0
- package/dist/tool/questionnaire/presets.js.map +1 -0
- package/dist/tool/questionnaire/questionnaire.d.ts +10 -0
- package/dist/tool/questionnaire/questionnaire.d.ts.map +1 -0
- package/dist/tool/questionnaire/questionnaire.js +582 -0
- package/dist/tool/questionnaire/questionnaire.js.map +1 -0
- package/dist/tool/readme/markdown-parser.d.ts.map +1 -1
- package/dist/tool/readme/markdown-parser.js.map +1 -1
- package/dist/tool/readme/readme-generator.d.ts.map +1 -1
- package/dist/tool/readme/readme-generator.js +12 -7
- package/dist/tool/readme/readme-generator.js.map +1 -1
- package/dist/tool/schema/deployment-targets.d.ts +77 -0
- package/dist/tool/schema/deployment-targets.d.ts.map +1 -0
- package/dist/tool/schema/deployment-targets.js +91 -0
- package/dist/tool/schema/deployment-targets.js.map +1 -0
- package/dist/tool/schema/manifest-migrations.d.ts +56 -0
- package/dist/tool/schema/manifest-migrations.d.ts.map +1 -0
- package/dist/tool/schema/manifest-migrations.js +204 -0
- package/dist/tool/schema/manifest-migrations.js.map +1 -0
- package/dist/tool/schema/overlay-loader.d.ts +1 -1
- package/dist/tool/schema/overlay-loader.d.ts.map +1 -1
- package/dist/tool/schema/overlay-loader.js +67 -14
- package/dist/tool/schema/overlay-loader.js.map +1 -1
- package/dist/tool/schema/project-config.d.ts +36 -0
- package/dist/tool/schema/project-config.d.ts.map +1 -0
- package/dist/tool/schema/project-config.js +862 -0
- package/dist/tool/schema/project-config.js.map +1 -0
- package/dist/tool/schema/target-rules.d.ts +78 -0
- package/dist/tool/schema/target-rules.d.ts.map +1 -0
- package/dist/tool/schema/target-rules.js +367 -0
- package/dist/tool/schema/target-rules.js.map +1 -0
- package/dist/tool/schema/types.d.ts +269 -8
- package/dist/tool/schema/types.d.ts.map +1 -1
- package/dist/tool/utils/backup.d.ts +23 -0
- package/dist/tool/utils/backup.d.ts.map +1 -0
- package/dist/tool/utils/backup.js +123 -0
- package/dist/tool/utils/backup.js.map +1 -0
- package/dist/tool/utils/gitignore.d.ts +15 -0
- package/dist/tool/utils/gitignore.d.ts.map +1 -0
- package/dist/tool/utils/gitignore.js +41 -0
- package/dist/tool/utils/gitignore.js.map +1 -0
- package/dist/tool/utils/merge.d.ts +134 -0
- package/dist/tool/utils/merge.d.ts.map +1 -0
- package/dist/tool/utils/merge.js +286 -0
- package/dist/tool/utils/merge.js.map +1 -0
- package/dist/tool/utils/parameters.d.ts +76 -0
- package/dist/tool/utils/parameters.d.ts.map +1 -0
- package/dist/tool/utils/parameters.js +125 -0
- package/dist/tool/utils/parameters.js.map +1 -0
- package/dist/tool/utils/paths.d.ts +2 -0
- package/dist/tool/utils/paths.d.ts.map +1 -0
- package/dist/tool/utils/paths.js +31 -0
- package/dist/tool/utils/paths.js.map +1 -0
- package/dist/tool/utils/port-utils.d.ts +29 -0
- package/dist/tool/utils/port-utils.d.ts.map +1 -0
- package/dist/tool/utils/port-utils.js +128 -0
- package/dist/tool/utils/port-utils.js.map +1 -0
- package/dist/tool/utils/services-export.d.ts +14 -0
- package/dist/tool/utils/services-export.d.ts.map +1 -0
- package/dist/tool/utils/services-export.js +478 -0
- package/dist/tool/utils/services-export.js.map +1 -0
- package/dist/tool/utils/summary.d.ts +69 -0
- package/dist/tool/utils/summary.d.ts.map +1 -0
- package/dist/tool/utils/summary.js +260 -0
- package/dist/tool/utils/summary.js.map +1 -0
- package/dist/tool/utils/version.d.ts +9 -0
- package/dist/tool/utils/version.d.ts.map +1 -0
- package/dist/tool/utils/version.js +32 -0
- package/dist/tool/utils/version.js.map +1 -0
- package/docs/README.md +13 -2
- package/docs/adopt.md +202 -0
- package/docs/architecture.md +25 -21
- package/docs/creating-overlays.md +151 -2
- package/docs/custom-patches.md +1 -1
- package/docs/deployment-targets.md +182 -0
- package/docs/discovery-commands.md +494 -0
- package/docs/examples.md +58 -21
- package/docs/filesystem-contract.md +63 -0
- package/docs/hash.md +183 -0
- package/docs/merge-strategy.md +700 -0
- package/docs/minimal-and-editor.md +325 -0
- package/docs/overlay-imports.md +310 -0
- package/docs/overlay-manifest-refactoring.md +2 -2
- package/docs/overlay-metadata-archive.md +1 -1
- package/docs/overlays.md +483 -123
- package/docs/presets-architecture.md +4 -4
- package/docs/presets.md +2 -2
- package/docs/publishing.md +72 -58
- package/docs/quick-reference.md +99 -0
- package/docs/security.md +43 -0
- package/docs/specs/001-verbose-plan-graph/checklists/requirements.md +36 -0
- package/docs/specs/001-verbose-plan-graph/contracts/plan-verbose-output.md +96 -0
- package/docs/specs/001-verbose-plan-graph/data-model.md +111 -0
- package/docs/specs/001-verbose-plan-graph/plan.md +127 -0
- package/docs/specs/001-verbose-plan-graph/quickstart.md +106 -0
- package/docs/specs/001-verbose-plan-graph/research.md +100 -0
- package/docs/specs/001-verbose-plan-graph/spec.md +121 -0
- package/docs/specs/001-verbose-plan-graph/tasks.md +223 -0
- package/docs/specs/002-superposition-config-file/checklists/requirements.md +36 -0
- package/docs/specs/002-superposition-config-file/contracts/init-project-config.md +98 -0
- package/docs/specs/002-superposition-config-file/data-model.md +126 -0
- package/docs/specs/002-superposition-config-file/plan.md +213 -0
- package/docs/specs/002-superposition-config-file/quickstart.md +140 -0
- package/docs/specs/002-superposition-config-file/research.md +144 -0
- package/docs/specs/002-superposition-config-file/spec.md +129 -0
- package/docs/specs/002-superposition-config-file/tasks.md +215 -0
- package/docs/specs/003-mkdocs2-overlay/spec.md +107 -0
- package/docs/specs/004-doctor-fix/spec.md +63 -0
- package/docs/specs/005-cuda-overlay/spec.md +94 -0
- package/docs/specs/006-rocm-overlay/spec.md +102 -0
- package/docs/specs/007-target-aware-generation/spec.md +119 -0
- package/docs/specs/008-project-file-canonical/spec.md +82 -0
- package/docs/specs/009-project-env/spec.md +140 -0
- package/docs/specs/010-compose-env-materialization/spec.md +123 -0
- package/docs/specs/011-overlay-parameters/spec.md +228 -0
- package/docs/specs/012-ollama-cli-overlay/spec.md +47 -0
- package/docs/specs/013-doctor-dependency-check/spec.md +250 -0
- package/docs/specs/014-doctor-compose-port-cross-validation/spec.md +276 -0
- package/docs/specs/015-doctor-env-example-drift/spec.md +248 -0
- package/docs/specs/016-doctor-reproducibility-check/spec.md +276 -0
- package/docs/specs/017-doctor-dry-run/spec.md +276 -0
- package/docs/specs/018-init-project-file/spec.md +59 -0
- package/docs/specs/019-project-mounts/spec.md +176 -0
- package/docs/specs/020-superposition-yml-schema.md +83 -0
- package/docs/specs/021-deterministic-generated-readme/spec.md +70 -0
- package/docs/specs/taxonomy.md +186 -0
- package/docs/superposition-yml.md +481 -0
- package/docs/team-workflow.md +572 -0
- package/docs/workflows.md +139 -0
- package/features/cross-distro-packages/README.md +18 -0
- package/features/cross-distro-packages/devcontainer-feature.json +3 -3
- package/features/cross-distro-packages/install.sh +49 -7
- package/overlays/.presets/data-engineering.yml +392 -0
- package/overlays/.presets/event-sourced-service.yml +262 -0
- package/overlays/.presets/frontend.yml +287 -0
- package/overlays/.presets/full-observability.yml +113 -0
- package/overlays/.presets/k8s-dev.yml +174 -0
- package/overlays/.presets/k8s-operator-dev.yml +462 -0
- package/overlays/.presets/local-llm.yml +105 -0
- package/overlays/{presets → .presets}/microservice.yml +32 -6
- package/overlays/.presets/sdd.yml +84 -0
- package/overlays/.presets/vector-ai.yml +150 -0
- package/overlays/.presets/web-api.yml +129 -0
- package/overlays/.registry/README.md +1 -1
- package/overlays/.registry/deployment-targets.yml +54 -0
- package/overlays/.shared/README.md +127 -0
- package/overlays/.shared/compose/common-healthchecks.md +60 -0
- package/overlays/.shared/compose/nvidia-gpu-devcontainer.yml +22 -0
- package/overlays/.shared/otel/instrumentation.env +20 -0
- package/overlays/.shared/vscode/js-ts-settings.json +19 -0
- package/overlays/.shared/vscode/markdown-extensions.json +8 -0
- package/overlays/.shared/vscode/recommended-extensions.json +18 -0
- package/overlays/README.md +8 -2
- package/overlays/alertmanager/devcontainer.patch.json +0 -1
- package/overlays/alertmanager/docker-compose.yml +8 -0
- package/overlays/alertmanager/overlay.yml +1 -0
- package/overlays/alertmanager/setup.sh +4 -19
- package/overlays/alertmanager/verify.sh +8 -9
- package/overlays/all/README.md +43 -0
- package/overlays/all/devcontainer.patch.json +6 -0
- package/overlays/all/overlay.yml +14 -0
- package/overlays/amp/README.md +70 -0
- package/overlays/amp/devcontainer.patch.json +6 -0
- package/overlays/amp/overlay.yml +15 -0
- package/overlays/amp/setup.sh +26 -0
- package/overlays/amp/verify.sh +21 -0
- package/overlays/ansible/README.md +163 -0
- package/overlays/ansible/devcontainer.patch.json +14 -0
- package/overlays/ansible/overlay.yml +18 -0
- package/overlays/argocd/README.md +158 -0
- package/overlays/argocd/devcontainer.patch.json +9 -0
- package/overlays/argocd/overlay.yml +17 -0
- package/overlays/argocd/setup.sh +29 -0
- package/overlays/argocd/verify.sh +14 -0
- package/overlays/bun/devcontainer.patch.json +1 -10
- package/overlays/bun/overlay.yml +8 -1
- package/overlays/bun/setup.sh +10 -1
- package/overlays/bun/verify.sh +6 -1
- package/overlays/claude-code/README.md +83 -0
- package/overlays/claude-code/devcontainer.patch.json +8 -0
- package/overlays/claude-code/overlay.yml +15 -0
- package/overlays/claude-code/setup.sh +26 -0
- package/overlays/claude-code/verify.sh +21 -0
- package/overlays/cloudflared/README.md +190 -0
- package/overlays/cloudflared/devcontainer.patch.json +3 -0
- package/overlays/cloudflared/overlay.yml +15 -0
- package/overlays/cloudflared/setup.sh +46 -0
- package/overlays/cloudflared/verify.sh +21 -0
- package/overlays/codex/README.md +9 -6
- package/overlays/codex/devcontainer.patch.json +12 -1
- package/overlays/codex/overlay.yml +1 -0
- package/overlays/codex/setup.sh +5 -0
- package/overlays/codex/verify.sh +8 -0
- package/overlays/comfyui/.env.example +34 -0
- package/overlays/comfyui/README.md +342 -0
- package/overlays/comfyui/devcontainer.patch.json +15 -0
- package/overlays/comfyui/docker-compose.yml +40 -0
- package/overlays/comfyui/overlay.yml +24 -0
- package/overlays/comfyui/setup.sh +36 -0
- package/overlays/comfyui/verify.sh +103 -0
- package/overlays/commitlint/devcontainer.patch.json +1 -6
- package/overlays/commitlint/setup.sh +5 -0
- package/overlays/cuda/README.md +179 -0
- package/overlays/cuda/devcontainer.patch.json +7 -0
- package/overlays/cuda/overlay.yml +17 -0
- package/overlays/cuda/setup.sh +32 -0
- package/overlays/cuda/verify.sh +38 -0
- package/overlays/devcontainer-cli/README.md +50 -0
- package/overlays/devcontainer-cli/devcontainer.patch.json +13 -0
- package/overlays/devcontainer-cli/overlay.yml +16 -0
- package/overlays/devcontainer-cli/setup.sh +14 -0
- package/overlays/direnv/README.md +6 -4
- package/overlays/direnv/devcontainer.patch.json +6 -0
- package/overlays/direnv/setup.sh +7 -18
- package/overlays/docker-sock/overlay.yml +1 -0
- package/overlays/dotnet/overlay.yml +4 -1
- package/overlays/dotnet/setup.sh +14 -7
- package/overlays/duckdb/README.md +274 -0
- package/overlays/duckdb/devcontainer.patch.json +9 -0
- package/overlays/duckdb/overlay.yml +17 -0
- package/overlays/duckdb/setup.sh +45 -0
- package/overlays/duckdb/verify.sh +32 -0
- package/overlays/fuseki/.env.example +5 -0
- package/overlays/fuseki/README.md +173 -0
- package/overlays/fuseki/devcontainer.patch.json +18 -0
- package/overlays/fuseki/docker-compose.yml +30 -0
- package/overlays/fuseki/overlay.yml +42 -0
- package/overlays/fuseki/verify.sh +58 -0
- package/overlays/gcloud/devcontainer.patch.json +0 -6
- package/overlays/gcloud/setup.sh +51 -0
- package/overlays/gemini-cli/README.md +77 -0
- package/overlays/gemini-cli/devcontainer.patch.json +6 -0
- package/overlays/gemini-cli/overlay.yml +15 -0
- package/overlays/gemini-cli/setup.sh +26 -0
- package/overlays/gemini-cli/verify.sh +21 -0
- package/overlays/git-helpers/devcontainer.patch.json +2 -1
- package/overlays/git-helpers/overlay.yml +1 -0
- package/overlays/go/overlay.yml +6 -1
- package/overlays/go/setup.sh +15 -14
- package/overlays/grafana/README.md +5 -5
- package/overlays/grafana/dashboard-provider.yml +1 -1
- package/overlays/grafana/devcontainer.patch.json +0 -1
- package/overlays/grafana/docker-compose.yml +10 -4
- package/overlays/grafana/overlay.yml +12 -2
- package/overlays/grpc-tools/README.md +242 -0
- package/overlays/grpc-tools/devcontainer.patch.json +14 -0
- package/overlays/grpc-tools/overlay.yml +14 -0
- package/overlays/grpc-tools/setup.sh +57 -0
- package/overlays/grpc-tools/verify.sh +47 -0
- package/overlays/jaeger/.env.example +11 -0
- package/overlays/jaeger/README.md +33 -4
- package/overlays/jaeger/devcontainer.patch.json +9 -1
- package/overlays/jaeger/docker-compose.yml +17 -0
- package/overlays/jaeger/overlay.yml +7 -3
- package/overlays/java/overlay.yml +6 -1
- package/overlays/jupyter/.env.example +6 -0
- package/overlays/jupyter/README.md +210 -0
- package/overlays/jupyter/devcontainer.patch.json +14 -0
- package/overlays/jupyter/docker-compose.yml +24 -0
- package/overlays/jupyter/overlay.yml +19 -0
- package/overlays/jupyter/verify.sh +35 -0
- package/overlays/just/setup.sh +5 -17
- package/overlays/k3d/README.md +201 -0
- package/overlays/k3d/devcontainer.patch.json +9 -0
- package/overlays/k3d/overlay.yml +19 -0
- package/overlays/k3d/setup.sh +34 -0
- package/overlays/k3d/verify.sh +38 -0
- package/overlays/keycloak/.env.example +5 -0
- package/overlays/keycloak/README.md +238 -0
- package/overlays/keycloak/devcontainer.patch.json +16 -0
- package/overlays/keycloak/docker-compose.yml +35 -0
- package/overlays/keycloak/overlay.yml +38 -0
- package/overlays/keycloak/verify.sh +55 -0
- package/overlays/kind/README.md +221 -0
- package/overlays/kind/devcontainer.patch.json +9 -0
- package/overlays/kind/overlay.yml +18 -0
- package/overlays/kind/setup.sh +34 -0
- package/overlays/kind/verify.sh +40 -0
- package/overlays/localstack/.env.example +6 -0
- package/overlays/localstack/README.md +188 -0
- package/overlays/localstack/devcontainer.patch.json +21 -0
- package/overlays/localstack/docker-compose.yml +26 -0
- package/overlays/localstack/overlay.yml +36 -0
- package/overlays/localstack/verify.sh +47 -0
- package/overlays/loki/devcontainer.patch.json +0 -1
- package/overlays/loki/docker-compose.yml +8 -0
- package/overlays/loki/overlay.yml +7 -1
- package/overlays/mailpit/.env.example +4 -0
- package/overlays/mailpit/README.md +191 -0
- package/overlays/mailpit/devcontainer.patch.json +20 -0
- package/overlays/mailpit/docker-compose.yml +18 -0
- package/overlays/mailpit/overlay.yml +27 -0
- package/overlays/mailpit/verify.sh +52 -0
- package/overlays/minio/devcontainer.patch.json +1 -1
- package/overlays/minio/docker-compose.yml +1 -0
- package/overlays/minio/overlay.yml +23 -2
- package/overlays/minio/setup.sh +10 -18
- package/overlays/mkdocs/devcontainer.patch.json +1 -5
- package/overlays/mkdocs/overlay.yml +5 -2
- package/overlays/mkdocs2/README.md +135 -0
- package/overlays/mkdocs2/devcontainer.patch.json +15 -0
- package/overlays/mkdocs2/overlay.yml +19 -0
- package/overlays/mkdocs2/setup.sh +67 -0
- package/overlays/mkdocs2/verify.sh +35 -0
- package/overlays/modern-cli-tools/devcontainer.patch.json +7 -1
- package/overlays/modern-cli-tools/overlay.yml +1 -0
- package/overlays/modern-cli-tools/setup.sh +21 -71
- package/overlays/mongodb/devcontainer.patch.json +0 -6
- package/overlays/mongodb/docker-compose.yml +2 -0
- package/overlays/mongodb/overlay.yml +38 -4
- package/overlays/mongodb/setup.sh +59 -0
- package/overlays/mysql/docker-compose.yml +2 -0
- package/overlays/mysql/overlay.yml +48 -4
- package/overlays/mysql/verify.sh +4 -3
- package/overlays/nats/.env.example +1 -1
- package/overlays/nats/README.md +1 -1
- package/overlays/nats/docker-compose.yml +2 -1
- package/overlays/nats/overlay.yml +30 -4
- package/overlays/ngrok/overlay.yml +2 -1
- package/overlays/ngrok/setup.sh +9 -6
- package/overlays/nodejs/devcontainer.patch.json +1 -12
- package/overlays/nodejs/overlay.yml +8 -1
- package/overlays/nodejs/setup.sh +5 -0
- package/overlays/ollama/.env.example +14 -0
- package/overlays/ollama/README.md +326 -0
- package/overlays/ollama/devcontainer.patch.json +14 -0
- package/overlays/ollama/docker-compose.yml +25 -0
- package/overlays/ollama/overlay.yml +27 -0
- package/overlays/ollama/verify.sh +76 -0
- package/overlays/ollama-cli/README.md +90 -0
- package/overlays/ollama-cli/devcontainer.patch.json +3 -0
- package/overlays/ollama-cli/overlay.yml +19 -0
- package/overlays/ollama-cli/setup.sh +103 -0
- package/overlays/ollama-cli/verify.sh +49 -0
- package/overlays/open-webui/.env.example +5 -0
- package/overlays/open-webui/README.md +162 -0
- package/overlays/open-webui/devcontainer.patch.json +14 -0
- package/overlays/open-webui/docker-compose.yml +24 -0
- package/overlays/open-webui/overlay.yml +45 -0
- package/overlays/openapi-tools/README.md +243 -0
- package/overlays/openapi-tools/devcontainer.patch.json +9 -0
- package/overlays/openapi-tools/overlay.yml +16 -0
- package/overlays/openapi-tools/setup.sh +46 -0
- package/overlays/openapi-tools/verify.sh +51 -0
- package/overlays/opencode/README.md +76 -0
- package/overlays/opencode/devcontainer.patch.json +6 -0
- package/overlays/opencode/overlay.yml +14 -0
- package/overlays/opencode/setup.sh +26 -0
- package/overlays/opencode/verify.sh +21 -0
- package/overlays/otel-collector/README.md +4 -0
- package/overlays/otel-collector/devcontainer.patch.json +4 -1
- package/overlays/otel-collector/docker-compose.yml +8 -4
- package/overlays/otel-collector/overlay.yml +3 -0
- package/overlays/otel-collector/overlay.yml.example +26 -0
- package/overlays/otel-collector/setup.sh +3 -16
- package/overlays/otel-demo-nodejs/devcontainer.patch.json +0 -1
- package/overlays/otel-demo-nodejs/docker-compose.yml +1 -0
- package/overlays/otel-demo-nodejs/overlay.yml +9 -1
- package/overlays/otel-demo-nodejs/verify.sh +8 -9
- package/overlays/otel-demo-python/devcontainer.patch.json +0 -1
- package/overlays/otel-demo-python/docker-compose.yml +1 -0
- package/overlays/otel-demo-python/overlay.yml +6 -1
- package/overlays/otel-demo-python/verify.sh +16 -10
- package/overlays/pandoc/README.md +296 -0
- package/overlays/pandoc/devcontainer.patch.json +13 -0
- package/overlays/pandoc/overlay.yml +21 -0
- package/overlays/pandoc/setup.sh +303 -0
- package/overlays/pandoc/verify.sh +25 -0
- package/overlays/pgvector/.env.example +6 -0
- package/overlays/pgvector/README.md +215 -0
- package/overlays/pgvector/devcontainer.patch.json +29 -0
- package/overlays/pgvector/docker-compose.yml +33 -0
- package/overlays/pgvector/overlay.yml +47 -0
- package/overlays/pi/README.md +141 -0
- package/overlays/pi/devcontainer.patch.json +6 -0
- package/overlays/pi/overlay.yml +15 -0
- package/overlays/pi/setup.sh +28 -0
- package/overlays/pi/verify.sh +23 -0
- package/overlays/playwright/devcontainer.patch.json +3 -6
- package/overlays/playwright/overlay.yml +2 -1
- package/overlays/playwright/setup.sh +37 -0
- package/overlays/postgres/.env.example +5 -5
- package/overlays/postgres/devcontainer.patch.json +4 -4
- package/overlays/postgres/docker-compose.yml +16 -5
- package/overlays/postgres/overlay.yml +29 -3
- package/overlays/powershell/setup.sh +49 -13
- package/overlays/pre-commit/devcontainer.patch.json +1 -7
- package/overlays/pre-commit/setup.sh +12 -3
- package/overlays/prometheus/devcontainer.patch.json +0 -1
- package/overlays/prometheus/docker-compose.yml +8 -0
- package/overlays/prometheus/overlay.yml +9 -1
- package/overlays/promtail/devcontainer.patch.json +1 -2
- package/overlays/promtail/docker-compose.yml +8 -0
- package/overlays/promtail/overlay.yml +1 -0
- package/overlays/promtail/verify.sh +16 -10
- package/overlays/pulumi/devcontainer.patch.json +1 -1
- package/overlays/python/README.md +51 -35
- package/overlays/python/devcontainer.patch.json +7 -4
- package/overlays/python/setup.sh +69 -23
- package/overlays/python/verify.sh +33 -3
- package/overlays/qdrant/.env.example +4 -0
- package/overlays/qdrant/README.md +216 -0
- package/overlays/qdrant/devcontainer.patch.json +20 -0
- package/overlays/qdrant/docker-compose.yml +26 -0
- package/overlays/qdrant/overlay.yml +44 -0
- package/overlays/rabbitmq/docker-compose.yml +1 -0
- package/overlays/rabbitmq/overlay.yml +37 -4
- package/overlays/redis/docker-compose.yml +7 -0
- package/overlays/redis/overlay.yml +21 -2
- package/overlays/redpanda/docker-compose.yml +4 -5
- package/overlays/redpanda/overlay.yml +15 -3
- package/overlays/rocm/README.md +227 -0
- package/overlays/rocm/devcontainer.patch.json +4 -0
- package/overlays/rocm/overlay.yml +18 -0
- package/overlays/rocm/setup.sh +45 -0
- package/overlays/rocm/verify.sh +47 -0
- package/overlays/rust/overlay.yml +3 -1
- package/overlays/rust/setup.sh +11 -18
- package/overlays/skaffold/README.md +256 -0
- package/overlays/skaffold/devcontainer.patch.json +9 -0
- package/overlays/skaffold/overlay.yml +20 -0
- package/overlays/skaffold/setup.sh +33 -0
- package/overlays/skaffold/verify.sh +24 -0
- package/overlays/spec-kit/README.md +181 -0
- package/overlays/spec-kit/devcontainer.patch.json +6 -0
- package/overlays/spec-kit/overlay.yml +19 -0
- package/overlays/spec-kit/setup.sh +49 -0
- package/overlays/spec-kit/verify.sh +33 -0
- package/overlays/sqlite/setup.sh +14 -14
- package/overlays/sqlserver/docker-compose.yml +4 -3
- package/overlays/sqlserver/overlay.yml +17 -0
- package/overlays/sqlserver/verify.sh +22 -5
- package/overlays/task/README.md +47 -0
- package/overlays/task/devcontainer.patch.json +9 -0
- package/overlays/task/overlay.yml +16 -0
- package/overlays/task/setup.sh +29 -0
- package/overlays/task/verify.sh +14 -0
- package/overlays/tempo/devcontainer.patch.json +0 -1
- package/overlays/tempo/docker-compose.yml +8 -0
- package/overlays/tempo/overlay.yml +1 -0
- package/overlays/tempo/verify.sh +16 -10
- package/overlays/tilt/README.md +259 -0
- package/overlays/tilt/devcontainer.patch.json +16 -0
- package/overlays/tilt/overlay.yml +19 -0
- package/overlays/tilt/setup.sh +35 -0
- package/overlays/tilt/verify.sh +24 -0
- package/overlays/windsurf-cli/README.md +69 -0
- package/overlays/windsurf-cli/devcontainer.patch.json +6 -0
- package/overlays/windsurf-cli/overlay.yml +15 -0
- package/overlays/windsurf-cli/setup.sh +44 -0
- package/overlays/windsurf-cli/verify.sh +31 -0
- package/package.json +12 -7
- package/templates/scripts/setup-utils.sh +228 -0
- package/tool/README.md +12 -16
- package/tool/schema/config.schema.json +350 -14
- package/tool/schema/overlay-manifest.schema.json +102 -4
- package/tool/schema/superposition-manifest.schema.json +104 -0
- package/tool/schema/superposition.schema.json +569 -0
- package/overlays/presets/web-api.yml +0 -109
- /package/overlays/{presets → .presets}/docs-site.yml +0 -0
- /package/overlays/{presets → .presets}/fullstack.yml +0 -0
- /package/overlays/otel-demo-nodejs/{Dockerfile-otel-demo-nodejs → Dockerfile} +0 -0
- /package/overlays/otel-demo-nodejs/{package-otel-demo-nodejs.json → package.json} +0 -0
- /package/overlays/otel-demo-nodejs/{server-otel-demo-nodejs.js → server.js} +0 -0
- /package/overlays/otel-demo-nodejs/{tracing-otel-demo-nodejs.js → tracing.js} +0 -0
- /package/overlays/otel-demo-python/{Dockerfile-otel-demo-python → Dockerfile} +0 -0
- /package/overlays/otel-demo-python/{app-otel-demo-python.py → app.py} +0 -0
- /package/overlays/otel-demo-python/{requirements-otel-demo-python.txt → requirements.txt} +0 -0
package/README.md
CHANGED
|
@@ -1,843 +1,120 @@
|
|
|
1
1
|
# container-superposition
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://github.com/veggerby/container-superposition/actions/workflows/validate-overlays.yml)
|
|
4
|
+
[](https://github.com/veggerby/container-superposition/actions/workflows/build-devcontainers.yml)
|
|
5
|
+
[](https://www.npmjs.com/package/container-superposition)
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+
Composable devcontainer scaffolds that collapse into normal, editable configs.
|
|
6
8
|
|
|
7
|
-
|
|
9
|
+
## Development Policy
|
|
8
10
|
|
|
9
|
-
|
|
11
|
+
This project follows spec-first development. Every feature MUST start with a
|
|
12
|
+
reviewed spec committed under `docs/specs/` before implementation code is
|
|
13
|
+
written.
|
|
10
14
|
|
|
11
|
-
|
|
12
|
-
- **Minimal Base + Composable Overlays** - Start simple, add what you need
|
|
13
|
-
- **Copy-Paste Ready** - Works immediately, customize as needed
|
|
14
|
-
- **Observability First-Class** - Full OpenTelemetry stack available as overlays
|
|
15
|
-
|
|
16
|
-
## 📋 Philosophy: Opinionated with Battle-Tested Defaults
|
|
17
|
-
|
|
18
|
-
This tool is **opinionated by design**, providing carefully curated configurations that have been tested in real-world development scenarios:
|
|
19
|
-
|
|
20
|
-
- **🎯 Battle-Tested Defaults** - Base images and configurations are chosen based on proven stability and broad compatibility
|
|
21
|
-
- **🔧 Customization Available** - While we provide sensible defaults, you can customize base images and configurations
|
|
22
|
-
- **⚠️ With Great Power...** - Custom images may introduce conflicts with overlays; test thoroughly
|
|
23
|
-
- **📝 Editable Output** - Generated configurations are plain JSON/YAML you can modify post-generation
|
|
24
|
-
|
|
25
|
-
**Default Base Image**: `mcr.microsoft.com/devcontainers/base:bookworm` (Debian Bookworm)
|
|
26
|
-
|
|
27
|
-
- Well-maintained by Microsoft
|
|
28
|
-
- Broad compatibility with devcontainer features
|
|
29
|
-
- Regular security updates
|
|
30
|
-
- Proven stability across diverse projects
|
|
31
|
-
|
|
32
|
-
**Alternative Base Images**:
|
|
33
|
-
|
|
34
|
-
- **Debian Trixie**: Newer packages, testing stability
|
|
35
|
-
- **Alpine Linux**: Minimal footprint (~5MB), ideal for resource-constrained environments
|
|
36
|
-
- **Ubuntu LTS**: Popular, familiar, extensive package ecosystem
|
|
37
|
-
- **Custom Images**: Specify your own, but be aware of potential overlay conflicts
|
|
38
|
-
|
|
39
|
-
All overlays are designed to work across Debian, Alpine, and Ubuntu bases with automatic package manager detection.
|
|
40
|
-
|
|
41
|
-
## 📁 Structure
|
|
42
|
-
|
|
43
|
-
```
|
|
44
|
-
container-superposition/
|
|
45
|
-
├── templates/ # Minimal base templates (plain, compose)
|
|
46
|
-
│ ├── plain/ # Simple image-based devcontainer
|
|
47
|
-
│ └── compose/ # Docker Compose-based devcontainer
|
|
48
|
-
├── overlays/ # Composable capability overlays
|
|
49
|
-
│ ├── index.yml # Overlay registry and metadata
|
|
50
|
-
│ ├── presets/ # Stack presets (meta-overlays)
|
|
51
|
-
│ │ ├── web-api.yml
|
|
52
|
-
│ │ ├── microservice.yml
|
|
53
|
-
│ │ ├── docs-site.yml
|
|
54
|
-
│ │ └── fullstack.yml
|
|
55
|
-
│ ├── dotnet/ # Language overlays
|
|
56
|
-
│ ├── nodejs/
|
|
57
|
-
│ ├── python/
|
|
58
|
-
│ ├── mkdocs/
|
|
59
|
-
│ ├── bun/
|
|
60
|
-
│ ├── go/
|
|
61
|
-
│ ├── java/
|
|
62
|
-
│ ├── rust/
|
|
63
|
-
│ ├── powershell/
|
|
64
|
-
│ ├── postgres/ # Database/messaging overlays
|
|
65
|
-
│ ├── redis/
|
|
66
|
-
│ ├── mongodb/
|
|
67
|
-
│ ├── mysql/
|
|
68
|
-
│ ├── sqlite/
|
|
69
|
-
│ ├── sqlserver/
|
|
70
|
-
│ ├── minio/
|
|
71
|
-
│ ├── rabbitmq/
|
|
72
|
-
│ ├── redpanda/
|
|
73
|
-
│ ├── nats/
|
|
74
|
-
│ ├── otel-collector/ # Observability overlays
|
|
75
|
-
│ ├── jaeger/
|
|
76
|
-
│ ├── prometheus/
|
|
77
|
-
│ ├── grafana/
|
|
78
|
-
│ ├── loki/
|
|
79
|
-
│ ├── tempo/
|
|
80
|
-
│ ├── alertmanager/
|
|
81
|
-
│ ├── promtail/
|
|
82
|
-
│ ├── otel-demo-nodejs/
|
|
83
|
-
│ ├── otel-demo-python/
|
|
84
|
-
│ ├── aws-cli/ # Cloud tool overlays
|
|
85
|
-
│ ├── azure-cli/
|
|
86
|
-
│ ├── gcloud/
|
|
87
|
-
│ ├── kubectl-helm/
|
|
88
|
-
│ ├── terraform/
|
|
89
|
-
│ ├── pulumi/
|
|
90
|
-
│ ├── docker-in-docker/ # Dev tool overlays
|
|
91
|
-
│ ├── docker-sock/
|
|
92
|
-
│ ├── playwright/
|
|
93
|
-
│ ├── codex/
|
|
94
|
-
│ ├── git-helpers/
|
|
95
|
-
│ ├── pre-commit/
|
|
96
|
-
│ ├── commitlint/
|
|
97
|
-
│ ├── just/
|
|
98
|
-
│ ├── direnv/
|
|
99
|
-
│ ├── modern-cli-tools/
|
|
100
|
-
│ └── ngrok/
|
|
101
|
-
├── features/ # Custom devcontainer features
|
|
102
|
-
├── tool/ # Composition logic and schema
|
|
103
|
-
│ ├── questionnaire/ # Composition engine
|
|
104
|
-
│ └── schema/ # TypeScript types and JSON schema
|
|
105
|
-
├── docs/ # Complete documentation
|
|
106
|
-
│ ├── presets.md # Stack presets guide
|
|
107
|
-
│ └── ...
|
|
108
|
-
└── scripts/ # CLI entry points
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
### `/templates` - Minimal Base Templates
|
|
112
|
-
|
|
113
|
-
Two foundational templates that serve as starting points:
|
|
114
|
-
|
|
115
|
-
- **plain** - Simple image-based devcontainer with essential tools
|
|
116
|
-
- **compose** - Docker Compose-based for multi-service environments
|
|
117
|
-
|
|
118
|
-
Each template is minimal by design. Capabilities are added via overlays.
|
|
119
|
-
|
|
120
|
-
### `/overlays` - Composable Capabilities
|
|
121
|
-
|
|
122
|
-
Overlays are modular configuration fragments organized by category:
|
|
123
|
-
|
|
124
|
-
**Language & Framework:**
|
|
125
|
-
|
|
126
|
-
- **dotnet** - .NET SDK with C# development tools
|
|
127
|
-
- **nodejs** - Node.js LTS with npm and TypeScript support
|
|
128
|
-
- **python** - Python with pip and common data science tools
|
|
129
|
-
- **mkdocs** - MkDocs for documentation sites
|
|
130
|
-
- **bun** - Bun JavaScript runtime and toolkit
|
|
131
|
-
- **go** - Go programming language
|
|
132
|
-
- **java** - Java Development Kit
|
|
133
|
-
- **rust** - Rust programming language
|
|
134
|
-
- **powershell** - PowerShell Core
|
|
135
|
-
|
|
136
|
-
**Databases & Message Brokers:**
|
|
137
|
-
|
|
138
|
-
- **postgres** - PostgreSQL relational database
|
|
139
|
-
- **redis** - Redis in-memory data store
|
|
140
|
-
- **mongodb** - MongoDB document database
|
|
141
|
-
- **mysql** - MySQL relational database
|
|
142
|
-
- **sqlite** - SQLite embedded database
|
|
143
|
-
- **sqlserver** - Microsoft SQL Server
|
|
144
|
-
- **minio** - MinIO S3-compatible object storage
|
|
145
|
-
- **rabbitmq** - RabbitMQ message broker (AMQP)
|
|
146
|
-
- **redpanda** - Redpanda Kafka-compatible streaming
|
|
147
|
-
- **nats** - NATS messaging system
|
|
148
|
-
|
|
149
|
-
**Observability:**
|
|
150
|
-
|
|
151
|
-
- **otel-collector** - OpenTelemetry Collector (telemetry pipeline)
|
|
152
|
-
- **jaeger** - Jaeger distributed tracing
|
|
153
|
-
- **prometheus** - Prometheus metrics collection
|
|
154
|
-
- **grafana** - Grafana visualization and dashboards
|
|
155
|
-
- **loki** - Loki log aggregation
|
|
156
|
-
- **tempo** - Tempo distributed tracing backend
|
|
157
|
-
- **alertmanager** - Prometheus Alertmanager
|
|
158
|
-
- **promtail** - Promtail log collector for Loki
|
|
159
|
-
- **otel-demo-nodejs** - OpenTelemetry demo app (Node.js)
|
|
160
|
-
- **otel-demo-python** - OpenTelemetry demo app (Python)
|
|
161
|
-
|
|
162
|
-
**Cloud Tools:**
|
|
163
|
-
|
|
164
|
-
- **aws-cli** - AWS Command Line Interface
|
|
165
|
-
- **azure-cli** - Azure Command Line Interface
|
|
166
|
-
- **gcloud** - Google Cloud SDK
|
|
167
|
-
- **kubectl-helm** - Kubernetes CLI and Helm package manager
|
|
168
|
-
- **terraform** - Terraform infrastructure as code
|
|
169
|
-
- **pulumi** - Pulumi infrastructure as code
|
|
170
|
-
|
|
171
|
-
**Dev Tools:**
|
|
172
|
-
|
|
173
|
-
- **docker-in-docker** - Docker daemon in container
|
|
174
|
-
- **docker-sock** - Access to host Docker daemon
|
|
175
|
-
- **playwright** - Playwright browser automation
|
|
176
|
-
- **codex** - Codex AI coding assistant
|
|
177
|
-
- **git-helpers** - Git with LFS, GPG, GitHub CLI
|
|
178
|
-
- **pre-commit** - Pre-commit hook framework
|
|
179
|
-
- **commitlint** - Commit message linting
|
|
180
|
-
- **just** - Just command runner
|
|
181
|
-
- **direnv** - Directory-based environment variables
|
|
182
|
-
- **modern-cli-tools** - Modern alternatives (ripgrep, fd, bat, jq, yq)
|
|
183
|
-
- **ngrok** - Ngrok secure tunnels
|
|
184
|
-
|
|
185
|
-
Each overlay includes:
|
|
186
|
-
|
|
187
|
-
- `devcontainer.patch.json` - Configuration to merge
|
|
188
|
-
- `docker-compose.yml` (if needed) - Service definitions
|
|
189
|
-
- `.env.example` - Environment variables
|
|
190
|
-
- Configuration files (e.g., `otel-collector-config.yaml`)
|
|
191
|
-
- README with usage instructions
|
|
192
|
-
|
|
193
|
-
### `/features` - Custom Building Blocks
|
|
194
|
-
|
|
195
|
-
Custom devcontainer features that add value beyond containers.dev:
|
|
196
|
-
|
|
197
|
-
- **cross-distro-packages** - Cross-distribution package manager with automatic distro detection (apt/apk)
|
|
198
|
-
- **project-scaffolder** - Interactive project initialization
|
|
199
|
-
- **team-conventions** - Shared linting, formatting, commit standards
|
|
200
|
-
- **local-secrets-manager** - Safe local development secrets
|
|
201
|
-
|
|
202
|
-
## 🚀 Quick Start
|
|
203
|
-
|
|
204
|
-
### Via npx (Recommended)
|
|
205
|
-
|
|
206
|
-
No installation required! Use npx to run the tool directly:
|
|
207
|
-
|
|
208
|
-
```bash
|
|
209
|
-
# Interactive mode - guided questionnaire
|
|
210
|
-
npx container-superposition init
|
|
211
|
-
|
|
212
|
-
# With CLI flags - skip to your stack
|
|
213
|
-
npx container-superposition init --stack compose --language nodejs --database postgres
|
|
214
|
-
|
|
215
|
-
# List all available overlays
|
|
216
|
-
npx container-superposition list
|
|
217
|
-
|
|
218
|
-
# Check your environment
|
|
219
|
-
npx container-superposition doctor
|
|
220
|
-
```
|
|
221
|
-
|
|
222
|
-
### Global Installation (Optional)
|
|
223
|
-
|
|
224
|
-
Install globally for faster repeated use:
|
|
225
|
-
|
|
226
|
-
```bash
|
|
227
|
-
# Install globally
|
|
228
|
-
npm install -g container-superposition
|
|
229
|
-
|
|
230
|
-
# Now use without npx
|
|
231
|
-
container-superposition init
|
|
232
|
-
container-superposition list
|
|
233
|
-
container-superposition doctor
|
|
234
|
-
```
|
|
235
|
-
|
|
236
|
-
### From Source (Development)
|
|
237
|
-
|
|
238
|
-
For contributors or those who want to modify the tool:
|
|
239
|
-
|
|
240
|
-
```bash
|
|
241
|
-
# Clone the repository
|
|
242
|
-
git clone https://github.com/veggerby/container-superposition.git
|
|
243
|
-
cd container-superposition
|
|
244
|
-
|
|
245
|
-
# Install dependencies
|
|
246
|
-
npm install
|
|
247
|
-
|
|
248
|
-
# Run the interactive setup
|
|
249
|
-
npm run init
|
|
250
|
-
```
|
|
251
|
-
|
|
252
|
-
### Available Commands
|
|
253
|
-
|
|
254
|
-
- **`init`** - Initialize a new devcontainer configuration (default command)
|
|
255
|
-
- **`regen`** - Regenerate devcontainer from existing manifest
|
|
256
|
-
- **`list`** - List all available overlays and presets
|
|
257
|
-
- **`doctor`** - Check environment and validate configuration
|
|
258
|
-
|
|
259
|
-
The questionnaire guides you through:
|
|
260
|
-
|
|
261
|
-
1. **Preset or Custom** - Start from a pre-configured stack or build custom?
|
|
262
|
-
2. **Base template** - plain or compose?
|
|
263
|
-
3. **Overlays** - All available overlays in one multi-select (language, databases, observability, cloud tools, dev tools)
|
|
264
|
-
4. **Output path** - Where to generate the configuration
|
|
265
|
-
|
|
266
|
-
#### Stack Presets (NEW!)
|
|
267
|
-
|
|
268
|
-
Quickly get started with common development scenarios:
|
|
269
|
-
|
|
270
|
-
**🌐 Web API Stack**
|
|
271
|
-
|
|
272
|
-
- Language choice (Node.js, .NET, Python, Go, Java)
|
|
273
|
-
- PostgreSQL + Redis
|
|
274
|
-
- Full observability (OTEL, Prometheus, Grafana, Loki)
|
|
275
|
-
- Pre-configured connection strings
|
|
276
|
-
|
|
277
|
-
**🔀 Microservice Stack**
|
|
278
|
-
|
|
279
|
-
- Language choice
|
|
280
|
-
- Message broker (RabbitMQ, Redpanda, NATS)
|
|
281
|
-
- Distributed tracing (Jaeger)
|
|
282
|
-
- Metrics & monitoring (Prometheus, Grafana)
|
|
283
|
-
|
|
284
|
-
**📚 Documentation Site**
|
|
285
|
-
|
|
286
|
-
- MkDocs + Python
|
|
287
|
-
- Pre-commit hooks
|
|
288
|
-
- Modern CLI tools
|
|
289
|
-
- GitHub Pages ready
|
|
290
|
-
|
|
291
|
-
**🎨 Full-Stack Application**
|
|
292
|
-
|
|
293
|
-
- Node.js frontend + Backend language choice
|
|
294
|
-
- PostgreSQL + Redis + MinIO
|
|
295
|
-
- Complete observability stack
|
|
296
|
-
|
|
297
|
-
See [docs/presets.md](docs/presets.md) for detailed preset documentation.
|
|
298
|
-
|
|
299
|
-
**Example compositions:**
|
|
15
|
+
## Quickstart
|
|
300
16
|
|
|
301
17
|
```bash
|
|
302
|
-
#
|
|
18
|
+
# Guided questionnaire — always writes superposition.yml
|
|
303
19
|
npx container-superposition init
|
|
304
|
-
# Select "Web API Stack" → Choose Node.js → Done!
|
|
305
|
-
|
|
306
|
-
# Node.js API with PostgreSQL and observability
|
|
307
|
-
npx container-superposition init --stack compose --language nodejs --database postgres --observability otel-collector,jaeger,prometheus,grafana
|
|
308
20
|
|
|
309
|
-
#
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
# Multi-cloud setup with Terraform
|
|
328
|
-
npx container-superposition init --stack plain --language python --cloud-tools aws-cli,azure-cli,gcloud,terraform,pulumi
|
|
329
|
-
|
|
330
|
-
# Full observability stack with demo apps
|
|
331
|
-
npx container-superposition init --stack compose --language nodejs --observability otel-collector,jaeger,prometheus,grafana,loki,tempo,otel-demo-nodejs
|
|
332
|
-
|
|
333
|
-
# Bun with MinIO object storage
|
|
334
|
-
npx container-superposition init --stack compose --language bun --database postgres,minio --dev-tools docker-sock
|
|
335
|
-
|
|
336
|
-
# Documentation site with MkDocs
|
|
337
|
-
npx container-superposition init --stack plain --language mkdocs --dev-tools pre-commit,modern-cli-tools
|
|
338
|
-
|
|
339
|
-
# PowerShell scripting environment
|
|
340
|
-
npx container-superposition init --stack plain --language powershell --cloud-tools aws-cli,azure-cli
|
|
341
|
-
```
|
|
342
|
-
|
|
343
|
-
**Port Offset for Multiple Instances:**
|
|
344
|
-
|
|
345
|
-
If you're running multiple devcontainer instances simultaneously (e.g., multiple microservices), use `--port-offset` to avoid port conflicts:
|
|
346
|
-
|
|
347
|
-
```bash
|
|
348
|
-
# Service 1 (default ports)
|
|
349
|
-
npm run init -- --stack compose --language nodejs --postgres --output ./service1
|
|
350
|
-
|
|
351
|
-
# Service 2 (ports shifted by 100)
|
|
352
|
-
npm run init -- --stack compose --language nodejs --postgres --port-offset 100 --output ./service2
|
|
353
|
-
|
|
354
|
-
# Service 3 (ports shifted by 200)
|
|
355
|
-
npm run init -- --stack compose --language nodejs --postgres --port-offset 200 --output ./service3
|
|
356
|
-
```
|
|
357
|
-
|
|
358
|
-
This automatically adjusts all exposed ports in docker-compose.yml and documents the offset in .env.example.
|
|
359
|
-
|
|
360
|
-
### Regenerating from Manifest
|
|
361
|
-
|
|
362
|
-
Every devcontainer generation creates a `superposition.json` manifest file that records your configuration choices. You can use this manifest to:
|
|
363
|
-
|
|
364
|
-
- **Iterate on your setup** - Modify overlay selections and regenerate
|
|
365
|
-
- **Update to latest** - Regenerate with newer overlay versions
|
|
366
|
-
- **Experiment safely** - Try different configurations with automatic backup
|
|
367
|
-
- **Share configurations** - Commit the manifest for team consistency
|
|
368
|
-
|
|
369
|
-
**Quick regeneration (recommended):**
|
|
370
|
-
|
|
371
|
-
```bash
|
|
372
|
-
# Simple regen command - automatically finds manifest in .devcontainer/
|
|
21
|
+
# Declarative project config committed in the repo
|
|
22
|
+
cat > .superposition.yml <<'YAML'
|
|
23
|
+
stack: compose
|
|
24
|
+
language:
|
|
25
|
+
- nodejs
|
|
26
|
+
database:
|
|
27
|
+
- postgres
|
|
28
|
+
env:
|
|
29
|
+
APP_ENV: development
|
|
30
|
+
mounts:
|
|
31
|
+
- "./local-tools:/workspace/tools"
|
|
32
|
+
customizations:
|
|
33
|
+
envTemplate:
|
|
34
|
+
POSTGRES_PASSWORD: postgres
|
|
35
|
+
YAML
|
|
36
|
+
npx container-superposition init --no-interactive
|
|
37
|
+
|
|
38
|
+
# Regenerate from the repository project file (superposition.yml is required)
|
|
373
39
|
npx container-superposition regen
|
|
374
40
|
|
|
375
|
-
#
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
**Interactive regeneration with changes:**
|
|
41
|
+
# Or select the project file explicitly
|
|
42
|
+
npx container-superposition regen --from-project
|
|
379
43
|
|
|
380
|
-
|
|
381
|
-
# Loads manifest, creates backup, shows questionnaire with pre-selected options
|
|
382
|
-
npx container-superposition init --from-manifest ./.devcontainer/superposition.json
|
|
383
|
-
|
|
384
|
-
# Or from a different location (regenerates in the manifest's directory)
|
|
385
|
-
npx container-superposition init --from-manifest /path/to/project/.devcontainer/superposition.json
|
|
386
|
-
```
|
|
387
|
-
|
|
388
|
-
> **Note:** When using `--from-manifest`, the devcontainer is generated relative to the manifest file's location, not your current working directory. This means you can run the command from anywhere and the output will go to the correct project directory.
|
|
389
|
-
|
|
390
|
-
**Non-interactive regeneration (CI/CD):**
|
|
391
|
-
|
|
392
|
-
```bash
|
|
393
|
-
# Truly non-interactive: use manifest values directly without questionnaire
|
|
394
|
-
npx container-superposition init --from-manifest ./.devcontainer/superposition.json --no-interactive --no-backup
|
|
395
|
-
```
|
|
396
|
-
|
|
397
|
-
> **Note:** The `--no-interactive` option skips the questionnaire entirely and uses all values from the manifest. This is perfect for CI/CD pipelines or when you want to ensure exact reproducibility.
|
|
398
|
-
|
|
399
|
-
**Workflow examples:**
|
|
400
|
-
|
|
401
|
-
```bash
|
|
402
|
-
# 1. Initial setup
|
|
44
|
+
# Non-interactive example
|
|
403
45
|
npx container-superposition init --stack compose --language nodejs --database postgres
|
|
404
|
-
# Creates .devcontainer/ and superposition.json
|
|
405
|
-
|
|
406
|
-
# 2. Later: Add Redis and observability (interactive)
|
|
407
|
-
npx container-superposition init --from-manifest ./.devcontainer/superposition.json
|
|
408
|
-
# Questionnaire shows with nodejs and postgres pre-selected
|
|
409
|
-
# Add redis, otel-collector, grafana
|
|
410
|
-
# Original .devcontainer/ backed up automatically
|
|
411
|
-
|
|
412
|
-
# 3. Update to latest overlay versions (simple regen)
|
|
413
|
-
npx container-superposition regen
|
|
414
|
-
# Uses exact manifest values, creates backup
|
|
415
|
-
# Perfect for pulling latest overlay updates
|
|
416
|
-
|
|
417
|
-
# 4. Switch languages (e.g., Node.js → Python)
|
|
418
|
-
npx container-superposition init --from-manifest ./.devcontainer/superposition.json
|
|
419
|
-
# Change nodejs to python in questionnaire
|
|
420
|
-
# Regenerate with new language
|
|
421
|
-
```
|
|
422
46
|
|
|
423
|
-
|
|
47
|
+
# Write only superposition.yml without generating .devcontainer/
|
|
48
|
+
npx container-superposition init --stack compose --language nodejs --no-scaffold
|
|
424
49
|
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
- **`--backup-dir <path>`**: Custom backup location
|
|
428
|
-
- **Automatic .gitignore**: Backup patterns added to project root `.gitignore`
|
|
50
|
+
# Preview before writing files
|
|
51
|
+
npx container-superposition plan --stack compose --overlays nodejs,postgres,grafana
|
|
429
52
|
|
|
430
|
-
|
|
53
|
+
# Explain why dependencies were included
|
|
54
|
+
npx container-superposition plan --stack compose --overlays grafana --verbose
|
|
431
55
|
|
|
432
|
-
-
|
|
433
|
-
-
|
|
434
|
-
- All overlay selections
|
|
435
|
-
- Port offset
|
|
436
|
-
- Output path
|
|
437
|
-
- Container name
|
|
438
|
-
|
|
439
|
-
See [tool/README.md](tool/README.md) for full documentation.
|
|
440
|
-
|
|
441
|
-
### Preserving Project-Specific Customizations
|
|
442
|
-
|
|
443
|
-
**Problem**: When you regenerate a devcontainer (to add overlays or update), manual customizations are lost.
|
|
444
|
-
|
|
445
|
-
**Solution**: Use the `.devcontainer/custom/` directory for customizations that persist across regenerations.
|
|
446
|
-
|
|
447
|
-
**Quick example:**
|
|
448
|
-
|
|
449
|
-
```bash
|
|
450
|
-
# 1. Generate initial devcontainer
|
|
451
|
-
npm run init -- --stack compose --language nodejs --database postgres
|
|
452
|
-
|
|
453
|
-
# 2. Add custom patches
|
|
454
|
-
mkdir -p .devcontainer/custom
|
|
455
|
-
|
|
456
|
-
# Add custom mounts, extensions, etc.
|
|
457
|
-
cat > .devcontainer/custom/devcontainer.patch.json << 'EOF'
|
|
458
|
-
{
|
|
459
|
-
"mounts": [
|
|
460
|
-
"source=${localWorkspaceFolder}/../shared-libs,target=/workspace/shared,type=bind"
|
|
461
|
-
],
|
|
462
|
-
"customizations": {
|
|
463
|
-
"vscode": {
|
|
464
|
-
"extensions": ["eamodio.gitlens"]
|
|
465
|
-
}
|
|
466
|
-
}
|
|
467
|
-
}
|
|
468
|
-
EOF
|
|
469
|
-
|
|
470
|
-
# 3. Regenerate (e.g., to add Redis)
|
|
471
|
-
npm run init -- --from-manifest .devcontainer/superposition.json
|
|
472
|
-
# Select redis in addition to existing overlays
|
|
473
|
-
|
|
474
|
-
# 4. Your custom patches are automatically preserved and merged! ✅
|
|
475
|
-
```
|
|
476
|
-
|
|
477
|
-
**Supported customization files:**
|
|
478
|
-
|
|
479
|
-
- `devcontainer.patch.json` - Merges into devcontainer.json
|
|
480
|
-
- `docker-compose.patch.yml` - Merges into docker-compose.yml
|
|
481
|
-
- `environment.env` - Additional environment variables
|
|
482
|
-
- `scripts/post-create.sh` - Custom one-time setup script
|
|
483
|
-
- `scripts/post-start.sh` - Custom startup script
|
|
484
|
-
- `files/` - Additional files to copy
|
|
485
|
-
|
|
486
|
-
See **[Custom Patches Guide](docs/custom-patches.md)** for complete documentation and examples.
|
|
487
|
-
|
|
488
|
-
### Option 2: Manual Composition
|
|
489
|
-
|
|
490
|
-
1. **Copy a base template:**
|
|
491
|
-
|
|
492
|
-
```bash
|
|
493
|
-
cp -r templates/compose/.devcontainer /path/to/your/project/
|
|
494
|
-
```
|
|
495
|
-
|
|
496
|
-
2. **Add overlay configurations:**
|
|
497
|
-
|
|
498
|
-
```bash
|
|
499
|
-
# Merge devcontainer.patch.json files
|
|
500
|
-
# Copy docker-compose.yml files as docker-compose.{overlay}.yml
|
|
501
|
-
# Merge .env.example files
|
|
502
|
-
```
|
|
503
|
-
|
|
504
|
-
3. **Open in VS Code** and reopen in container
|
|
505
|
-
|
|
506
|
-
## 🔧 Architecture
|
|
507
|
-
|
|
508
|
-
- **Questionnaire**: 5–8 questions to understand your needs
|
|
509
|
-
- **Composition**: Merges base templates with lightweight overlays
|
|
510
|
-
- **Output**: Plain `.devcontainer/` folder — fully editable, no lock-in
|
|
511
|
-
- **Overlays**: Add-ons for databases (Postgres, Redis), Playwright, cloud tools, etc.
|
|
512
|
-
|
|
513
|
-
**Key Design Decisions:**
|
|
514
|
-
|
|
515
|
-
- ✅ Generate once, edit forever (no "sync" or "update")
|
|
516
|
-
- ✅ Output is standard JSON — no proprietary formats
|
|
517
|
-
- ✅ Tool is optional — templates work standalone
|
|
518
|
-
- ✅ Cross-platform via Node.js/TypeScript
|
|
519
|
-
- ✅ Metadata-driven overlays (no hardcoded menus)
|
|
520
|
-
|
|
521
|
-
### Metadata-Driven Overlays
|
|
522
|
-
|
|
523
|
-
All overlays are defined in [overlays/index.yml](overlays/index.yml):
|
|
524
|
-
|
|
525
|
-
```yaml
|
|
526
|
-
observability_overlays:
|
|
527
|
-
- id: otel-collector
|
|
528
|
-
name: OpenTelemetry Collector
|
|
529
|
-
description: Telemetry collection pipeline
|
|
530
|
-
category: observability
|
|
531
|
-
order: 2 # Start after backends
|
|
532
|
-
```
|
|
533
|
-
|
|
534
|
-
**Benefits:**
|
|
535
|
-
|
|
536
|
-
- Add new overlays without code changes
|
|
537
|
-
- Consistent naming and descriptions
|
|
538
|
-
- Control display order and categorization
|
|
539
|
-
- Easy maintenance and documentation
|
|
540
|
-
|
|
541
|
-
**Overlay Categories:**
|
|
542
|
-
|
|
543
|
-
- `base_templates` - plain, compose
|
|
544
|
-
- `base_images` - bookworm, trixie, alpine, ubuntu, custom
|
|
545
|
-
- `language_overlays` - dotnet, nodejs, python, mkdocs, bun, go, java, rust, powershell
|
|
546
|
-
- `database_overlays` - postgres, redis, mongodb, mysql, sqlite, sqlserver, minio, rabbitmq, redpanda, nats
|
|
547
|
-
- `observability_overlays` - otel-collector, jaeger, prometheus, grafana, loki, tempo, alertmanager, promtail, otel-demo-nodejs, otel-demo-python
|
|
548
|
-
- `cloud_tool_overlays` - aws-cli, azure-cli, gcloud, kubectl-helm, terraform, pulumi
|
|
549
|
-
- `dev_tool_overlays` - docker-in-docker, docker-sock, playwright, codex, git-helpers, pre-commit, commitlint, just, direnv, modern-cli-tools, ngrok
|
|
550
|
-
|
|
551
|
-
See [tool/docs/questionnaire-updates.md](tool/docs/questionnaire-updates.md) for details.
|
|
552
|
-
|
|
553
|
-
### Dependency Management & Auto-Resolution
|
|
554
|
-
|
|
555
|
-
Container Superposition includes an intelligent dependency model that automatically resolves required dependencies:
|
|
556
|
-
|
|
557
|
-
**Dependency Types:**
|
|
558
|
-
|
|
559
|
-
- **`requires`** - Hard dependencies that are automatically added
|
|
560
|
-
- **`suggests`** - Soft dependencies that work well together
|
|
561
|
-
- **`conflicts`** - Mutually exclusive overlays
|
|
562
|
-
|
|
563
|
-
**Auto-Resolution Example:**
|
|
564
|
-
|
|
565
|
-
```bash
|
|
566
|
-
# Select grafana, and prometheus is automatically added
|
|
567
|
-
npm run init -- --stack compose --observability grafana
|
|
568
|
-
|
|
569
|
-
# Output includes both:
|
|
570
|
-
# ✅ grafana
|
|
571
|
-
# ✅ prometheus (auto-resolved, required by grafana)
|
|
572
|
-
```
|
|
573
|
-
|
|
574
|
-
**Explicit Metadata in overlays/index.yml:**
|
|
575
|
-
|
|
576
|
-
```yaml
|
|
577
|
-
observability_overlays:
|
|
578
|
-
- id: grafana
|
|
579
|
-
name: Grafana
|
|
580
|
-
requires: [prometheus] # Auto-add prometheus
|
|
581
|
-
suggests: [loki, jaeger] # Could work well together
|
|
582
|
-
conflicts: []
|
|
583
|
-
tags: [observability, ui]
|
|
584
|
-
ports: [3000] # Explicit port declarations
|
|
585
|
-
```
|
|
586
|
-
|
|
587
|
-
**Benefits:**
|
|
588
|
-
|
|
589
|
-
- ✅ Predictable behavior - no hidden "if overlay == ..." logic
|
|
590
|
-
- ✅ Automatic dependency resolution
|
|
591
|
-
- ✅ Clear conflict detection
|
|
592
|
-
- ✅ Port-offset becomes data-driven
|
|
593
|
-
|
|
594
|
-
**Superposition Manifest:**
|
|
595
|
-
|
|
596
|
-
Every generated configuration includes a `superposition.json` manifest for debugging:
|
|
597
|
-
|
|
598
|
-
```json
|
|
599
|
-
{
|
|
600
|
-
"version": "0.1.0",
|
|
601
|
-
"generated": "2026-02-04T10:30:00Z",
|
|
602
|
-
"baseTemplate": "compose",
|
|
603
|
-
"baseImage": "bookworm",
|
|
604
|
-
"overlays": ["dotnet", "postgres", "prometheus", "grafana"],
|
|
605
|
-
"portOffset": 100,
|
|
606
|
-
"autoResolved": {
|
|
607
|
-
"added": ["prometheus"],
|
|
608
|
-
"reason": "prometheus (required by grafana)"
|
|
609
|
-
}
|
|
610
|
-
}
|
|
611
|
-
```
|
|
612
|
-
|
|
613
|
-
This manifest answers "why is this here?" without reading generated configs.
|
|
614
|
-
|
|
615
|
-
See [tool/docs/overlays.md](tool/docs/overlays.md) for complete overlay reference.
|
|
616
|
-
|
|
617
|
-
### Service Dependency Management
|
|
618
|
-
|
|
619
|
-
The composer intelligently manages docker-compose service dependencies:
|
|
620
|
-
|
|
621
|
-
1. **Filters docker-compose** - Removes `depends_on` references to unselected services
|
|
622
|
-
2. **Orders services** - Uses `_serviceOrder` field (0=infra, 1=backends, 2=middleware, 3=UI)
|
|
623
|
-
3. **Merges runServices** - Creates ordered startup sequence
|
|
624
|
-
4. **Validates overlays** - Ensures compatible combinations
|
|
625
|
-
|
|
626
|
-
Example: If you select `grafana` without `prometheus`, the `depends_on: [prometheus]` is automatically removed.
|
|
627
|
-
|
|
628
|
-
See [tool/README.md](tool/README.md) for architecture details.
|
|
629
|
-
|
|
630
|
-
## 🔧 Customization
|
|
631
|
-
|
|
632
|
-
### Using Official Features
|
|
633
|
-
|
|
634
|
-
All templates use official features from [containers.dev/features](https://containers.dev/features). Add more by editing `devcontainer.json`:
|
|
635
|
-
|
|
636
|
-
```json
|
|
637
|
-
{
|
|
638
|
-
"features": {
|
|
639
|
-
"ghcr.io/devcontainers/features/node:1": {},
|
|
640
|
-
"ghcr.io/devcontainers/features/docker-in-docker:2": {},
|
|
641
|
-
"ghcr.io/devcontainers/features/github-cli:1": {}
|
|
642
|
-
}
|
|
643
|
-
}
|
|
644
|
-
```
|
|
645
|
-
|
|
646
|
-
### Adding Custom Features
|
|
647
|
-
|
|
648
|
-
Use our custom features for specialized needs:
|
|
649
|
-
|
|
650
|
-
```json
|
|
651
|
-
{
|
|
652
|
-
"features": {
|
|
653
|
-
"./features/project-scaffolder": { "template": "express-api" },
|
|
654
|
-
"./features/team-conventions": { "preset": "airbnb" }
|
|
655
|
-
}
|
|
656
|
-
}
|
|
657
|
-
```
|
|
658
|
-
|
|
659
|
-
### Mixing Templates
|
|
660
|
-
|
|
661
|
-
Start with one template and enhance it:
|
|
662
|
-
|
|
663
|
-
- Add features from containers.dev
|
|
664
|
-
- Include custom features from this repo
|
|
665
|
-
- Copy useful scripts from other templates
|
|
666
|
-
|
|
667
|
-
## 🧪 Testing & Verification
|
|
668
|
-
|
|
669
|
-
### Golden Tests
|
|
670
|
-
|
|
671
|
-
The project includes comprehensive test coverage for composition logic:
|
|
672
|
-
|
|
673
|
-
```bash
|
|
674
|
-
# Run all tests
|
|
675
|
-
npm test
|
|
676
|
-
|
|
677
|
-
# Run tests in watch mode
|
|
678
|
-
npm run test:watch
|
|
679
|
-
|
|
680
|
-
# Run smoke tests
|
|
681
|
-
npm run test:smoke
|
|
56
|
+
# Migrate a manifest-only repo to the project-file model
|
|
57
|
+
npx container-superposition migrate
|
|
682
58
|
```
|
|
683
59
|
|
|
684
|
-
|
|
60
|
+
## What It Does
|
|
685
61
|
|
|
686
|
-
-
|
|
687
|
-
-
|
|
688
|
-
-
|
|
689
|
-
-
|
|
690
|
-
|
|
691
|
-
-
|
|
62
|
+
- Base templates: `plain` (single image) and `compose` (multi-service).
|
|
63
|
+
- Overlays: add languages, databases, observability, cloud tools, dev tools.
|
|
64
|
+
- Composition: merges overlays into a standard `.devcontainer/` you can edit freely.
|
|
65
|
+
- Project config: `superposition.yml` (or `.superposition.yml`) is the **canonical input** for all
|
|
66
|
+
generation and regeneration flows. Commit it to your repo for reproducible team and CI builds.
|
|
67
|
+
- `init` always writes `superposition.yml` as its primary output
|
|
68
|
+
- `regen` reads only the project file — `superposition.json` is an output-only receipt
|
|
69
|
+
- Repos without a project file should run `cs migrate` once to create one from their manifest
|
|
70
|
+
- `doctor` compares the project file against the last-generated manifest and reports drift
|
|
692
71
|
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
Each overlay includes a `verify.sh` script for validation:
|
|
696
|
-
|
|
697
|
-
```bash
|
|
698
|
-
# Inside a devcontainer, run verification scripts
|
|
699
|
-
bash ./verify-postgres.sh
|
|
700
|
-
bash ./verify-redis.sh
|
|
701
|
-
bash ./verify-grafana.sh
|
|
702
|
-
```
|
|
72
|
+
## Core Commands
|
|
703
73
|
|
|
704
|
-
|
|
74
|
+
- `init` — run the interactive questionnaire; always writes `superposition.yml` and (by default) scaffolds `.devcontainer/`
|
|
75
|
+
- Add `--no-scaffold` to write only the project file without generating `.devcontainer/`
|
|
76
|
+
- Add `--project-root <path>` to resolve persisted input from a different repository root
|
|
77
|
+
- `regen` — deterministically replay the repository project file (`superposition.yml` required)
|
|
78
|
+
- Add `--project-root <path>` to resolve persisted input from a different repository root
|
|
79
|
+
- `migrate` — one-time migration: creates `superposition.yml` from an existing `superposition.json`
|
|
80
|
+
- Required for repos that ran `init` before this project-file-first model was introduced
|
|
81
|
+
- `adopt` — migrate an existing `.devcontainer/` to the overlay-based workflow
|
|
82
|
+
- `list` — browse overlays
|
|
83
|
+
- `explain` — overlay details
|
|
84
|
+
- `plan` — preview output
|
|
85
|
+
- Add `--verbose` to narrate dependency resolution and inclusion reasons
|
|
86
|
+
- Add `--from-manifest <path>` to preview an existing manifest with the same explanation model
|
|
87
|
+
- `hash` — deterministic environment fingerprint
|
|
88
|
+
- `doctor` — validate environment and detect project-file drift
|
|
705
89
|
|
|
706
|
-
|
|
707
|
-
- ✅ Version information
|
|
708
|
-
- ✅ Service connectivity (for compose overlays)
|
|
709
|
-
- ✅ Port accessibility
|
|
710
|
-
|
|
711
|
-
Example output:
|
|
712
|
-
|
|
713
|
-
```
|
|
714
|
-
🔍 Verifying PostgreSQL overlay...
|
|
715
|
-
|
|
716
|
-
1️⃣ Checking psql client...
|
|
717
|
-
psql (PostgreSQL) 16.1
|
|
718
|
-
✅ psql client found
|
|
719
|
-
|
|
720
|
-
2️⃣ Checking PostgreSQL service...
|
|
721
|
-
✅ PostgreSQL service is ready
|
|
722
|
-
postgres:5432 - accepting connections
|
|
723
|
-
|
|
724
|
-
✅ PostgreSQL overlay verification complete
|
|
725
|
-
```
|
|
90
|
+
## Documentation
|
|
726
91
|
|
|
727
|
-
|
|
92
|
+
Start here:
|
|
728
93
|
|
|
729
|
-
-
|
|
730
|
-
- **
|
|
731
|
-
-
|
|
732
|
-
-
|
|
733
|
-
-
|
|
734
|
-
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
4. **Add project scripts** for your specific workflow
|
|
744
|
-
5. **Test thoroughly** - build and verify all tools work
|
|
745
|
-
6. **Document** - explain what's included and why
|
|
746
|
-
|
|
747
|
-
Example `devcontainer.json` structure:
|
|
748
|
-
|
|
749
|
-
```json
|
|
750
|
-
{
|
|
751
|
-
"name": "My Custom Template",
|
|
752
|
-
"image": "mcr.microsoft.com/devcontainers/typescript-node:20",
|
|
753
|
-
"features": {
|
|
754
|
-
"ghcr.io/devcontainers/features/docker-in-docker:2": {},
|
|
755
|
-
"./features/team-conventions": {}
|
|
756
|
-
},
|
|
757
|
-
"postCreateCommand": "npm install && npm run setup",
|
|
758
|
-
"customizations": {
|
|
759
|
-
"vscode": {
|
|
760
|
-
"extensions": ["dbaeumer.vscode-eslint", "esbenp.prettier-vscode"]
|
|
761
|
-
}
|
|
762
|
-
}
|
|
763
|
-
}
|
|
764
|
-
```
|
|
765
|
-
|
|
766
|
-
## 📚 Documentation
|
|
767
|
-
|
|
768
|
-
Complete documentation is available in the [docs/](docs/) folder:
|
|
769
|
-
|
|
770
|
-
- **[Documentation Index](docs/README.md)** - Complete documentation overview
|
|
771
|
-
- **[Custom Patches](docs/custom-patches.md)** - Preserve project-specific customizations across regenerations
|
|
772
|
-
- **[Publishing Guide](docs/publishing.md)** - How to publish to npm
|
|
773
|
-
- **[Quick Reference](docs/quick-reference.md)** - Templates, overlays, ports, commands
|
|
774
|
-
- **[Architecture](docs/architecture.md)** - Design principles and composition logic
|
|
775
|
-
- **[Creating Overlays](docs/creating-overlays.md)** - Guide for adding new overlays
|
|
776
|
-
- [Overlay Manifest Schema](tool/schema/overlay-manifest.schema.json) - JSON schema for overlay.yml
|
|
777
|
-
- [Overlay Index Guide](.github/instructions/overlay-index.instructions.md) - Comprehensive field documentation
|
|
778
|
-
- **[Examples](docs/examples.md)** - Common usage patterns
|
|
779
|
-
|
|
780
|
-
Additional resources:
|
|
781
|
-
|
|
782
|
-
- [VS Code Dev Containers Documentation](https://code.visualstudio.com/docs/devcontainers/containers)
|
|
783
|
-
- [Dev Container Specification](https://containers.dev/)
|
|
784
|
-
- [Docker Best Practices](https://docs.docker.com/develop/dev-best-practices/)
|
|
785
|
-
|
|
786
|
-
## 💻 Development
|
|
787
|
-
|
|
788
|
-
### Working on Container Superposition
|
|
789
|
-
|
|
790
|
-
This repository dogfoods its own tooling! The development environment is set up using Container Superposition itself.
|
|
791
|
-
|
|
792
|
-
**Quick Start:**
|
|
793
|
-
|
|
794
|
-
```bash
|
|
795
|
-
# Clone and open in VS Code
|
|
796
|
-
git clone https://github.com/veggerby/container-superposition.git
|
|
797
|
-
cd container-superposition
|
|
798
|
-
code .
|
|
799
|
-
|
|
800
|
-
# When prompted, click "Reopen in Container"
|
|
801
|
-
# The devcontainer includes:
|
|
802
|
-
# - Node.js with TypeScript
|
|
803
|
-
# - Docker access (via host socket)
|
|
804
|
-
# - Git helpers and modern CLI tools
|
|
805
|
-
# - Codex for AI assistance
|
|
806
|
-
```
|
|
807
|
-
|
|
808
|
-
**Without Devcontainer:**
|
|
809
|
-
|
|
810
|
-
```bash
|
|
811
|
-
npm install # Install dependencies
|
|
812
|
-
npm run build # Compile TypeScript
|
|
813
|
-
npm run init # Run the tool
|
|
814
|
-
npm test # Run tests
|
|
815
|
-
```
|
|
816
|
-
|
|
817
|
-
**Development Workflow:**
|
|
818
|
-
|
|
819
|
-
1. Make changes to TypeScript sources in `scripts/` or `tool/`
|
|
820
|
-
2. Run `npm run build` to compile
|
|
821
|
-
3. Test with `npm run init` or `npm test`
|
|
822
|
-
4. Submit PR following [CONTRIBUTING.md](CONTRIBUTING.md)
|
|
823
|
-
|
|
824
|
-
The `.devcontainer/` folder is generated using:
|
|
825
|
-
|
|
826
|
-
```bash
|
|
827
|
-
npm run init -- --stack plain --language nodejs --dev-tools codex,docker-sock,git-helpers,modern-cli-tools
|
|
828
|
-
```
|
|
94
|
+
- [Docs index](https://github.com/veggerby/container-superposition/blob/main/docs/README.md)
|
|
95
|
+
- [**superposition.yml reference**](https://github.com/veggerby/container-superposition/blob/main/docs/superposition-yml.md) ← project file authoring guide
|
|
96
|
+
- [Quick reference](https://github.com/veggerby/container-superposition/blob/main/docs/quick-reference.md)
|
|
97
|
+
- [Adopt command](https://github.com/veggerby/container-superposition/blob/main/docs/adopt.md)
|
|
98
|
+
- [Hash command](https://github.com/veggerby/container-superposition/blob/main/docs/hash.md)
|
|
99
|
+
- [Examples](https://github.com/veggerby/container-superposition/blob/main/docs/examples.md)
|
|
100
|
+
- [Presets](https://github.com/veggerby/container-superposition/blob/main/docs/presets.md)
|
|
101
|
+
- [Architecture](https://github.com/veggerby/container-superposition/blob/main/docs/architecture.md)
|
|
102
|
+
- [Overlays](https://github.com/veggerby/container-superposition/blob/main/docs/overlays.md)
|
|
103
|
+
- [Custom patches](https://github.com/veggerby/container-superposition/blob/main/docs/custom-patches.md)
|
|
104
|
+
- [Workflows and regen](https://github.com/veggerby/container-superposition/blob/main/docs/workflows.md)
|
|
105
|
+
- [Filesystem contract](https://github.com/veggerby/container-superposition/blob/main/docs/filesystem-contract.md)
|
|
106
|
+
- [Security](https://github.com/veggerby/container-superposition/blob/main/docs/security.md)
|
|
107
|
+
- [Publishing](https://github.com/veggerby/container-superposition/blob/main/docs/publishing.md)
|
|
829
108
|
|
|
830
|
-
##
|
|
109
|
+
## Examples
|
|
831
110
|
|
|
832
|
-
|
|
111
|
+
- [Example projects](https://github.com/veggerby/container-superposition/tree/main/examples)
|
|
112
|
+
- [Examples guide](https://github.com/veggerby/container-superposition/blob/main/docs/examples.md)
|
|
833
113
|
|
|
834
|
-
|
|
114
|
+
## Contributing
|
|
835
115
|
|
|
836
|
-
-
|
|
837
|
-
- Well-documented
|
|
838
|
-
- Fast to build
|
|
839
|
-
- Easy to understand
|
|
116
|
+
See [CONTRIBUTING.md](https://github.com/veggerby/container-superposition/blob/main/CONTRIBUTING.md)
|
|
840
117
|
|
|
841
|
-
##
|
|
118
|
+
## License
|
|
842
119
|
|
|
843
|
-
MIT
|
|
120
|
+
MIT. See [LICENSE](https://github.com/veggerby/container-superposition/blob/main/LICENSE)
|