container-superposition 0.1.1
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 +843 -0
- package/dist/scripts/init.d.ts +3 -0
- package/dist/scripts/init.d.ts.map +1 -0
- package/dist/scripts/init.js +1190 -0
- package/dist/scripts/init.js.map +1 -0
- package/dist/scripts/migrate-to-manifests.d.ts +12 -0
- package/dist/scripts/migrate-to-manifests.d.ts.map +1 -0
- package/dist/scripts/migrate-to-manifests.js +230 -0
- package/dist/scripts/migrate-to-manifests.js.map +1 -0
- package/dist/tool/questionnaire/composer.d.ts +6 -0
- package/dist/tool/questionnaire/composer.d.ts.map +1 -0
- package/dist/tool/questionnaire/composer.js +1232 -0
- package/dist/tool/questionnaire/composer.js.map +1 -0
- package/dist/tool/readme/markdown-parser.d.ts +30 -0
- package/dist/tool/readme/markdown-parser.d.ts.map +1 -0
- package/dist/tool/readme/markdown-parser.js +139 -0
- package/dist/tool/readme/markdown-parser.js.map +1 -0
- package/dist/tool/readme/readme-generator.d.ts +9 -0
- package/dist/tool/readme/readme-generator.d.ts.map +1 -0
- package/dist/tool/readme/readme-generator.js +422 -0
- package/dist/tool/readme/readme-generator.js.map +1 -0
- package/dist/tool/schema/custom-loader.d.ts +17 -0
- package/dist/tool/schema/custom-loader.d.ts.map +1 -0
- package/dist/tool/schema/custom-loader.js +149 -0
- package/dist/tool/schema/custom-loader.js.map +1 -0
- package/dist/tool/schema/overlay-loader.d.ts +47 -0
- package/dist/tool/schema/overlay-loader.d.ts.map +1 -0
- package/dist/tool/schema/overlay-loader.js +252 -0
- package/dist/tool/schema/overlay-loader.js.map +1 -0
- package/dist/tool/schema/types.d.ts +212 -0
- package/dist/tool/schema/types.d.ts.map +1 -0
- package/dist/tool/schema/types.js +5 -0
- package/dist/tool/schema/types.js.map +1 -0
- package/docs/README.md +308 -0
- package/docs/architecture.md +233 -0
- package/docs/creating-overlays.md +549 -0
- package/docs/custom-patches.md +540 -0
- package/docs/dependencies.md +279 -0
- package/docs/examples/custom-patches-example.md +85 -0
- package/docs/examples.md +576 -0
- package/docs/messaging-comparison.md +265 -0
- package/docs/messaging-quick-start.md +385 -0
- package/docs/observability-workflow.md +537 -0
- package/docs/overlay-manifest-refactoring.md +214 -0
- package/docs/overlay-metadata-archive.md +54 -0
- package/docs/overlays.md +523 -0
- package/docs/presets-architecture.md +498 -0
- package/docs/presets.md +366 -0
- package/docs/publishing.md +476 -0
- package/docs/quick-reference.md +326 -0
- package/docs/ux.md +170 -0
- package/features/README.md +85 -0
- package/features/cross-distro-packages/README.md +146 -0
- package/features/cross-distro-packages/devcontainer-feature.json +20 -0
- package/features/cross-distro-packages/install.sh +58 -0
- package/features/local-secrets-manager/devcontainer-feature.json +18 -0
- package/features/local-secrets-manager/install.sh +127 -0
- package/features/project-scaffolder/devcontainer-feature.json +24 -0
- package/features/project-scaffolder/install.sh +100 -0
- package/features/team-conventions/devcontainer-feature.json +24 -0
- package/features/team-conventions/install.sh +93 -0
- package/overlays/.registry/README.md +14 -0
- package/overlays/.registry/base-images.yml +26 -0
- package/overlays/.registry/base-templates.yml +7 -0
- package/overlays/README.md +155 -0
- package/overlays/alertmanager/.env.example +5 -0
- package/overlays/alertmanager/README.md +465 -0
- package/overlays/alertmanager/alert-rules.yml +56 -0
- package/overlays/alertmanager/alertmanager.yml +42 -0
- package/overlays/alertmanager/devcontainer.patch.json +12 -0
- package/overlays/alertmanager/docker-compose.yml +20 -0
- package/overlays/alertmanager/overlay.yml +17 -0
- package/overlays/alertmanager/setup.sh +53 -0
- package/overlays/alertmanager/verify.sh +31 -0
- package/overlays/aws-cli/README.md +473 -0
- package/overlays/aws-cli/devcontainer.patch.json +13 -0
- package/overlays/aws-cli/overlay.yml +13 -0
- package/overlays/azure-cli/README.md +551 -0
- package/overlays/azure-cli/devcontainer.patch.json +8 -0
- package/overlays/azure-cli/overlay.yml +13 -0
- package/overlays/bun/README.md +312 -0
- package/overlays/bun/devcontainer.patch.json +41 -0
- package/overlays/bun/overlay.yml +16 -0
- package/overlays/bun/setup.sh +79 -0
- package/overlays/bun/verify.sh +30 -0
- package/overlays/codex/README.md +128 -0
- package/overlays/codex/devcontainer.patch.json +3 -0
- package/overlays/codex/overlay.yml +14 -0
- package/overlays/codex/setup.sh +24 -0
- package/overlays/codex/verify.sh +30 -0
- package/overlays/commitlint/README.md +333 -0
- package/overlays/commitlint/devcontainer.patch.json +8 -0
- package/overlays/commitlint/overlay.yml +16 -0
- package/overlays/commitlint/setup.sh +234 -0
- package/overlays/direnv/README.md +504 -0
- package/overlays/direnv/devcontainer.patch.json +6 -0
- package/overlays/direnv/overlay.yml +13 -0
- package/overlays/direnv/setup.sh +139 -0
- package/overlays/docker-in-docker/README.md +534 -0
- package/overlays/docker-in-docker/devcontainer.patch.json +10 -0
- package/overlays/docker-in-docker/overlay.yml +13 -0
- package/overlays/docker-sock/README.md +256 -0
- package/overlays/docker-sock/devcontainer.patch.json +9 -0
- package/overlays/docker-sock/docker-compose.yml +8 -0
- package/overlays/docker-sock/overlay.yml +13 -0
- package/overlays/dotnet/README.md +147 -0
- package/overlays/dotnet/devcontainer.patch.json +51 -0
- package/overlays/dotnet/global-tools.txt +24 -0
- package/overlays/dotnet/overlay.yml +13 -0
- package/overlays/dotnet/setup.sh +51 -0
- package/overlays/dotnet/verify.sh +26 -0
- package/overlays/gcloud/README.md +269 -0
- package/overlays/gcloud/devcontainer.patch.json +14 -0
- package/overlays/gcloud/overlay.yml +14 -0
- package/overlays/gcloud/verify.sh +52 -0
- package/overlays/git-helpers/README.md +168 -0
- package/overlays/git-helpers/devcontainer.patch.json +33 -0
- package/overlays/git-helpers/overlay.yml +15 -0
- package/overlays/git-helpers/setup.sh +91 -0
- package/overlays/go/README.md +293 -0
- package/overlays/go/devcontainer.patch.json +43 -0
- package/overlays/go/overlay.yml +15 -0
- package/overlays/go/setup.sh +33 -0
- package/overlays/go/verify.sh +40 -0
- package/overlays/grafana/.env.example +9 -0
- package/overlays/grafana/README.md +462 -0
- package/overlays/grafana/dashboard-provider.yml +11 -0
- package/overlays/grafana/dashboards/observability-overview.json +263 -0
- package/overlays/grafana/devcontainer.patch.json +12 -0
- package/overlays/grafana/docker-compose.yml +27 -0
- package/overlays/grafana/grafana-datasources.yml +57 -0
- package/overlays/grafana/overlay.yml +21 -0
- package/overlays/grafana/verify.sh +34 -0
- package/overlays/jaeger/.env.example +7 -0
- package/overlays/jaeger/README.md +867 -0
- package/overlays/jaeger/devcontainer.patch.json +12 -0
- package/overlays/jaeger/docker-compose.yml +17 -0
- package/overlays/jaeger/overlay.yml +19 -0
- package/overlays/java/README.md +267 -0
- package/overlays/java/devcontainer.patch.json +44 -0
- package/overlays/java/overlay.yml +16 -0
- package/overlays/java/setup.sh +41 -0
- package/overlays/java/verify.sh +42 -0
- package/overlays/just/README.md +443 -0
- package/overlays/just/devcontainer.patch.json +3 -0
- package/overlays/just/overlay.yml +13 -0
- package/overlays/just/setup.sh +182 -0
- package/overlays/kubectl-helm/README.md +660 -0
- package/overlays/kubectl-helm/devcontainer.patch.json +10 -0
- package/overlays/kubectl-helm/overlay.yml +13 -0
- package/overlays/loki/.env.example +5 -0
- package/overlays/loki/README.md +1156 -0
- package/overlays/loki/devcontainer.patch.json +12 -0
- package/overlays/loki/docker-compose.yml +18 -0
- package/overlays/loki/loki-config.yaml +45 -0
- package/overlays/loki/overlay.yml +17 -0
- package/overlays/minio/.env.example +9 -0
- package/overlays/minio/README.md +639 -0
- package/overlays/minio/devcontainer.patch.json +30 -0
- package/overlays/minio/docker-compose.yml +28 -0
- package/overlays/minio/overlay.yml +18 -0
- package/overlays/minio/setup.sh +61 -0
- package/overlays/minio/verify.sh +64 -0
- package/overlays/mkdocs/README.md +309 -0
- package/overlays/mkdocs/devcontainer.patch.json +24 -0
- package/overlays/mkdocs/overlay.yml +15 -0
- package/overlays/modern-cli-tools/README.md +556 -0
- package/overlays/modern-cli-tools/devcontainer.patch.json +3 -0
- package/overlays/modern-cli-tools/overlay.yml +13 -0
- package/overlays/modern-cli-tools/setup.sh +153 -0
- package/overlays/mongodb/.env.example +9 -0
- package/overlays/mongodb/README.md +481 -0
- package/overlays/mongodb/devcontainer.patch.json +32 -0
- package/overlays/mongodb/docker-compose.yml +44 -0
- package/overlays/mongodb/overlay.yml +17 -0
- package/overlays/mongodb/verify.sh +48 -0
- package/overlays/mysql/.env.example +11 -0
- package/overlays/mysql/README.md +542 -0
- package/overlays/mysql/devcontainer.patch.json +34 -0
- package/overlays/mysql/docker-compose.yml +55 -0
- package/overlays/mysql/overlay.yml +16 -0
- package/overlays/mysql/verify.sh +48 -0
- package/overlays/nats/.env.example +5 -0
- package/overlays/nats/README.md +762 -0
- package/overlays/nats/devcontainer.patch.json +24 -0
- package/overlays/nats/docker-compose.yml +31 -0
- package/overlays/nats/overlay.yml +18 -0
- package/overlays/nats/verify.sh +50 -0
- package/overlays/ngrok/README.md +503 -0
- package/overlays/ngrok/devcontainer.patch.json +3 -0
- package/overlays/ngrok/overlay.yml +14 -0
- package/overlays/ngrok/setup.sh +125 -0
- package/overlays/nodejs/README.md +192 -0
- package/overlays/nodejs/devcontainer.patch.json +49 -0
- package/overlays/nodejs/global-packages.txt +16 -0
- package/overlays/nodejs/overlay.yml +14 -0
- package/overlays/nodejs/setup.sh +46 -0
- package/overlays/nodejs/verify.sh +32 -0
- package/overlays/otel-collector/.env.example +9 -0
- package/overlays/otel-collector/README.md +1257 -0
- package/overlays/otel-collector/devcontainer.patch.json +28 -0
- package/overlays/otel-collector/docker-compose.yml +22 -0
- package/overlays/otel-collector/otel-collector-config.yaml +68 -0
- package/overlays/otel-collector/overlay.yml +21 -0
- package/overlays/otel-collector/setup.sh +49 -0
- package/overlays/otel-demo-nodejs/.env.example +2 -0
- package/overlays/otel-demo-nodejs/Dockerfile-otel-demo-nodejs +17 -0
- package/overlays/otel-demo-nodejs/README.md +409 -0
- package/overlays/otel-demo-nodejs/devcontainer.patch.json +12 -0
- package/overlays/otel-demo-nodejs/docker-compose.yml +19 -0
- package/overlays/otel-demo-nodejs/overlay.yml +23 -0
- package/overlays/otel-demo-nodejs/package-otel-demo-nodejs.json +20 -0
- package/overlays/otel-demo-nodejs/server-otel-demo-nodejs.js +259 -0
- package/overlays/otel-demo-nodejs/tracing-otel-demo-nodejs.js +57 -0
- package/overlays/otel-demo-nodejs/verify.sh +31 -0
- package/overlays/otel-demo-python/.env.example +2 -0
- package/overlays/otel-demo-python/Dockerfile-otel-demo-python +16 -0
- package/overlays/otel-demo-python/README.md +82 -0
- package/overlays/otel-demo-python/app-otel-demo-python.py +208 -0
- package/overlays/otel-demo-python/devcontainer.patch.json +12 -0
- package/overlays/otel-demo-python/docker-compose.yml +19 -0
- package/overlays/otel-demo-python/overlay.yml +23 -0
- package/overlays/otel-demo-python/requirements-otel-demo-python.txt +4 -0
- package/overlays/otel-demo-python/verify.sh +31 -0
- package/overlays/playwright/README.md +629 -0
- package/overlays/playwright/devcontainer.patch.json +9 -0
- package/overlays/playwright/overlay.yml +13 -0
- package/overlays/postgres/.env.example +6 -0
- package/overlays/postgres/README.md +602 -0
- package/overlays/postgres/devcontainer.patch.json +21 -0
- package/overlays/postgres/docker-compose.yml +22 -0
- package/overlays/postgres/overlay.yml +15 -0
- package/overlays/postgres/verify.sh +45 -0
- package/overlays/powershell/README.md +314 -0
- package/overlays/powershell/devcontainer.patch.json +22 -0
- package/overlays/powershell/overlay.yml +13 -0
- package/overlays/powershell/setup.sh +29 -0
- package/overlays/powershell/verify.sh +38 -0
- package/overlays/pre-commit/README.md +263 -0
- package/overlays/pre-commit/devcontainer.patch.json +9 -0
- package/overlays/pre-commit/overlay.yml +16 -0
- package/overlays/pre-commit/setup.sh +129 -0
- package/overlays/presets/docs-site.yml +118 -0
- package/overlays/presets/fullstack.yml +181 -0
- package/overlays/presets/microservice.yml +118 -0
- package/overlays/presets/web-api.yml +109 -0
- package/overlays/prometheus/.env.example +5 -0
- package/overlays/prometheus/README.md +1246 -0
- package/overlays/prometheus/devcontainer.patch.json +12 -0
- package/overlays/prometheus/docker-compose.yml +22 -0
- package/overlays/prometheus/overlay.yml +17 -0
- package/overlays/prometheus/prometheus.yml +12 -0
- package/overlays/prometheus/verify.sh +34 -0
- package/overlays/promtail/.env.example +2 -0
- package/overlays/promtail/README.md +357 -0
- package/overlays/promtail/devcontainer.patch.json +5 -0
- package/overlays/promtail/docker-compose.yml +16 -0
- package/overlays/promtail/overlay.yml +17 -0
- package/overlays/promtail/promtail-config.yaml +60 -0
- package/overlays/promtail/verify.sh +31 -0
- package/overlays/pulumi/README.md +472 -0
- package/overlays/pulumi/devcontainer.patch.json +13 -0
- package/overlays/pulumi/overlay.yml +14 -0
- package/overlays/pulumi/verify.sh +31 -0
- package/overlays/python/README.md +919 -0
- package/overlays/python/devcontainer.patch.json +41 -0
- package/overlays/python/overlay.yml +12 -0
- package/overlays/python/requirements-overlay.txt +13 -0
- package/overlays/python/setup.sh +47 -0
- package/overlays/python/verify.sh +32 -0
- package/overlays/rabbitmq/.env.example +7 -0
- package/overlays/rabbitmq/README.md +680 -0
- package/overlays/rabbitmq/devcontainer.patch.json +28 -0
- package/overlays/rabbitmq/docker-compose.yml +30 -0
- package/overlays/rabbitmq/overlay.yml +18 -0
- package/overlays/rabbitmq/verify.sh +41 -0
- package/overlays/redis/.env.example +4 -0
- package/overlays/redis/README.md +776 -0
- package/overlays/redis/devcontainer.patch.json +21 -0
- package/overlays/redis/docker-compose.yml +21 -0
- package/overlays/redis/overlay.yml +15 -0
- package/overlays/redis/verify.sh +41 -0
- package/overlays/redpanda/.env.example +10 -0
- package/overlays/redpanda/README.md +703 -0
- package/overlays/redpanda/devcontainer.patch.json +37 -0
- package/overlays/redpanda/docker-compose.yml +67 -0
- package/overlays/redpanda/overlay.yml +21 -0
- package/overlays/redpanda/verify.sh +48 -0
- package/overlays/rust/README.md +299 -0
- package/overlays/rust/devcontainer.patch.json +39 -0
- package/overlays/rust/overlay.yml +15 -0
- package/overlays/rust/setup.sh +36 -0
- package/overlays/rust/verify.sh +51 -0
- package/overlays/sqlite/README.md +584 -0
- package/overlays/sqlite/devcontainer.patch.json +14 -0
- package/overlays/sqlite/overlay.yml +15 -0
- package/overlays/sqlite/setup.sh +27 -0
- package/overlays/sqlite/verify.sh +43 -0
- package/overlays/sqlserver/.env.example +6 -0
- package/overlays/sqlserver/README.md +592 -0
- package/overlays/sqlserver/devcontainer.patch.json +22 -0
- package/overlays/sqlserver/docker-compose.yml +32 -0
- package/overlays/sqlserver/overlay.yml +17 -0
- package/overlays/sqlserver/verify.sh +30 -0
- package/overlays/tempo/.env.example +5 -0
- package/overlays/tempo/README.md +273 -0
- package/overlays/tempo/devcontainer.patch.json +12 -0
- package/overlays/tempo/docker-compose.yml +20 -0
- package/overlays/tempo/overlay.yml +20 -0
- package/overlays/tempo/tempo-config.yaml +32 -0
- package/overlays/tempo/verify.sh +31 -0
- package/overlays/terraform/README.md +389 -0
- package/overlays/terraform/devcontainer.patch.json +15 -0
- package/overlays/terraform/overlay.yml +14 -0
- package/overlays/terraform/verify.sh +63 -0
- package/package.json +74 -0
- package/templates/README.md +285 -0
- package/templates/compose/.devcontainer/devcontainer.json +46 -0
- package/templates/compose/.devcontainer/docker-compose.yml +12 -0
- package/templates/compose/README.md +20 -0
- package/templates/plain/.devcontainer/devcontainer.json +35 -0
- package/templates/plain/README.md +21 -0
- package/tool/README.md +281 -0
- package/tool/schema/base-images.schema.json +43 -0
- package/tool/schema/base-templates.schema.json +34 -0
- package/tool/schema/config.schema.json +71 -0
- package/tool/schema/overlay-manifest.schema.json +86 -0
package/docs/examples.md
ADDED
|
@@ -0,0 +1,576 @@
|
|
|
1
|
+
# Usage Examples
|
|
2
|
+
|
|
3
|
+
Common usage patterns for the init tool.
|
|
4
|
+
|
|
5
|
+
## Interactive Mode
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm run init
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Follow the prompts to select your stack, database, tools, and output location.
|
|
12
|
+
|
|
13
|
+
## Non-Interactive Examples
|
|
14
|
+
|
|
15
|
+
### .NET with PostgreSQL
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npm run init -- --stack compose --language dotnet --postgres --output ./.devcontainer
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Creates:
|
|
22
|
+
|
|
23
|
+
- Docker Compose base template
|
|
24
|
+
- .NET 10 SDK and C# DevKit
|
|
25
|
+
- PostgreSQL 16 service
|
|
26
|
+
- Database client tools
|
|
27
|
+
- Environment variables for connection
|
|
28
|
+
|
|
29
|
+
### Node.js API with Observability
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
npm run init -- \
|
|
33
|
+
--stack compose \
|
|
34
|
+
--language nodejs \
|
|
35
|
+
--postgres \
|
|
36
|
+
--observability otel-collector,jaeger,prometheus,grafana
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Creates:
|
|
40
|
+
|
|
41
|
+
- Docker Compose infrastructure
|
|
42
|
+
- Node.js LTS with TypeScript
|
|
43
|
+
- PostgreSQL database
|
|
44
|
+
- OpenTelemetry Collector pipeline
|
|
45
|
+
- Jaeger for distributed tracing
|
|
46
|
+
- Prometheus for metrics
|
|
47
|
+
- Grafana for visualization
|
|
48
|
+
|
|
49
|
+
### Full Observability Stack
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
npm run init -- \
|
|
53
|
+
--stack compose \
|
|
54
|
+
--language dotnet \
|
|
55
|
+
--database postgres+redis \
|
|
56
|
+
--observability otel-collector,jaeger,prometheus,grafana,loki \
|
|
57
|
+
--cloud-tools aws-cli,kubectl-helm
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Creates:
|
|
61
|
+
|
|
62
|
+
- Docker Compose infrastructure
|
|
63
|
+
- .NET microservice setup
|
|
64
|
+
- PostgreSQL and Redis
|
|
65
|
+
- Complete observability stack (traces, metrics, logs)
|
|
66
|
+
- AWS CLI and Kubernetes tools
|
|
67
|
+
|
|
68
|
+
### Minimal Documentation Site
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
npm run init -- --stack plain --language mkdocs --output ./my-docs/.devcontainer
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Creates:
|
|
75
|
+
|
|
76
|
+
- Simple image-based devcontainer
|
|
77
|
+
- Python with MkDocs
|
|
78
|
+
- Documentation tools
|
|
79
|
+
- Minimal configuration
|
|
80
|
+
|
|
81
|
+
### Multi-Cloud Python Development
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
npm run init -- \
|
|
85
|
+
--stack compose \
|
|
86
|
+
--language python \
|
|
87
|
+
--postgres \
|
|
88
|
+
--cloud-tools aws-cli,azure-cli,kubectl-helm
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Creates:
|
|
92
|
+
|
|
93
|
+
- Docker Compose base
|
|
94
|
+
- Python 3.12 with linting
|
|
95
|
+
- PostgreSQL database
|
|
96
|
+
- AWS, Azure, and Kubernetes CLIs
|
|
97
|
+
|
|
98
|
+
## Programmatic Usage
|
|
99
|
+
|
|
100
|
+
```javascript
|
|
101
|
+
import { composeDevContainer } from './tool/questionnaire/composer.js';
|
|
102
|
+
|
|
103
|
+
await composeDevContainer({
|
|
104
|
+
stack: 'compose',
|
|
105
|
+
baseImage: 'bookworm',
|
|
106
|
+
language: ['dotnet'],
|
|
107
|
+
needsDocker: true,
|
|
108
|
+
database: 'postgres',
|
|
109
|
+
playwright: false,
|
|
110
|
+
observability: ['otel-collector', 'jaeger', 'prometheus', 'grafana'],
|
|
111
|
+
cloudTools: ['aws-cli'],
|
|
112
|
+
devTools: [],
|
|
113
|
+
outputPath: './.devcontainer',
|
|
114
|
+
});
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Output Structure
|
|
118
|
+
|
|
119
|
+
All examples produce:
|
|
120
|
+
|
|
121
|
+
```
|
|
122
|
+
.devcontainer/
|
|
123
|
+
├── devcontainer.json # Merged configuration
|
|
124
|
+
├── docker-compose.yml # Base compose (if compose template)
|
|
125
|
+
├── .env.example # Combined environment variables
|
|
126
|
+
├── scripts/
|
|
127
|
+
│ └── post_create.sh # Setup scripts
|
|
128
|
+
├── docker-compose.postgres.yml # If postgres selected
|
|
129
|
+
├── docker-compose.redis.yml # If redis selected
|
|
130
|
+
├── docker-compose.otel-collector.yml # If otel-collector selected
|
|
131
|
+
├── docker-compose.jaeger.yml # If jaeger selected
|
|
132
|
+
├── docker-compose.prometheus.yml # If prometheus selected
|
|
133
|
+
├── docker-compose.grafana.yml # If grafana selected
|
|
134
|
+
├── docker-compose.loki.yml # If loki selected
|
|
135
|
+
├── otel-collector-config.yaml # Observability configs
|
|
136
|
+
├── prometheus.yml
|
|
137
|
+
├── grafana-datasources.yml
|
|
138
|
+
└── loki-config.yaml
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
## Customization After Generation
|
|
142
|
+
|
|
143
|
+
The output is plain JSON - edit directly:
|
|
144
|
+
|
|
145
|
+
```jsonc
|
|
146
|
+
// .devcontainer/devcontainer.json
|
|
147
|
+
{
|
|
148
|
+
"name": "My Custom Name", // Change this
|
|
149
|
+
"features": {
|
|
150
|
+
// Add/remove features
|
|
151
|
+
"ghcr.io/devcontainers/features/go:1": {},
|
|
152
|
+
},
|
|
153
|
+
"forwardPorts": [3000, 8080], // Adjust ports
|
|
154
|
+
"remoteEnv": {
|
|
155
|
+
"MY_VAR": "value", // Add environment variables
|
|
156
|
+
},
|
|
157
|
+
}
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
The tool gets you started—you customize from there.
|
|
161
|
+
|
|
162
|
+
## Help and Documentation
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
# Show all options
|
|
166
|
+
npm run init -- --help
|
|
167
|
+
|
|
168
|
+
# Show version
|
|
169
|
+
npm run init -- --version
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## Common Patterns
|
|
173
|
+
|
|
174
|
+
### Microservice with Full Observability
|
|
175
|
+
|
|
176
|
+
Production-ready microservice with complete observability:
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
npm run init -- \
|
|
180
|
+
--stack compose \
|
|
181
|
+
--language dotnet \
|
|
182
|
+
--postgres \
|
|
183
|
+
--observability otel-collector,jaeger,prometheus,grafana,loki \
|
|
184
|
+
--cloud-tools kubectl-helm
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
This creates:
|
|
188
|
+
|
|
189
|
+
- .NET microservice with Docker Compose
|
|
190
|
+
- PostgreSQL database
|
|
191
|
+
- OpenTelemetry pipeline (collector → jaeger/prometheus/loki → grafana)
|
|
192
|
+
- Kubernetes deployment tools
|
|
193
|
+
- Complete local development environment matching production
|
|
194
|
+
|
|
195
|
+
### Frontend Application with Testing
|
|
196
|
+
|
|
197
|
+
Common for frontend applications:
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
npm run init -- \
|
|
201
|
+
--stack compose \
|
|
202
|
+
--language nodejs \
|
|
203
|
+
--redis \
|
|
204
|
+
--dev-tools playwright
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### Backend API with Metrics Only
|
|
208
|
+
|
|
209
|
+
Lightweight observability for REST APIs:
|
|
210
|
+
|
|
211
|
+
```bash
|
|
212
|
+
npm run init -- \
|
|
213
|
+
--stack compose \
|
|
214
|
+
--language nodejs \
|
|
215
|
+
--postgres \
|
|
216
|
+
--observability prometheus,grafana
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
### Distributed Tracing Setup
|
|
220
|
+
|
|
221
|
+
Focus on distributed tracing without full observability:
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
npm run init -- \
|
|
225
|
+
--stack compose \
|
|
226
|
+
--language dotnet \
|
|
227
|
+
--database postgres+redis \
|
|
228
|
+
--observability otel-collector,jaeger
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### Documentation Sites
|
|
232
|
+
|
|
233
|
+
For documentation projects:
|
|
234
|
+
|
|
235
|
+
```bash
|
|
236
|
+
npm run init -- --stack plain --language mkdocs
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
### Multi-Cloud Python Development
|
|
240
|
+
|
|
241
|
+
For Python projects targeting multiple clouds:
|
|
242
|
+
|
|
243
|
+
```bash
|
|
244
|
+
npm run init -- \
|
|
245
|
+
--stack compose \
|
|
246
|
+
--language python \
|
|
247
|
+
--postgres \
|
|
248
|
+
--cloud-tools aws-cli,azure-cli,kubectl-helm
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
## Observability Stack Combinations
|
|
252
|
+
|
|
253
|
+
### Minimal (Traces Only)
|
|
254
|
+
|
|
255
|
+
```bash
|
|
256
|
+
--observability jaeger
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
Direct tracing without collector.
|
|
260
|
+
|
|
261
|
+
### Minimal (Metrics Only)
|
|
262
|
+
|
|
263
|
+
```bash
|
|
264
|
+
--observability prometheus,grafana
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
Metrics collection and visualization.
|
|
268
|
+
|
|
269
|
+
### Standard (Traces + Metrics)
|
|
270
|
+
|
|
271
|
+
```bash
|
|
272
|
+
--observability otel-collector,jaeger,prometheus,grafana
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
Complete telemetry pipeline for traces and metrics.
|
|
276
|
+
|
|
277
|
+
### Complete (Traces + Metrics + Logs)
|
|
278
|
+
|
|
279
|
+
```bash
|
|
280
|
+
--observability otel-collector,jaeger,prometheus,grafana,loki
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
Full observability stack with centralized logging.
|
|
284
|
+
|
|
285
|
+
## Service Dependencies
|
|
286
|
+
|
|
287
|
+
The system handles dependencies automatically. For example, if you select:
|
|
288
|
+
|
|
289
|
+
```bash
|
|
290
|
+
--observability otel-collector,prometheus,grafana
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
The generated `docker-compose.yml` will include:
|
|
294
|
+
|
|
295
|
+
```yaml
|
|
296
|
+
services:
|
|
297
|
+
prometheus:
|
|
298
|
+
# starts first
|
|
299
|
+
|
|
300
|
+
otel-collector:
|
|
301
|
+
depends_on:
|
|
302
|
+
- prometheus # waits for prometheus
|
|
303
|
+
|
|
304
|
+
grafana:
|
|
305
|
+
depends_on:
|
|
306
|
+
- prometheus # waits for prometheus
|
|
307
|
+
|
|
308
|
+
devcontainer:
|
|
309
|
+
depends_on:
|
|
310
|
+
- otel-collector # waits for otel-collector
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
Services start in the correct order automatically!
|
|
314
|
+
|
|
315
|
+
## Adding Custom Configuration Files
|
|
316
|
+
|
|
317
|
+
Overlays can include additional configuration files that are automatically copied to your output. For example:
|
|
318
|
+
|
|
319
|
+
### Creating an Overlay with Config Files
|
|
320
|
+
|
|
321
|
+
```
|
|
322
|
+
overlays/my-service/
|
|
323
|
+
├── devcontainer.patch.json # DevContainer configuration
|
|
324
|
+
├── docker-compose.yml # Service definition
|
|
325
|
+
├── .env.example # Environment variables
|
|
326
|
+
├── otel-collector.yml # OpenTelemetry configuration
|
|
327
|
+
└── config/
|
|
328
|
+
├── nginx.conf # Nginx configuration
|
|
329
|
+
└── app-settings.json # Application settings
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
When you select this overlay, **all files** (except `devcontainer.patch.json` and `.env.example`) are copied to your output:
|
|
333
|
+
|
|
334
|
+
```
|
|
335
|
+
.devcontainer/
|
|
336
|
+
├── devcontainer.json
|
|
337
|
+
├── .env.example # Merged from all selected overlays
|
|
338
|
+
├── docker-compose.my-service.yml
|
|
339
|
+
├── otel-collector.yml # Copied from overlay
|
|
340
|
+
└── config/
|
|
341
|
+
├── nginx.conf # Copied from overlay
|
|
342
|
+
└── app-settings.json # Copied from overlay
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
### Environment Variables per Overlay
|
|
346
|
+
|
|
347
|
+
Each overlay provides its own `.env.example` with relevant variables:
|
|
348
|
+
|
|
349
|
+
**postgres/.env.example:**
|
|
350
|
+
|
|
351
|
+
```bash
|
|
352
|
+
POSTGRES_VERSION=16
|
|
353
|
+
POSTGRES_DB=devdb
|
|
354
|
+
POSTGRES_PASSWORD=postgres
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
**redis/.env.example:**
|
|
358
|
+
|
|
359
|
+
```bash
|
|
360
|
+
REDIS_VERSION=7
|
|
361
|
+
REDIS_PORT=6379
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
**Combined output .env.example:**
|
|
365
|
+
|
|
366
|
+
```bash
|
|
367
|
+
# Environment Variables
|
|
368
|
+
# Generated by container-superposition init tool
|
|
369
|
+
|
|
370
|
+
# PostgreSQL Configuration
|
|
371
|
+
POSTGRES_VERSION=16
|
|
372
|
+
POSTGRES_DB=devdb
|
|
373
|
+
POSTGRES_PASSWORD=postgres
|
|
374
|
+
|
|
375
|
+
# Redis Configuration
|
|
376
|
+
REDIS_VERSION=7
|
|
377
|
+
REDIS_PORT=6379
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
Copy `.env.example` to `.env` and customize for your needs.
|
|
381
|
+
|
|
382
|
+
## Manifest Regeneration Examples
|
|
383
|
+
|
|
384
|
+
Every generation creates a `superposition.json` manifest file that records your configuration. Use it to iterate on your setup, update to latest versions, or experiment safely.
|
|
385
|
+
|
|
386
|
+
### Basic Workflow: Iterating on Configuration
|
|
387
|
+
|
|
388
|
+
```bash
|
|
389
|
+
# 1. Initial setup - Start simple
|
|
390
|
+
npm run init -- --stack compose --language nodejs --database postgres
|
|
391
|
+
# Creates .devcontainer/ and superposition.json
|
|
392
|
+
|
|
393
|
+
# 2. Verify it works
|
|
394
|
+
code .
|
|
395
|
+
# Dev Containers: Reopen in Container
|
|
396
|
+
|
|
397
|
+
# 3. Later: Add Redis and observability
|
|
398
|
+
npm run init -- --from-manifest ./superposition.json
|
|
399
|
+
# Questionnaire appears with nodejs and postgres already selected
|
|
400
|
+
# Add: redis, otel-collector, prometheus, grafana
|
|
401
|
+
# Original .devcontainer/ automatically backed up to .devcontainer.backup-{timestamp}/
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
**What happens:**
|
|
405
|
+
|
|
406
|
+
- Previous selections (nodejs, postgres) pre-selected in questionnaire
|
|
407
|
+
- You modify the selection (add redis, observability tools)
|
|
408
|
+
- Original devcontainer backed up with timestamp
|
|
409
|
+
- New devcontainer generated with updated selections
|
|
410
|
+
- New superposition.json reflects current configuration
|
|
411
|
+
|
|
412
|
+
### Non-Interactive Regeneration
|
|
413
|
+
|
|
414
|
+
Regenerate exact same setup (useful for updating to latest overlay versions):
|
|
415
|
+
|
|
416
|
+
```bash
|
|
417
|
+
# Regenerate with exact same selections, skip confirmation, no backup
|
|
418
|
+
npm run init -- --from-manifest ./superposition.json --yes --no-backup
|
|
419
|
+
```
|
|
420
|
+
|
|
421
|
+
**Use cases:**
|
|
422
|
+
|
|
423
|
+
- **CI/CD**: Regenerate template from manifest in pipeline
|
|
424
|
+
- **Updates**: Get latest overlay versions without manual re-selection
|
|
425
|
+
- **Testing**: Quickly regenerate after overlay changes
|
|
426
|
+
|
|
427
|
+
### Switching Languages
|
|
428
|
+
|
|
429
|
+
```bash
|
|
430
|
+
# Started with Node.js
|
|
431
|
+
npm run init -- --stack compose --language nodejs --database postgres
|
|
432
|
+
|
|
433
|
+
# Switch to Python
|
|
434
|
+
npm run init -- --from-manifest ./superposition.json
|
|
435
|
+
# In questionnaire:
|
|
436
|
+
# - Deselect nodejs
|
|
437
|
+
# - Select python
|
|
438
|
+
# - Keep postgres (already selected)
|
|
439
|
+
# Regenerate
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
### Adding Observability to Existing Setup
|
|
443
|
+
|
|
444
|
+
```bash
|
|
445
|
+
# Initial minimal setup
|
|
446
|
+
npm run init -- --stack compose --language dotnet --database postgres,redis
|
|
447
|
+
|
|
448
|
+
# Add full observability stack
|
|
449
|
+
npm run init -- --from-manifest ./superposition.json
|
|
450
|
+
# Add: otel-collector, jaeger, prometheus, grafana, loki
|
|
451
|
+
# All existing selections preserved
|
|
452
|
+
```
|
|
453
|
+
|
|
454
|
+
### Team Workflow: Sharing Configurations
|
|
455
|
+
|
|
456
|
+
```bash
|
|
457
|
+
# Developer 1: Create and commit manifest
|
|
458
|
+
npm run init -- --stack compose --language nodejs --database postgres --observability prometheus,grafana
|
|
459
|
+
git add superposition.json .devcontainer/
|
|
460
|
+
git commit -m "Add devcontainer configuration"
|
|
461
|
+
git push
|
|
462
|
+
|
|
463
|
+
# Developer 2: Clone and regenerate from manifest
|
|
464
|
+
git clone <repo>
|
|
465
|
+
npm install
|
|
466
|
+
npm run init -- --from-manifest ./superposition.json --yes
|
|
467
|
+
# Gets exact same devcontainer setup
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
### Custom Backup Location
|
|
471
|
+
|
|
472
|
+
```bash
|
|
473
|
+
# Backup to custom directory
|
|
474
|
+
npm run init -- --from-manifest ./superposition.json --backup-dir ../backups/
|
|
475
|
+
# Creates backup in ../backups/.devcontainer.backup-{timestamp}/
|
|
476
|
+
```
|
|
477
|
+
|
|
478
|
+
### Manifest Fields Preserved
|
|
479
|
+
|
|
480
|
+
The manifest stores and restores:
|
|
481
|
+
|
|
482
|
+
```json
|
|
483
|
+
{
|
|
484
|
+
"version": "0.1.0",
|
|
485
|
+
"generated": "2026-02-08T10:00:00Z",
|
|
486
|
+
"baseTemplate": "compose",
|
|
487
|
+
"baseImage": "bookworm",
|
|
488
|
+
"overlays": ["nodejs", "postgres", "redis"],
|
|
489
|
+
"portOffset": 100,
|
|
490
|
+
"preset": "web-api",
|
|
491
|
+
"presetChoices": { "language": "nodejs" },
|
|
492
|
+
"containerName": "My API Project",
|
|
493
|
+
"outputPath": "./.devcontainer"
|
|
494
|
+
}
|
|
495
|
+
```
|
|
496
|
+
|
|
497
|
+
**Preserved on regeneration:**
|
|
498
|
+
|
|
499
|
+
- Base template selection (plain/compose)
|
|
500
|
+
- Base image selection
|
|
501
|
+
- All overlay selections
|
|
502
|
+
- Port offset
|
|
503
|
+
- Preset (if used) and preset choices
|
|
504
|
+
- Container name (from devcontainer.json)
|
|
505
|
+
- Output path
|
|
506
|
+
|
|
507
|
+
### Edge Cases Handled
|
|
508
|
+
|
|
509
|
+
**Missing overlays:**
|
|
510
|
+
|
|
511
|
+
```bash
|
|
512
|
+
# If manifest references overlays that no longer exist
|
|
513
|
+
npm run init -- --from-manifest ./superposition.json
|
|
514
|
+
# ⚠️ Warning: Some overlays from manifest no longer exist: old-overlay
|
|
515
|
+
# Continues with remaining valid overlays
|
|
516
|
+
```
|
|
517
|
+
|
|
518
|
+
**Version mismatch:**
|
|
519
|
+
|
|
520
|
+
```bash
|
|
521
|
+
# If manifest version differs
|
|
522
|
+
npm run init -- --from-manifest ./old-manifest.json
|
|
523
|
+
# ⚠️ Manifest version 0.0.5 may not be fully compatible with this tool
|
|
524
|
+
# Continues using manifest as-is
|
|
525
|
+
```
|
|
526
|
+
|
|
527
|
+
### Backup Management
|
|
528
|
+
|
|
529
|
+
**Default behavior:**
|
|
530
|
+
|
|
531
|
+
```bash
|
|
532
|
+
npm run init -- --from-manifest ./superposition.json
|
|
533
|
+
# Creates: .devcontainer.backup-2026-02-08-143022/
|
|
534
|
+
# Contains: devcontainer.json, docker-compose.yml, all scripts, features, etc.
|
|
535
|
+
```
|
|
536
|
+
|
|
537
|
+
**Backup patterns automatically added to project root `.gitignore`:**
|
|
538
|
+
|
|
539
|
+
```gitignore
|
|
540
|
+
# Container Superposition backups
|
|
541
|
+
.devcontainer.backup-*/
|
|
542
|
+
*.backup-*
|
|
543
|
+
superposition.json.backup-*
|
|
544
|
+
```
|
|
545
|
+
|
|
546
|
+
**Restore from backup:**
|
|
547
|
+
|
|
548
|
+
```bash
|
|
549
|
+
# If regeneration didn't work as expected, restore from backup
|
|
550
|
+
rm -rf .devcontainer
|
|
551
|
+
mv .devcontainer.backup-2026-02-08-143022 .devcontainer
|
|
552
|
+
# Or cherry-pick specific files from backup
|
|
553
|
+
cp .devcontainer.backup-2026-02-08-143022/devcontainer.json .devcontainer/
|
|
554
|
+
```
|
|
555
|
+
|
|
556
|
+
### Advanced: Multiple Environments
|
|
557
|
+
|
|
558
|
+
```bash
|
|
559
|
+
# Development environment
|
|
560
|
+
npm run init -- --stack compose --language nodejs --database postgres --output ./dev
|
|
561
|
+
mv dev/superposition.json dev-superposition.json
|
|
562
|
+
|
|
563
|
+
# Staging environment (more observability)
|
|
564
|
+
npm run init -- --from-manifest ./dev-superposition.json --output ./staging
|
|
565
|
+
# Add: otel-collector, jaeger, prometheus, grafana
|
|
566
|
+
mv staging/superposition.json staging-superposition.json
|
|
567
|
+
|
|
568
|
+
# Production environment (full stack)
|
|
569
|
+
npm run init -- --from-manifest ./staging-superposition.json --output ./prod
|
|
570
|
+
# Add: loki, redis for caching
|
|
571
|
+
mv prod/superposition.json prod-superposition.json
|
|
572
|
+
|
|
573
|
+
# Now you have three manifests for different environments
|
|
574
|
+
# Regenerate any environment from its manifest
|
|
575
|
+
npm run init -- --from-manifest ./dev-superposition.json --yes --output ./dev
|
|
576
|
+
```
|