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
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
# Quick Reference
|
|
2
|
+
|
|
3
|
+
## Base Images
|
|
4
|
+
|
|
5
|
+
| Image | ID | Use Case | Stability |
|
|
6
|
+
| ---------------------- | ---------- | ------------------------------------- | ------------ |
|
|
7
|
+
| **Debian Bookworm** ⭐ | `bookworm` | Production-ready, recommended default | Stable (LTS) |
|
|
8
|
+
| **Debian Trixie** | `trixie` | Newer packages for testing | Testing |
|
|
9
|
+
| **Custom Image** ⚠️ | `custom` | Specific requirements, may conflict | Varies |
|
|
10
|
+
|
|
11
|
+
**Default**: Debian Bookworm (`mcr.microsoft.com/devcontainers/base:bookworm`)
|
|
12
|
+
|
|
13
|
+
- Battle-tested in production
|
|
14
|
+
- Broad compatibility with all overlays
|
|
15
|
+
- Regular security updates
|
|
16
|
+
|
|
17
|
+
**When to use custom images**:
|
|
18
|
+
|
|
19
|
+
- Specific compliance requirements
|
|
20
|
+
- Organization-standardized base images
|
|
21
|
+
- Need for particular base OS (Ubuntu, Alpine, etc.)
|
|
22
|
+
|
|
23
|
+
⚠️ **Caution**: Custom images may require overlay configuration adjustments and thorough testing.
|
|
24
|
+
|
|
25
|
+
## Base Templates
|
|
26
|
+
|
|
27
|
+
| Template | Use Case | Contents |
|
|
28
|
+
| ----------- | ------------------ | ---------------------------------------------------- |
|
|
29
|
+
| **plain** | Simple projects | Minimal Debian image, git, zsh, basic tools |
|
|
30
|
+
| **compose** | Multi-service apps | Docker Compose, devcontainer service, devnet network |
|
|
31
|
+
|
|
32
|
+
## Interactive Overlay Selection
|
|
33
|
+
|
|
34
|
+
When running the questionnaire interactively, overlays are presented in a **categorized multi-select with dependency tracking**:
|
|
35
|
+
|
|
36
|
+
**Features**:
|
|
37
|
+
|
|
38
|
+
- 📋 **Categorized view** - Overlays grouped by category with visual separators
|
|
39
|
+
- ⚡ **Dependency auto-resolution** - Required dependencies automatically added
|
|
40
|
+
- ⚠️ **Conflict detection** - Post-selection conflict resolution UI
|
|
41
|
+
- 🔍 **Space to toggle** - Select/deselect individual overlays
|
|
42
|
+
- ✓ **Visual indicators** - Required dependencies marked with `(required)` in yellow
|
|
43
|
+
- 📊 **Stack compatibility** - Only shows overlays compatible with selected stack
|
|
44
|
+
|
|
45
|
+
**Keyboard workflow**:
|
|
46
|
+
|
|
47
|
+
- `↑/↓` - Navigate overlays
|
|
48
|
+
- `Space` - Toggle selection
|
|
49
|
+
- `Enter` - Confirm selection
|
|
50
|
+
|
|
51
|
+
**Dependency Resolution**:
|
|
52
|
+
|
|
53
|
+
- **Automatic**: Select Grafana → Prometheus auto-added (marked as required)
|
|
54
|
+
- **Recursive**: Dependencies of dependencies also auto-added
|
|
55
|
+
- **Post-selection**: Conflicts (e.g., docker-in-docker ↔ docker-sock) resolved after selection
|
|
56
|
+
|
|
57
|
+
**Example workflow**:
|
|
58
|
+
|
|
59
|
+
1. Select Node.js, PostgreSQL, Grafana
|
|
60
|
+
2. System auto-adds Prometheus (required by Grafana)
|
|
61
|
+
3. No conflicts → Configuration complete
|
|
62
|
+
4. If conflicts exist → Resolve conflicts UI appears
|
|
63
|
+
|
|
64
|
+
This ensures valid configurations without manual dependency tracking!
|
|
65
|
+
|
|
66
|
+
## Language Overlays
|
|
67
|
+
|
|
68
|
+
| Overlay | Version | Key Features | Extensions |
|
|
69
|
+
| ---------- | ----------- | ------------------------------- | -------------------------------------------- |
|
|
70
|
+
| **dotnet** | .NET 10 | C# DevKit, build tools, testing | C# DevKit, GUID generator, Nuke, REST Client |
|
|
71
|
+
| **nodejs** | Node LTS | TypeScript, npm/yarn | ESLint, Prettier, npm IntelliSense |
|
|
72
|
+
| **python** | Python 3.12 | pip, venv, dev tools | Pylance, Black, Ruff |
|
|
73
|
+
| **mkdocs** | Python 3.12 | MkDocs, Material theme | Markdown All-in-One, Markdownlint, Mermaid |
|
|
74
|
+
|
|
75
|
+
## Database Overlays
|
|
76
|
+
|
|
77
|
+
| Overlay | Version | Ports | Environment Variables |
|
|
78
|
+
| ------------ | ------- | ----- | --------------------------------------------- |
|
|
79
|
+
| **postgres** | 16 | 5432 | POSTGRES_DB, POSTGRES_USER, POSTGRES_PASSWORD |
|
|
80
|
+
| **redis** | 7 | 6379 | REDIS_PASSWORD (optional) |
|
|
81
|
+
|
|
82
|
+
## Observability Overlays
|
|
83
|
+
|
|
84
|
+
| Overlay | Purpose | Ports | Dependencies |
|
|
85
|
+
| ------------------ | ------------------- | ------------------------------------------- | --------------------- |
|
|
86
|
+
| **otel-collector** | Telemetry pipeline | 4317 (gRPC), 4318 (HTTP), 8889 (Prometheus) | - |
|
|
87
|
+
| **jaeger** | Distributed tracing | 16686 (UI), 14250 (model.proto) | - |
|
|
88
|
+
| **prometheus** | Metrics collection | 9090 | - |
|
|
89
|
+
| **grafana** | Visualization | 3000 | prometheus (required) |
|
|
90
|
+
| **loki** | Log aggregation | 3100 | - |
|
|
91
|
+
|
|
92
|
+
### Observability Stack Combinations
|
|
93
|
+
|
|
94
|
+
| Stack | Use Case | Command |
|
|
95
|
+
| ---------------- | ---------------------- | --------------------------------------------------------------- |
|
|
96
|
+
| **Traces Only** | Distributed tracing | `--observability jaeger` |
|
|
97
|
+
| **Metrics Only** | Performance monitoring | `--observability prometheus,grafana` |
|
|
98
|
+
| **Standard** | Traces + Metrics | `--observability otel-collector,jaeger,prometheus,grafana` |
|
|
99
|
+
| **Complete** | Full observability | `--observability otel-collector,jaeger,prometheus,grafana,loki` |
|
|
100
|
+
|
|
101
|
+
## Cloud/DevOps Overlays
|
|
102
|
+
|
|
103
|
+
| Overlay | Tools | Extensions |
|
|
104
|
+
| ---------------- | ------------- | ------------------------------ |
|
|
105
|
+
| **aws-cli** | AWS CLI | AWS Toolkit |
|
|
106
|
+
| **azure-cli** | Azure CLI | Azure Account, Azure Resources |
|
|
107
|
+
| **kubectl-helm** | kubectl, Helm | Kubernetes |
|
|
108
|
+
|
|
109
|
+
## Development Tool Overlays
|
|
110
|
+
|
|
111
|
+
| Overlay | Purpose | Contents | Conflicts |
|
|
112
|
+
| -------------------- | ------------------------------ | ---------------------------- | ---------------- |
|
|
113
|
+
| **docker-in-docker** | Docker daemon inside container | Docker CLI, daemon | docker-sock |
|
|
114
|
+
| **docker-sock** | Docker socket mounting | Docker CLI, socket access | docker-in-docker |
|
|
115
|
+
| **playwright** | Browser testing | Playwright, Chromium | - |
|
|
116
|
+
| **codex** | AI code assistant | Codex tools and integrations | - |
|
|
117
|
+
|
|
118
|
+
## Service Startup Order
|
|
119
|
+
|
|
120
|
+
Services start in this order (controlled by `_serviceOrder`):
|
|
121
|
+
|
|
122
|
+
1. **Order 0** - Infrastructure: postgres, redis
|
|
123
|
+
2. **Order 1** - Observability backends: jaeger, prometheus, loki
|
|
124
|
+
3. **Order 2** - Middleware: otel-collector
|
|
125
|
+
4. **Order 3** - Visualization: grafana
|
|
126
|
+
5. **Last** - devcontainer (main application)
|
|
127
|
+
|
|
128
|
+
## Common Commands
|
|
129
|
+
|
|
130
|
+
### Interactive
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
npm run init
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Simple Scenarios
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
# Plain image with language
|
|
140
|
+
npm run init -- --stack plain --language python
|
|
141
|
+
|
|
142
|
+
# Compose with database
|
|
143
|
+
npm run init -- --stack compose --language nodejs --postgres
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Production-Ready
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
# Microservice with full observability
|
|
150
|
+
npm run init -- \
|
|
151
|
+
--stack compose \
|
|
152
|
+
--language dotnet \
|
|
153
|
+
--database postgres+redis \
|
|
154
|
+
--observability otel-collector,jaeger,prometheus,grafana,loki \
|
|
155
|
+
--cloud-tools kubectl-helm
|
|
156
|
+
|
|
157
|
+
# Multi-cloud development
|
|
158
|
+
npm run init -- \
|
|
159
|
+
--stack compose \
|
|
160
|
+
--language python \
|
|
161
|
+
--postgres \
|
|
162
|
+
--cloud-tools aws-cli,azure-cli,kubectl-helm
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## Output Structure
|
|
166
|
+
|
|
167
|
+
### Minimal (plain + language)
|
|
168
|
+
|
|
169
|
+
```
|
|
170
|
+
.devcontainer/
|
|
171
|
+
└── devcontainer.json
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### Typical (compose + language + database)
|
|
175
|
+
|
|
176
|
+
```
|
|
177
|
+
.devcontainer/
|
|
178
|
+
├── devcontainer.json
|
|
179
|
+
├── docker-compose.yml
|
|
180
|
+
├── docker-compose.postgres.yml
|
|
181
|
+
└── .env.example
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### Full (compose + language + database + observability)
|
|
185
|
+
|
|
186
|
+
```
|
|
187
|
+
.devcontainer/
|
|
188
|
+
├── devcontainer.json
|
|
189
|
+
├── docker-compose.yml # Base
|
|
190
|
+
├── docker-compose.postgres.yml # Database
|
|
191
|
+
├── docker-compose.otel-collector.yml # Telemetry
|
|
192
|
+
├── docker-compose.jaeger.yml # Tracing
|
|
193
|
+
├── docker-compose.prometheus.yml # Metrics
|
|
194
|
+
├── docker-compose.grafana.yml # Visualization
|
|
195
|
+
├── docker-compose.loki.yml # Logs
|
|
196
|
+
├── .env.example # Merged variables
|
|
197
|
+
├── otel-collector-config.yaml # Collector config
|
|
198
|
+
├── prometheus.yml # Prometheus config
|
|
199
|
+
├── grafana-datasources.yml # Grafana datasources
|
|
200
|
+
└── loki-config.yaml # Loki config
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
## Environment Variables by Overlay
|
|
204
|
+
|
|
205
|
+
### Databases
|
|
206
|
+
|
|
207
|
+
```bash
|
|
208
|
+
# PostgreSQL
|
|
209
|
+
POSTGRES_VERSION=16
|
|
210
|
+
POSTGRES_DB=devdb
|
|
211
|
+
POSTGRES_USER=postgres
|
|
212
|
+
POSTGRES_PASSWORD=postgres
|
|
213
|
+
POSTGRES_PORT=5432
|
|
214
|
+
|
|
215
|
+
# Redis
|
|
216
|
+
REDIS_VERSION=7
|
|
217
|
+
REDIS_PORT=6379
|
|
218
|
+
REDIS_PASSWORD= # Optional
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
### Observability
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
# OpenTelemetry Collector
|
|
225
|
+
OTEL_COLLECTOR_VERSION=latest
|
|
226
|
+
|
|
227
|
+
# Jaeger
|
|
228
|
+
JAEGER_VERSION=latest
|
|
229
|
+
|
|
230
|
+
# Prometheus
|
|
231
|
+
PROMETHEUS_VERSION=latest
|
|
232
|
+
|
|
233
|
+
# Grafana
|
|
234
|
+
GRAFANA_VERSION=latest
|
|
235
|
+
GRAFANA_ADMIN_USER=admin
|
|
236
|
+
GRAFANA_ADMIN_PASSWORD=admin
|
|
237
|
+
|
|
238
|
+
# Loki
|
|
239
|
+
LOKI_VERSION=latest
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
## Port Reference
|
|
243
|
+
|
|
244
|
+
| Port | Service | Purpose |
|
|
245
|
+
| ----- | ----------- | ----------------------- |
|
|
246
|
+
| 3000 | Grafana | Visualization dashboard |
|
|
247
|
+
| 3100 | Loki | Log ingestion API |
|
|
248
|
+
| 4317 | Jaeger/OTLP | OTLP gRPC receiver |
|
|
249
|
+
| 4318 | Jaeger/OTLP | OTLP HTTP receiver |
|
|
250
|
+
| 5000 | .NET | HTTP endpoint |
|
|
251
|
+
| 5001 | .NET | HTTPS endpoint |
|
|
252
|
+
| 5432 | PostgreSQL | Database |
|
|
253
|
+
| 6379 | Redis | Cache |
|
|
254
|
+
| 8000 | MkDocs | Documentation server |
|
|
255
|
+
| 8080 | Generic | Web application |
|
|
256
|
+
| 8888 | OTLP | Collector metrics |
|
|
257
|
+
| 8889 | OTLP | Prometheus exporter |
|
|
258
|
+
| 9090 | Prometheus | Metrics API/UI |
|
|
259
|
+
| 13133 | OTLP | Health check |
|
|
260
|
+
| 16686 | Jaeger | Tracing UI |
|
|
261
|
+
|
|
262
|
+
## Dependencies
|
|
263
|
+
|
|
264
|
+
### Required for Observability
|
|
265
|
+
|
|
266
|
+
| Component | Depends On |
|
|
267
|
+
| -------------- | ------------------------ |
|
|
268
|
+
| otel-collector | jaeger, prometheus, loki |
|
|
269
|
+
| grafana | prometheus, loki, jaeger |
|
|
270
|
+
| devcontainer | All selected services |
|
|
271
|
+
|
|
272
|
+
### Standalone Services
|
|
273
|
+
|
|
274
|
+
These work independently:
|
|
275
|
+
|
|
276
|
+
- postgres
|
|
277
|
+
- redis
|
|
278
|
+
- jaeger (can accept traces directly)
|
|
279
|
+
- prometheus (can scrape directly)
|
|
280
|
+
- loki (can accept logs directly)
|
|
281
|
+
|
|
282
|
+
## Migration from Old Templates
|
|
283
|
+
|
|
284
|
+
| Old Template | New Equivalent |
|
|
285
|
+
| ----------------- | --------------------------------------------------------------------------------------------------------------------------- |
|
|
286
|
+
| `dotnet` | `--stack compose --language dotnet` |
|
|
287
|
+
| `node-typescript` | `--stack compose --language nodejs` |
|
|
288
|
+
| `python-mkdocs` | `--stack plain --language mkdocs` |
|
|
289
|
+
| `fullstack` | `--stack compose --language nodejs --database postgres+redis --observability otel-collector,jaeger,prometheus,grafana,loki` |
|
|
290
|
+
|
|
291
|
+
## File Types
|
|
292
|
+
|
|
293
|
+
| File | Behavior |
|
|
294
|
+
| ------------------------- | ---------------------------------------------- |
|
|
295
|
+
| `devcontainer.patch.json` | Merged into devcontainer.json (not copied) |
|
|
296
|
+
| `.env.example` | Merged into combined .env.example (not copied) |
|
|
297
|
+
| `docker-compose.yml` | Copied as `docker-compose.{overlay}.yml` |
|
|
298
|
+
| Other files | Copied as-is to output directory |
|
|
299
|
+
| Directories | Copied recursively to output directory |
|
|
300
|
+
|
|
301
|
+
## Type Definitions
|
|
302
|
+
|
|
303
|
+
```typescript
|
|
304
|
+
// Base templates
|
|
305
|
+
type Stack = 'plain' | 'compose';
|
|
306
|
+
|
|
307
|
+
// Languages
|
|
308
|
+
type LanguageOverlay = 'dotnet' | 'nodejs' | 'python' | 'mkdocs';
|
|
309
|
+
|
|
310
|
+
// Databases
|
|
311
|
+
type Database = 'none' | 'postgres' | 'redis' | 'postgres+redis';
|
|
312
|
+
|
|
313
|
+
// Observability
|
|
314
|
+
type ObservabilityTool = 'otel-collector' | 'jaeger' | 'prometheus' | 'grafana' | 'loki';
|
|
315
|
+
|
|
316
|
+
// Cloud tools
|
|
317
|
+
type CloudTool = 'azure-cli' | 'aws-cli' | 'kubectl-helm';
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
## Helpful Links
|
|
321
|
+
|
|
322
|
+
- [Architecture](architecture.md) - Deep dive into composition
|
|
323
|
+
- [Dependencies](dependencies.md) - Service dependency management
|
|
324
|
+
- [Creating Overlays](creating-overlays.md) - Overlay development guide
|
|
325
|
+
- [Examples](examples.md) - Usage examples and patterns
|
|
326
|
+
- [Contributing](../../CONTRIBUTING.md) - How to contribute
|
package/docs/ux.md
ADDED
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
# User Experience
|
|
2
|
+
|
|
3
|
+
The init tool provides a polished CLI experience with visual enhancements for usability and engagement.
|
|
4
|
+
|
|
5
|
+
## Visual Design
|
|
6
|
+
|
|
7
|
+
### Color Coding (chalk)
|
|
8
|
+
|
|
9
|
+
- **Cyan** - Headers, section titles, important labels
|
|
10
|
+
- **Green** - Success states, confirmations, checkmarks
|
|
11
|
+
- **Yellow** - User input prompts, warnings
|
|
12
|
+
- **Red** - Errors, failures
|
|
13
|
+
- **White** - Primary content, values
|
|
14
|
+
- **Gray/Dim** - Secondary info, hints, progress details
|
|
15
|
+
|
|
16
|
+
### Bordered Boxes (boxen)
|
|
17
|
+
|
|
18
|
+
Different border styles indicate different message types:
|
|
19
|
+
|
|
20
|
+
- **Round borders** - General information, summaries
|
|
21
|
+
- **Double borders** - Success messages, completion
|
|
22
|
+
- **Thick borders** - Errors, critical messages
|
|
23
|
+
|
|
24
|
+
### Progress Feedback (ora)
|
|
25
|
+
|
|
26
|
+
Animated spinners show progress during:
|
|
27
|
+
|
|
28
|
+
- File generation
|
|
29
|
+
- Template composition
|
|
30
|
+
- Overlay application
|
|
31
|
+
- Any async operations
|
|
32
|
+
|
|
33
|
+
### Professional CLI (commander)
|
|
34
|
+
|
|
35
|
+
- Built-in `--help` documentation
|
|
36
|
+
- Version information (`--version`)
|
|
37
|
+
- Clear option descriptions
|
|
38
|
+
- Automatic validation
|
|
39
|
+
|
|
40
|
+
## Interactive Flow
|
|
41
|
+
|
|
42
|
+
### Welcome Banner
|
|
43
|
+
|
|
44
|
+
Cyan-bordered box with centered title and subtitle, setting professional tone.
|
|
45
|
+
|
|
46
|
+
### Question Flow
|
|
47
|
+
|
|
48
|
+
Each question follows this pattern:
|
|
49
|
+
|
|
50
|
+
1. Bold cyan question with emoji number
|
|
51
|
+
2. List of options (if applicable)
|
|
52
|
+
3. Yellow prompt for input
|
|
53
|
+
4. Green checkmark with confirmation
|
|
54
|
+
5. Dim text showing selected value
|
|
55
|
+
|
|
56
|
+
### Configuration Summary
|
|
57
|
+
|
|
58
|
+
Green-bordered box showing all selections before generation:
|
|
59
|
+
|
|
60
|
+
- Stack choice
|
|
61
|
+
- Docker-in-Docker setting
|
|
62
|
+
- Database selection
|
|
63
|
+
- Playwright enabled/disabled
|
|
64
|
+
- Cloud tools list
|
|
65
|
+
- Output path
|
|
66
|
+
|
|
67
|
+
### Progress Indicators
|
|
68
|
+
|
|
69
|
+
Spinner animation with cyan text during generation, followed by dimmed progress messages for each overlay applied.
|
|
70
|
+
|
|
71
|
+
### Success Message
|
|
72
|
+
|
|
73
|
+
Double-bordered green box with:
|
|
74
|
+
|
|
75
|
+
- Bold success headline
|
|
76
|
+
- Next steps numbered list
|
|
77
|
+
- Note about configuration independence
|
|
78
|
+
|
|
79
|
+
### Error Handling
|
|
80
|
+
|
|
81
|
+
Red-bordered box with:
|
|
82
|
+
|
|
83
|
+
- Bold error headline
|
|
84
|
+
- Clear error message
|
|
85
|
+
- No raw stack traces
|
|
86
|
+
|
|
87
|
+
## Non-Interactive Mode
|
|
88
|
+
|
|
89
|
+
Same visual polish as interactive mode:
|
|
90
|
+
|
|
91
|
+
- Blue box indicating non-interactive mode
|
|
92
|
+
- Configuration summary box
|
|
93
|
+
- Spinner during generation
|
|
94
|
+
- Success/error boxes
|
|
95
|
+
|
|
96
|
+
Professional help text via `--help` with clear option descriptions and examples.
|
|
97
|
+
|
|
98
|
+
## Design Principles
|
|
99
|
+
|
|
100
|
+
### Progressive Disclosure
|
|
101
|
+
|
|
102
|
+
Show one question at a time, confirm each selection, summarize before execution.
|
|
103
|
+
|
|
104
|
+
### Visual Hierarchy
|
|
105
|
+
|
|
106
|
+
- Bold for headers
|
|
107
|
+
- Dim for secondary info
|
|
108
|
+
- Color for message types
|
|
109
|
+
- Boxes for important sections
|
|
110
|
+
|
|
111
|
+
### Immediate Feedback
|
|
112
|
+
|
|
113
|
+
- Checkmarks confirm selections
|
|
114
|
+
- Spinners show progress
|
|
115
|
+
- Clear success/error states
|
|
116
|
+
- No silent operations
|
|
117
|
+
|
|
118
|
+
### Scannability
|
|
119
|
+
|
|
120
|
+
- Emoji markers for sections
|
|
121
|
+
- Consistent indentation
|
|
122
|
+
- Grouped related information
|
|
123
|
+
- Clear visual separation
|
|
124
|
+
|
|
125
|
+
### Professional Polish
|
|
126
|
+
|
|
127
|
+
- No raw errors
|
|
128
|
+
- Friendly messages
|
|
129
|
+
- Helpful next steps
|
|
130
|
+
- Acknowledgment of independence
|
|
131
|
+
|
|
132
|
+
## Libraries
|
|
133
|
+
|
|
134
|
+
| Library | Purpose | Usage |
|
|
135
|
+
| ----------------------- | ---------------- | ------------------ |
|
|
136
|
+
| **chalk** (^5.3.0) | Terminal styling | Colors, bold, dim |
|
|
137
|
+
| **boxen** (^7.1.1) | Terminal boxes | Headers, summaries |
|
|
138
|
+
| **ora** (^8.0.1) | Spinners | Progress feedback |
|
|
139
|
+
| **commander** (^12.0.0) | CLI parsing | Arguments, help |
|
|
140
|
+
|
|
141
|
+
## Accessibility
|
|
142
|
+
|
|
143
|
+
### Terminal Compatibility
|
|
144
|
+
|
|
145
|
+
Works across different terminals:
|
|
146
|
+
|
|
147
|
+
- Modern terminals (full color, Unicode)
|
|
148
|
+
- Basic terminals (ASCII fallbacks)
|
|
149
|
+
- CI environments (no animation)
|
|
150
|
+
|
|
151
|
+
### Graceful Degradation
|
|
152
|
+
|
|
153
|
+
If terminal doesn't support:
|
|
154
|
+
|
|
155
|
+
- Colors → plain text
|
|
156
|
+
- Spinners → simple dots
|
|
157
|
+
- Unicode → ASCII characters
|
|
158
|
+
|
|
159
|
+
The tool remains fully functional.
|
|
160
|
+
|
|
161
|
+
## Philosophy Alignment
|
|
162
|
+
|
|
163
|
+
Visual enhancements maintain humble tool principles:
|
|
164
|
+
|
|
165
|
+
- ✅ No lock-in - Pretty output is ephemeral
|
|
166
|
+
- ✅ Stateless - Visual feedback doesn't persist
|
|
167
|
+
- ✅ Optional - Non-interactive mode available
|
|
168
|
+
- ✅ Simple - UX aids clarity, not complexity
|
|
169
|
+
|
|
170
|
+
Beautiful interface, simple implementation.
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Custom Features
|
|
2
|
+
|
|
3
|
+
**Only** custom features that add value beyond what's available on [containers.dev](https://containers.dev/features).
|
|
4
|
+
|
|
5
|
+
## Philosophy
|
|
6
|
+
|
|
7
|
+
We **do not** replicate existing features. Use official features from containers.dev for:
|
|
8
|
+
|
|
9
|
+
- Git, Docker-in-Docker, common utilities
|
|
10
|
+
- Language runtimes (Node, Python, Go, etc.)
|
|
11
|
+
- Cloud CLIs (AWS, Azure, GCP)
|
|
12
|
+
- Common development tools
|
|
13
|
+
|
|
14
|
+
This directory contains **unique** features that solve specific problems not addressed by official features.
|
|
15
|
+
|
|
16
|
+
## Available Custom Features
|
|
17
|
+
|
|
18
|
+
### cross-distro-packages
|
|
19
|
+
|
|
20
|
+
**NEW**: Cross-distribution package manager with automatic distro detection.
|
|
21
|
+
|
|
22
|
+
- Supports apt (Debian/Ubuntu) and apk (Alpine)
|
|
23
|
+
- Single feature declaration for multi-distro compatibility
|
|
24
|
+
- Eliminates duplicated package installation logic
|
|
25
|
+
- Clean package manager cache cleanup
|
|
26
|
+
|
|
27
|
+
### project-scaffolder
|
|
28
|
+
|
|
29
|
+
Interactive project initialization for common frameworks and patterns.
|
|
30
|
+
|
|
31
|
+
- Express API, NestJS, Next.js scaffolding
|
|
32
|
+
- Test setup with Vitest/Jest
|
|
33
|
+
- CI/CD configuration templates
|
|
34
|
+
- Interactive CLI prompts
|
|
35
|
+
|
|
36
|
+
### team-conventions
|
|
37
|
+
|
|
38
|
+
Shared code quality and style enforcement for teams.
|
|
39
|
+
|
|
40
|
+
- Pre-configured ESLint, Prettier, commitlint
|
|
41
|
+
- Husky pre-commit hooks
|
|
42
|
+
- Team-specific linting rules
|
|
43
|
+
- Consistent formatting across projects
|
|
44
|
+
|
|
45
|
+
### local-secrets-manager
|
|
46
|
+
|
|
47
|
+
Safe local development secrets management (never committed to git).
|
|
48
|
+
|
|
49
|
+
- `.env.local` template generation
|
|
50
|
+
- Secret validation and loading
|
|
51
|
+
- Integration with VS Code settings
|
|
52
|
+
- Prevents accidental commits of secrets
|
|
53
|
+
|
|
54
|
+
## Using These Features
|
|
55
|
+
|
|
56
|
+
Add to your `devcontainer.json` alongside official features:
|
|
57
|
+
|
|
58
|
+
```json
|
|
59
|
+
{
|
|
60
|
+
"features": {
|
|
61
|
+
"ghcr.io/devcontainers/features/node:1": { "version": "20" },
|
|
62
|
+
"ghcr.io/devcontainers/features/git:1": {},
|
|
63
|
+
"./features/project-scaffolder": { "template": "express-typescript" },
|
|
64
|
+
"./features/team-conventions": { "preset": "airbnb" }
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Creating Custom Features
|
|
70
|
+
|
|
71
|
+
Only add features here that:
|
|
72
|
+
|
|
73
|
+
1. **Aren't available** on containers.dev
|
|
74
|
+
2. **Solve real problems** for multiple projects
|
|
75
|
+
3. **Are composable** - work with official features
|
|
76
|
+
4. **Are well-tested** and documented
|
|
77
|
+
|
|
78
|
+
Feature structure:
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
features/my-feature/
|
|
82
|
+
├── devcontainer-feature.json # Metadata
|
|
83
|
+
├── install.sh # Installation script
|
|
84
|
+
└── README.md # Documentation
|
|
85
|
+
```
|