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.
Files changed (327) hide show
  1. package/README.md +843 -0
  2. package/dist/scripts/init.d.ts +3 -0
  3. package/dist/scripts/init.d.ts.map +1 -0
  4. package/dist/scripts/init.js +1190 -0
  5. package/dist/scripts/init.js.map +1 -0
  6. package/dist/scripts/migrate-to-manifests.d.ts +12 -0
  7. package/dist/scripts/migrate-to-manifests.d.ts.map +1 -0
  8. package/dist/scripts/migrate-to-manifests.js +230 -0
  9. package/dist/scripts/migrate-to-manifests.js.map +1 -0
  10. package/dist/tool/questionnaire/composer.d.ts +6 -0
  11. package/dist/tool/questionnaire/composer.d.ts.map +1 -0
  12. package/dist/tool/questionnaire/composer.js +1232 -0
  13. package/dist/tool/questionnaire/composer.js.map +1 -0
  14. package/dist/tool/readme/markdown-parser.d.ts +30 -0
  15. package/dist/tool/readme/markdown-parser.d.ts.map +1 -0
  16. package/dist/tool/readme/markdown-parser.js +139 -0
  17. package/dist/tool/readme/markdown-parser.js.map +1 -0
  18. package/dist/tool/readme/readme-generator.d.ts +9 -0
  19. package/dist/tool/readme/readme-generator.d.ts.map +1 -0
  20. package/dist/tool/readme/readme-generator.js +422 -0
  21. package/dist/tool/readme/readme-generator.js.map +1 -0
  22. package/dist/tool/schema/custom-loader.d.ts +17 -0
  23. package/dist/tool/schema/custom-loader.d.ts.map +1 -0
  24. package/dist/tool/schema/custom-loader.js +149 -0
  25. package/dist/tool/schema/custom-loader.js.map +1 -0
  26. package/dist/tool/schema/overlay-loader.d.ts +47 -0
  27. package/dist/tool/schema/overlay-loader.d.ts.map +1 -0
  28. package/dist/tool/schema/overlay-loader.js +252 -0
  29. package/dist/tool/schema/overlay-loader.js.map +1 -0
  30. package/dist/tool/schema/types.d.ts +212 -0
  31. package/dist/tool/schema/types.d.ts.map +1 -0
  32. package/dist/tool/schema/types.js +5 -0
  33. package/dist/tool/schema/types.js.map +1 -0
  34. package/docs/README.md +308 -0
  35. package/docs/architecture.md +233 -0
  36. package/docs/creating-overlays.md +549 -0
  37. package/docs/custom-patches.md +540 -0
  38. package/docs/dependencies.md +279 -0
  39. package/docs/examples/custom-patches-example.md +85 -0
  40. package/docs/examples.md +576 -0
  41. package/docs/messaging-comparison.md +265 -0
  42. package/docs/messaging-quick-start.md +385 -0
  43. package/docs/observability-workflow.md +537 -0
  44. package/docs/overlay-manifest-refactoring.md +214 -0
  45. package/docs/overlay-metadata-archive.md +54 -0
  46. package/docs/overlays.md +523 -0
  47. package/docs/presets-architecture.md +498 -0
  48. package/docs/presets.md +366 -0
  49. package/docs/publishing.md +476 -0
  50. package/docs/quick-reference.md +326 -0
  51. package/docs/ux.md +170 -0
  52. package/features/README.md +85 -0
  53. package/features/cross-distro-packages/README.md +146 -0
  54. package/features/cross-distro-packages/devcontainer-feature.json +20 -0
  55. package/features/cross-distro-packages/install.sh +58 -0
  56. package/features/local-secrets-manager/devcontainer-feature.json +18 -0
  57. package/features/local-secrets-manager/install.sh +127 -0
  58. package/features/project-scaffolder/devcontainer-feature.json +24 -0
  59. package/features/project-scaffolder/install.sh +100 -0
  60. package/features/team-conventions/devcontainer-feature.json +24 -0
  61. package/features/team-conventions/install.sh +93 -0
  62. package/overlays/.registry/README.md +14 -0
  63. package/overlays/.registry/base-images.yml +26 -0
  64. package/overlays/.registry/base-templates.yml +7 -0
  65. package/overlays/README.md +155 -0
  66. package/overlays/alertmanager/.env.example +5 -0
  67. package/overlays/alertmanager/README.md +465 -0
  68. package/overlays/alertmanager/alert-rules.yml +56 -0
  69. package/overlays/alertmanager/alertmanager.yml +42 -0
  70. package/overlays/alertmanager/devcontainer.patch.json +12 -0
  71. package/overlays/alertmanager/docker-compose.yml +20 -0
  72. package/overlays/alertmanager/overlay.yml +17 -0
  73. package/overlays/alertmanager/setup.sh +53 -0
  74. package/overlays/alertmanager/verify.sh +31 -0
  75. package/overlays/aws-cli/README.md +473 -0
  76. package/overlays/aws-cli/devcontainer.patch.json +13 -0
  77. package/overlays/aws-cli/overlay.yml +13 -0
  78. package/overlays/azure-cli/README.md +551 -0
  79. package/overlays/azure-cli/devcontainer.patch.json +8 -0
  80. package/overlays/azure-cli/overlay.yml +13 -0
  81. package/overlays/bun/README.md +312 -0
  82. package/overlays/bun/devcontainer.patch.json +41 -0
  83. package/overlays/bun/overlay.yml +16 -0
  84. package/overlays/bun/setup.sh +79 -0
  85. package/overlays/bun/verify.sh +30 -0
  86. package/overlays/codex/README.md +128 -0
  87. package/overlays/codex/devcontainer.patch.json +3 -0
  88. package/overlays/codex/overlay.yml +14 -0
  89. package/overlays/codex/setup.sh +24 -0
  90. package/overlays/codex/verify.sh +30 -0
  91. package/overlays/commitlint/README.md +333 -0
  92. package/overlays/commitlint/devcontainer.patch.json +8 -0
  93. package/overlays/commitlint/overlay.yml +16 -0
  94. package/overlays/commitlint/setup.sh +234 -0
  95. package/overlays/direnv/README.md +504 -0
  96. package/overlays/direnv/devcontainer.patch.json +6 -0
  97. package/overlays/direnv/overlay.yml +13 -0
  98. package/overlays/direnv/setup.sh +139 -0
  99. package/overlays/docker-in-docker/README.md +534 -0
  100. package/overlays/docker-in-docker/devcontainer.patch.json +10 -0
  101. package/overlays/docker-in-docker/overlay.yml +13 -0
  102. package/overlays/docker-sock/README.md +256 -0
  103. package/overlays/docker-sock/devcontainer.patch.json +9 -0
  104. package/overlays/docker-sock/docker-compose.yml +8 -0
  105. package/overlays/docker-sock/overlay.yml +13 -0
  106. package/overlays/dotnet/README.md +147 -0
  107. package/overlays/dotnet/devcontainer.patch.json +51 -0
  108. package/overlays/dotnet/global-tools.txt +24 -0
  109. package/overlays/dotnet/overlay.yml +13 -0
  110. package/overlays/dotnet/setup.sh +51 -0
  111. package/overlays/dotnet/verify.sh +26 -0
  112. package/overlays/gcloud/README.md +269 -0
  113. package/overlays/gcloud/devcontainer.patch.json +14 -0
  114. package/overlays/gcloud/overlay.yml +14 -0
  115. package/overlays/gcloud/verify.sh +52 -0
  116. package/overlays/git-helpers/README.md +168 -0
  117. package/overlays/git-helpers/devcontainer.patch.json +33 -0
  118. package/overlays/git-helpers/overlay.yml +15 -0
  119. package/overlays/git-helpers/setup.sh +91 -0
  120. package/overlays/go/README.md +293 -0
  121. package/overlays/go/devcontainer.patch.json +43 -0
  122. package/overlays/go/overlay.yml +15 -0
  123. package/overlays/go/setup.sh +33 -0
  124. package/overlays/go/verify.sh +40 -0
  125. package/overlays/grafana/.env.example +9 -0
  126. package/overlays/grafana/README.md +462 -0
  127. package/overlays/grafana/dashboard-provider.yml +11 -0
  128. package/overlays/grafana/dashboards/observability-overview.json +263 -0
  129. package/overlays/grafana/devcontainer.patch.json +12 -0
  130. package/overlays/grafana/docker-compose.yml +27 -0
  131. package/overlays/grafana/grafana-datasources.yml +57 -0
  132. package/overlays/grafana/overlay.yml +21 -0
  133. package/overlays/grafana/verify.sh +34 -0
  134. package/overlays/jaeger/.env.example +7 -0
  135. package/overlays/jaeger/README.md +867 -0
  136. package/overlays/jaeger/devcontainer.patch.json +12 -0
  137. package/overlays/jaeger/docker-compose.yml +17 -0
  138. package/overlays/jaeger/overlay.yml +19 -0
  139. package/overlays/java/README.md +267 -0
  140. package/overlays/java/devcontainer.patch.json +44 -0
  141. package/overlays/java/overlay.yml +16 -0
  142. package/overlays/java/setup.sh +41 -0
  143. package/overlays/java/verify.sh +42 -0
  144. package/overlays/just/README.md +443 -0
  145. package/overlays/just/devcontainer.patch.json +3 -0
  146. package/overlays/just/overlay.yml +13 -0
  147. package/overlays/just/setup.sh +182 -0
  148. package/overlays/kubectl-helm/README.md +660 -0
  149. package/overlays/kubectl-helm/devcontainer.patch.json +10 -0
  150. package/overlays/kubectl-helm/overlay.yml +13 -0
  151. package/overlays/loki/.env.example +5 -0
  152. package/overlays/loki/README.md +1156 -0
  153. package/overlays/loki/devcontainer.patch.json +12 -0
  154. package/overlays/loki/docker-compose.yml +18 -0
  155. package/overlays/loki/loki-config.yaml +45 -0
  156. package/overlays/loki/overlay.yml +17 -0
  157. package/overlays/minio/.env.example +9 -0
  158. package/overlays/minio/README.md +639 -0
  159. package/overlays/minio/devcontainer.patch.json +30 -0
  160. package/overlays/minio/docker-compose.yml +28 -0
  161. package/overlays/minio/overlay.yml +18 -0
  162. package/overlays/minio/setup.sh +61 -0
  163. package/overlays/minio/verify.sh +64 -0
  164. package/overlays/mkdocs/README.md +309 -0
  165. package/overlays/mkdocs/devcontainer.patch.json +24 -0
  166. package/overlays/mkdocs/overlay.yml +15 -0
  167. package/overlays/modern-cli-tools/README.md +556 -0
  168. package/overlays/modern-cli-tools/devcontainer.patch.json +3 -0
  169. package/overlays/modern-cli-tools/overlay.yml +13 -0
  170. package/overlays/modern-cli-tools/setup.sh +153 -0
  171. package/overlays/mongodb/.env.example +9 -0
  172. package/overlays/mongodb/README.md +481 -0
  173. package/overlays/mongodb/devcontainer.patch.json +32 -0
  174. package/overlays/mongodb/docker-compose.yml +44 -0
  175. package/overlays/mongodb/overlay.yml +17 -0
  176. package/overlays/mongodb/verify.sh +48 -0
  177. package/overlays/mysql/.env.example +11 -0
  178. package/overlays/mysql/README.md +542 -0
  179. package/overlays/mysql/devcontainer.patch.json +34 -0
  180. package/overlays/mysql/docker-compose.yml +55 -0
  181. package/overlays/mysql/overlay.yml +16 -0
  182. package/overlays/mysql/verify.sh +48 -0
  183. package/overlays/nats/.env.example +5 -0
  184. package/overlays/nats/README.md +762 -0
  185. package/overlays/nats/devcontainer.patch.json +24 -0
  186. package/overlays/nats/docker-compose.yml +31 -0
  187. package/overlays/nats/overlay.yml +18 -0
  188. package/overlays/nats/verify.sh +50 -0
  189. package/overlays/ngrok/README.md +503 -0
  190. package/overlays/ngrok/devcontainer.patch.json +3 -0
  191. package/overlays/ngrok/overlay.yml +14 -0
  192. package/overlays/ngrok/setup.sh +125 -0
  193. package/overlays/nodejs/README.md +192 -0
  194. package/overlays/nodejs/devcontainer.patch.json +49 -0
  195. package/overlays/nodejs/global-packages.txt +16 -0
  196. package/overlays/nodejs/overlay.yml +14 -0
  197. package/overlays/nodejs/setup.sh +46 -0
  198. package/overlays/nodejs/verify.sh +32 -0
  199. package/overlays/otel-collector/.env.example +9 -0
  200. package/overlays/otel-collector/README.md +1257 -0
  201. package/overlays/otel-collector/devcontainer.patch.json +28 -0
  202. package/overlays/otel-collector/docker-compose.yml +22 -0
  203. package/overlays/otel-collector/otel-collector-config.yaml +68 -0
  204. package/overlays/otel-collector/overlay.yml +21 -0
  205. package/overlays/otel-collector/setup.sh +49 -0
  206. package/overlays/otel-demo-nodejs/.env.example +2 -0
  207. package/overlays/otel-demo-nodejs/Dockerfile-otel-demo-nodejs +17 -0
  208. package/overlays/otel-demo-nodejs/README.md +409 -0
  209. package/overlays/otel-demo-nodejs/devcontainer.patch.json +12 -0
  210. package/overlays/otel-demo-nodejs/docker-compose.yml +19 -0
  211. package/overlays/otel-demo-nodejs/overlay.yml +23 -0
  212. package/overlays/otel-demo-nodejs/package-otel-demo-nodejs.json +20 -0
  213. package/overlays/otel-demo-nodejs/server-otel-demo-nodejs.js +259 -0
  214. package/overlays/otel-demo-nodejs/tracing-otel-demo-nodejs.js +57 -0
  215. package/overlays/otel-demo-nodejs/verify.sh +31 -0
  216. package/overlays/otel-demo-python/.env.example +2 -0
  217. package/overlays/otel-demo-python/Dockerfile-otel-demo-python +16 -0
  218. package/overlays/otel-demo-python/README.md +82 -0
  219. package/overlays/otel-demo-python/app-otel-demo-python.py +208 -0
  220. package/overlays/otel-demo-python/devcontainer.patch.json +12 -0
  221. package/overlays/otel-demo-python/docker-compose.yml +19 -0
  222. package/overlays/otel-demo-python/overlay.yml +23 -0
  223. package/overlays/otel-demo-python/requirements-otel-demo-python.txt +4 -0
  224. package/overlays/otel-demo-python/verify.sh +31 -0
  225. package/overlays/playwright/README.md +629 -0
  226. package/overlays/playwright/devcontainer.patch.json +9 -0
  227. package/overlays/playwright/overlay.yml +13 -0
  228. package/overlays/postgres/.env.example +6 -0
  229. package/overlays/postgres/README.md +602 -0
  230. package/overlays/postgres/devcontainer.patch.json +21 -0
  231. package/overlays/postgres/docker-compose.yml +22 -0
  232. package/overlays/postgres/overlay.yml +15 -0
  233. package/overlays/postgres/verify.sh +45 -0
  234. package/overlays/powershell/README.md +314 -0
  235. package/overlays/powershell/devcontainer.patch.json +22 -0
  236. package/overlays/powershell/overlay.yml +13 -0
  237. package/overlays/powershell/setup.sh +29 -0
  238. package/overlays/powershell/verify.sh +38 -0
  239. package/overlays/pre-commit/README.md +263 -0
  240. package/overlays/pre-commit/devcontainer.patch.json +9 -0
  241. package/overlays/pre-commit/overlay.yml +16 -0
  242. package/overlays/pre-commit/setup.sh +129 -0
  243. package/overlays/presets/docs-site.yml +118 -0
  244. package/overlays/presets/fullstack.yml +181 -0
  245. package/overlays/presets/microservice.yml +118 -0
  246. package/overlays/presets/web-api.yml +109 -0
  247. package/overlays/prometheus/.env.example +5 -0
  248. package/overlays/prometheus/README.md +1246 -0
  249. package/overlays/prometheus/devcontainer.patch.json +12 -0
  250. package/overlays/prometheus/docker-compose.yml +22 -0
  251. package/overlays/prometheus/overlay.yml +17 -0
  252. package/overlays/prometheus/prometheus.yml +12 -0
  253. package/overlays/prometheus/verify.sh +34 -0
  254. package/overlays/promtail/.env.example +2 -0
  255. package/overlays/promtail/README.md +357 -0
  256. package/overlays/promtail/devcontainer.patch.json +5 -0
  257. package/overlays/promtail/docker-compose.yml +16 -0
  258. package/overlays/promtail/overlay.yml +17 -0
  259. package/overlays/promtail/promtail-config.yaml +60 -0
  260. package/overlays/promtail/verify.sh +31 -0
  261. package/overlays/pulumi/README.md +472 -0
  262. package/overlays/pulumi/devcontainer.patch.json +13 -0
  263. package/overlays/pulumi/overlay.yml +14 -0
  264. package/overlays/pulumi/verify.sh +31 -0
  265. package/overlays/python/README.md +919 -0
  266. package/overlays/python/devcontainer.patch.json +41 -0
  267. package/overlays/python/overlay.yml +12 -0
  268. package/overlays/python/requirements-overlay.txt +13 -0
  269. package/overlays/python/setup.sh +47 -0
  270. package/overlays/python/verify.sh +32 -0
  271. package/overlays/rabbitmq/.env.example +7 -0
  272. package/overlays/rabbitmq/README.md +680 -0
  273. package/overlays/rabbitmq/devcontainer.patch.json +28 -0
  274. package/overlays/rabbitmq/docker-compose.yml +30 -0
  275. package/overlays/rabbitmq/overlay.yml +18 -0
  276. package/overlays/rabbitmq/verify.sh +41 -0
  277. package/overlays/redis/.env.example +4 -0
  278. package/overlays/redis/README.md +776 -0
  279. package/overlays/redis/devcontainer.patch.json +21 -0
  280. package/overlays/redis/docker-compose.yml +21 -0
  281. package/overlays/redis/overlay.yml +15 -0
  282. package/overlays/redis/verify.sh +41 -0
  283. package/overlays/redpanda/.env.example +10 -0
  284. package/overlays/redpanda/README.md +703 -0
  285. package/overlays/redpanda/devcontainer.patch.json +37 -0
  286. package/overlays/redpanda/docker-compose.yml +67 -0
  287. package/overlays/redpanda/overlay.yml +21 -0
  288. package/overlays/redpanda/verify.sh +48 -0
  289. package/overlays/rust/README.md +299 -0
  290. package/overlays/rust/devcontainer.patch.json +39 -0
  291. package/overlays/rust/overlay.yml +15 -0
  292. package/overlays/rust/setup.sh +36 -0
  293. package/overlays/rust/verify.sh +51 -0
  294. package/overlays/sqlite/README.md +584 -0
  295. package/overlays/sqlite/devcontainer.patch.json +14 -0
  296. package/overlays/sqlite/overlay.yml +15 -0
  297. package/overlays/sqlite/setup.sh +27 -0
  298. package/overlays/sqlite/verify.sh +43 -0
  299. package/overlays/sqlserver/.env.example +6 -0
  300. package/overlays/sqlserver/README.md +592 -0
  301. package/overlays/sqlserver/devcontainer.patch.json +22 -0
  302. package/overlays/sqlserver/docker-compose.yml +32 -0
  303. package/overlays/sqlserver/overlay.yml +17 -0
  304. package/overlays/sqlserver/verify.sh +30 -0
  305. package/overlays/tempo/.env.example +5 -0
  306. package/overlays/tempo/README.md +273 -0
  307. package/overlays/tempo/devcontainer.patch.json +12 -0
  308. package/overlays/tempo/docker-compose.yml +20 -0
  309. package/overlays/tempo/overlay.yml +20 -0
  310. package/overlays/tempo/tempo-config.yaml +32 -0
  311. package/overlays/tempo/verify.sh +31 -0
  312. package/overlays/terraform/README.md +389 -0
  313. package/overlays/terraform/devcontainer.patch.json +15 -0
  314. package/overlays/terraform/overlay.yml +14 -0
  315. package/overlays/terraform/verify.sh +63 -0
  316. package/package.json +74 -0
  317. package/templates/README.md +285 -0
  318. package/templates/compose/.devcontainer/devcontainer.json +46 -0
  319. package/templates/compose/.devcontainer/docker-compose.yml +12 -0
  320. package/templates/compose/README.md +20 -0
  321. package/templates/plain/.devcontainer/devcontainer.json +35 -0
  322. package/templates/plain/README.md +21 -0
  323. package/tool/README.md +281 -0
  324. package/tool/schema/base-images.schema.json +43 -0
  325. package/tool/schema/base-templates.schema.json +34 -0
  326. package/tool/schema/config.schema.json +71 -0
  327. 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
+ ```