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,549 @@
1
+ # Creating Overlays
2
+
3
+ A comprehensive guide to creating overlays for container-superposition.
4
+
5
+ ## Base Images
6
+
7
+ Container Superposition supports multiple Linux distributions with automatic package manager detection.
8
+
9
+ ### Supported Base Images
10
+
11
+ During interactive initialization, you can choose from:
12
+
13
+ 1. **Debian Bookworm (Recommended)** - `mcr.microsoft.com/devcontainers/base:bookworm`
14
+ - ✅ Default choice, best compatibility
15
+ - ✅ Stable with long-term support
16
+ - ✅ apt package manager
17
+ - ✅ Battle-tested in production
18
+
19
+ 2. **Debian Trixie** - `mcr.microsoft.com/devcontainers/base:trixie`
20
+ - Newer packages, testing stability
21
+ - apt package manager
22
+ - Use if you need more recent software versions
23
+
24
+ 3. **Alpine Linux** - `mcr.microsoft.com/devcontainers/base:alpine`
25
+ - Minimal footprint (~5MB base image)
26
+ - apk package manager
27
+ - Ideal for resource-constrained environments
28
+ - Perfect for containerized microservices
29
+
30
+ 4. **Ubuntu LTS** - `mcr.microsoft.com/devcontainers/base:ubuntu`
31
+ - Popular, familiar to many developers
32
+ - apt package manager
33
+ - Extensive package ecosystem
34
+ - Good for teams migrating from Ubuntu
35
+
36
+ 5. **Custom Image**
37
+ - Specify any Docker image
38
+ - ⚠️ **Warning**: May conflict with overlays
39
+ - Test thoroughly and adjust configurations as needed
40
+
41
+ ### Package Manager Compatibility
42
+
43
+ Overlays automatically detect the package manager based on the selected base image:
44
+
45
+ - **Debian/Ubuntu**: Uses `apt-get` for package installation
46
+ - **Alpine**: Uses `apk` for package installation
47
+ - **Custom**: Defaults to `apt-get` (may need manual adjustment)
48
+
49
+ When creating overlays with package installations, use devcontainer features that handle this automatically, or detect the package manager in setup scripts:
50
+
51
+ ```bash
52
+ # Example: Detect package manager
53
+ if command -v apk > /dev/null; then
54
+ apk add --no-cache some-package
55
+ elif command -v apt-get > /dev/null; then
56
+ apt-get update && apt-get install -y some-package
57
+ fi
58
+ ```
59
+
60
+ ### When to Use Each Base Image
61
+
62
+ **Debian Bookworm**:
63
+
64
+ - Default for most projects
65
+ - Maximum compatibility with overlays
66
+ - Proven stability
67
+
68
+ **Alpine**:
69
+
70
+ - Docker images/microservices where size matters
71
+ - Cloud deployments with cost optimization
72
+ - CI/CD environments
73
+
74
+ **Ubuntu**:
75
+
76
+ - Teams familiar with Ubuntu
77
+ - Projects requiring Ubuntu-specific packages
78
+ - Enterprise environments standardized on Ubuntu
79
+
80
+ **Custom**:
81
+
82
+ - Specific compliance requirements
83
+ - Organization-mandated base images
84
+ - Specialized OS requirements
85
+
86
+ ## Overlay Types
87
+
88
+ Overlays fall into several categories:
89
+
90
+ 1. **Language/Framework** - dotnet, nodejs, python, mkdocs
91
+ 2. **Database** - postgres, redis
92
+ 3. **Observability** - otel-collector, jaeger, prometheus, grafana, loki
93
+ 4. **Cloud/DevOps** - aws-cli, azure-cli, kubectl-helm
94
+ 5. **Development Tools** - playwright, codex, etc.
95
+
96
+ ## Basic Overlay Structure
97
+
98
+ Every overlay must have at least:
99
+
100
+ ```
101
+ overlays/my-overlay/
102
+ └── devcontainer.patch.json
103
+ ```
104
+
105
+ Additional optional files:
106
+
107
+ ```
108
+ overlays/my-overlay/
109
+ ├── devcontainer.patch.json # Required: DevContainer configuration
110
+ ├── docker-compose.yml # Optional: Service definition
111
+ ├── .env.example # Optional: Environment variables
112
+ ├── README.md # Optional: Documentation
113
+ ├── my-config.yaml # Optional: Configuration files
114
+ └── config/ # Optional: Configuration directory
115
+ └── additional.json
116
+ ```
117
+
118
+ ## devcontainer.patch.json
119
+
120
+ This is the core configuration that gets merged into the final devcontainer.json.
121
+
122
+ ### Minimal Example
123
+
124
+ ```json
125
+ {
126
+ "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
127
+ "features": {
128
+ "ghcr.io/devcontainers/features/my-tool:1": {
129
+ "version": "latest"
130
+ }
131
+ }
132
+ }
133
+ ```
134
+
135
+ ### Full Example
136
+
137
+ ```json
138
+ {
139
+ "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
140
+ "features": {
141
+ "ghcr.io/devcontainers/features/my-tool:1": {
142
+ "version": "latest",
143
+ "option1": true
144
+ }
145
+ },
146
+ "runServices": ["my-service"],
147
+ "_serviceOrder": 1,
148
+ "customizations": {
149
+ "vscode": {
150
+ "extensions": ["publisher.my-extension"],
151
+ "settings": {
152
+ "my.setting": "value"
153
+ }
154
+ }
155
+ },
156
+ "forwardPorts": [8080, 9000],
157
+ "portsAttributes": {
158
+ "8080": {
159
+ "label": "My Service",
160
+ "onAutoForward": "openBrowser"
161
+ },
162
+ "9000": {
163
+ "label": "Admin Panel",
164
+ "onAutoForward": "notify"
165
+ }
166
+ },
167
+ "remoteEnv": {
168
+ "MY_TOOL_HOST": "localhost",
169
+ "MY_TOOL_PORT": "8080"
170
+ },
171
+ "postCreateCommand": {
172
+ "my-setup": "echo 'Setting up my tool...'"
173
+ }
174
+ }
175
+ ```
176
+
177
+ ### Special Fields
178
+
179
+ #### runServices
180
+
181
+ Lists services that should start automatically. Only needed if your overlay includes a docker-compose.yml.
182
+
183
+ ```json
184
+ {
185
+ "runServices": ["my-service", "my-dependency"]
186
+ }
187
+ ```
188
+
189
+ #### \_serviceOrder
190
+
191
+ Controls startup order (lower numbers start first):
192
+
193
+ - `0` - Infrastructure (postgres, redis)
194
+ - `1` - Observability backends (jaeger, prometheus, loki)
195
+ - `2` - Middleware (otel-collector)
196
+ - `3` - UI/Visualization (grafana)
197
+
198
+ ```json
199
+ {
200
+ "_serviceOrder": 1
201
+ }
202
+ ```
203
+
204
+ ## docker-compose.yml
205
+
206
+ Define services your overlay needs.
207
+
208
+ ### Template
209
+
210
+ ```yaml
211
+ version: '3.8'
212
+ services:
213
+ my-service:
214
+ image: my-image:${MY_SERVICE_VERSION:-latest}
215
+ environment:
216
+ - ENV_VAR=${ENV_VAR:-default}
217
+ ports:
218
+ - '8080:8080'
219
+ volumes:
220
+ - my-data:/data
221
+ - ./my-config.yaml:/etc/my-service/config.yaml
222
+ depends_on:
223
+ - other-service # Only if dependency exists
224
+ networks:
225
+ - devnet
226
+
227
+ volumes:
228
+ my-data:
229
+
230
+ networks:
231
+ devnet:
232
+ external: true
233
+ ```
234
+
235
+ ### Important Notes
236
+
237
+ 1. **Always use version "3.8"**
238
+ 2. **Always include `networks: - devnet`** for service connectivity
239
+ 3. **Use environment variables** with defaults: `${VAR:-default}`
240
+ 4. **Include depends_on** for dependencies (composer will filter unused ones)
241
+ 5. **Use external network**: `devnet: external: true`
242
+
243
+ ### Volume Mounts
244
+
245
+ Mount config files from your overlay:
246
+
247
+ ```yaml
248
+ volumes:
249
+ - ./my-config.yaml:/etc/my-service/config.yaml
250
+ - ./config:/etc/my-service/config.d
251
+ ```
252
+
253
+ These files are automatically copied to the output directory.
254
+
255
+ ## .env.example
256
+
257
+ Define environment variables for your overlay.
258
+
259
+ ### Template
260
+
261
+ ```bash
262
+ # My Service Configuration
263
+ MY_SERVICE_VERSION=latest
264
+ MY_SERVICE_PORT=8080
265
+ MY_SERVICE_HOST=localhost
266
+
267
+ # Authentication
268
+ MY_SERVICE_USERNAME=admin
269
+ MY_SERVICE_PASSWORD=changeme
270
+
271
+ # Feature Flags
272
+ MY_SERVICE_ENABLE_FEATURE_X=true
273
+ ```
274
+
275
+ ### Guidelines
276
+
277
+ 1. **Include defaults** - Every variable should have a sensible default
278
+ 2. **Group related variables** - Use comments to organize
279
+ 3. **Document sensitive values** - Mark which should be changed
280
+ 4. **Use service prefix** - Avoid naming conflicts (MY*SERVICE*\*)
281
+
282
+ ## Configuration Files
283
+
284
+ Any additional files in your overlay are automatically copied to the output directory.
285
+
286
+ ### Example Structure
287
+
288
+ ```
289
+ overlays/my-service/
290
+ ├── devcontainer.patch.json
291
+ ├── docker-compose.yml
292
+ ├── .env.example
293
+ ├── my-service-config.yaml # Copied as-is
294
+ ├── init-script.sh # Copied as-is
295
+ └── config/ # Entire directory copied
296
+ ├── settings.json
297
+ └── rules.yaml
298
+ ```
299
+
300
+ ### Output
301
+
302
+ ```
303
+ .devcontainer/
304
+ ├── devcontainer.json
305
+ ├── docker-compose.my-service.yml
306
+ ├── .env.example # Merged from all overlays
307
+ ├── my-service-config.yaml # Copied from overlay
308
+ ├── init-script.sh # Copied from overlay
309
+ └── config/ # Copied from overlay
310
+ ├── settings.json
311
+ └── rules.yaml
312
+ ```
313
+
314
+ ### Configuration Best Practices
315
+
316
+ 1. **Use relative paths** in docker-compose.yml
317
+ 2. **Reference .env variables** in config files when possible
318
+ 3. **Provide examples** - Include commented-out options
319
+ 4. **Document structure** - Add comments explaining sections
320
+
321
+ ## README.md
322
+
323
+ Document your overlay for users.
324
+
325
+ ### Template
326
+
327
+ ````markdown
328
+ # My Service Overlay
329
+
330
+ Brief description of what this overlay provides.
331
+
332
+ ## What's Included
333
+
334
+ - Service name and version
335
+ - Key features
336
+ - Pre-configured settings
337
+
338
+ ## Ports
339
+
340
+ - `8080` - Main service API
341
+ - `9000` - Admin dashboard
342
+
343
+ ## Configuration
344
+
345
+ Description of main configuration file(s).
346
+
347
+ ### Key Settings
348
+
349
+ ```yaml
350
+ # my-service-config.yaml
351
+ server:
352
+ port: 8080
353
+ host: 0.0.0.0
354
+ ```
355
+ ````
356
+
357
+ ## Environment Variables
358
+
359
+ ```bash
360
+ # Service version
361
+ MY_SERVICE_VERSION=latest
362
+
363
+ # Service port
364
+ MY_SERVICE_PORT=8080
365
+ ```
366
+
367
+ ## Usage
368
+
369
+ ### Basic Usage
370
+
371
+ Code example showing how to use the service from your application.
372
+
373
+ ### Advanced Configuration
374
+
375
+ More complex examples.
376
+
377
+ ## Dependencies
378
+
379
+ Works best with:
380
+
381
+ - **other-overlay** - Why it's useful
382
+ - **another-overlay** - What it provides
383
+
384
+ ## Typical Stacks
385
+
386
+ ```bash
387
+ compose + my-language + my-service + postgres
388
+ ```
389
+
390
+ ## Troubleshooting
391
+
392
+ Common issues and solutions.
393
+
394
+ ````
395
+
396
+ ## Dependencies Between Overlays
397
+
398
+ ### Declaring Dependencies
399
+
400
+ In your `docker-compose.yml`, list ALL potential dependencies:
401
+
402
+ ```yaml
403
+ services:
404
+ my-service:
405
+ depends_on:
406
+ - postgres
407
+ - redis
408
+ - other-service
409
+ ````
410
+
411
+ The composer will automatically:
412
+
413
+ 1. Remove dependencies not selected by the user
414
+ 2. Remove the `depends_on` field if empty
415
+ 3. Order services correctly
416
+
417
+ ### Dependency Patterns
418
+
419
+ **Infrastructure dependency:**
420
+
421
+ ```yaml
422
+ my-app:
423
+ depends_on:
424
+ - postgres # Database must start first
425
+ ```
426
+
427
+ **Pipeline dependency:**
428
+
429
+ ```yaml
430
+ otel-collector:
431
+ depends_on:
432
+ - jaeger # Backends must start first
433
+ - prometheus
434
+ - loki
435
+ ```
436
+
437
+ **Visualization dependency:**
438
+
439
+ ```yaml
440
+ grafana:
441
+ depends_on:
442
+ - prometheus # Data sources must start first
443
+ - loki
444
+ ```
445
+
446
+ ## Testing Your Overlay
447
+
448
+ ### 1. Test Standalone
449
+
450
+ ```bash
451
+ npm run init -- --stack compose --my-overlay
452
+ ```
453
+
454
+ ### 2. Test With Dependencies
455
+
456
+ ```bash
457
+ npm run init -- --stack compose --my-overlay --postgres --redis
458
+ ```
459
+
460
+ ### 3. Test In Combination
461
+
462
+ ```bash
463
+ npm run init -- --stack compose --language nodejs --my-overlay --postgres
464
+ ```
465
+
466
+ ### 4. Verify Output
467
+
468
+ Check that:
469
+
470
+ - [ ] devcontainer.json has your features merged
471
+ - [ ] docker-compose.my-overlay.yml exists
472
+ - [ ] .env.example includes your variables
473
+ - [ ] Config files are copied correctly
474
+ - [ ] Services start in correct order
475
+
476
+ ### 5. Test In Container
477
+
478
+ ```bash
479
+ cd output-directory
480
+ code .
481
+ # Reopen in Container
482
+ # Verify service is running: docker-compose ps
483
+ ```
484
+
485
+ ## Common Patterns
486
+
487
+ ### Language Overlay
488
+
489
+ No docker-compose, just features:
490
+
491
+ ```json
492
+ {
493
+ "features": {
494
+ "ghcr.io/devcontainers/features/node:1": {
495
+ "version": "lts"
496
+ }
497
+ },
498
+ "customizations": {
499
+ "vscode": {
500
+ "extensions": ["dbaeumer.vscode-eslint"]
501
+ }
502
+ }
503
+ }
504
+ ```
505
+
506
+ ### Service Overlay
507
+
508
+ With docker-compose and config:
509
+
510
+ ```
511
+ my-service/
512
+ ├── devcontainer.patch.json # Ports, runServices
513
+ ├── docker-compose.yml # Service definition
514
+ ├── .env.example # Environment variables
515
+ └── config.yaml # Service configuration
516
+ ```
517
+
518
+ ### Tool Overlay
519
+
520
+ CLI tools without services:
521
+
522
+ ```json
523
+ {
524
+ "features": {
525
+ "ghcr.io/devcontainers/features/aws-cli:1": {}
526
+ },
527
+ "customizations": {
528
+ "vscode": {
529
+ "extensions": ["amazonwebservices.aws-toolkit-vscode"]
530
+ }
531
+ }
532
+ }
533
+ ```
534
+
535
+ ## Checklist
536
+
537
+ Before submitting an overlay:
538
+
539
+ - [ ] devcontainer.patch.json validates against schema
540
+ - [ ] docker-compose.yml uses version "3.8" and devnet network
541
+ - [ ] .env.example has sensible defaults and comments
542
+ - [ ] README.md documents ports, environment variables, usage
543
+ - [ ] runServices includes service names
544
+ - [ ] \_serviceOrder is set appropriately
545
+ - [ ] depends_on lists all potential dependencies
546
+ - [ ] Tested standalone and in combination
547
+ - [ ] Added to overlays/README.md
548
+ - [ ] Added to appropriate type in tool/schema/types.ts
549
+ - [ ] Updated questionnaire in scripts/init.ts (if applicable)