container-superposition 0.1.7 → 0.1.9

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 (242) hide show
  1. package/README.md +24 -15
  2. package/dist/scripts/init.js +1 -1537
  3. package/dist/scripts/init.js.map +1 -1
  4. package/dist/tool/cli/args.d.ts +20 -0
  5. package/dist/tool/cli/args.d.ts.map +1 -0
  6. package/dist/tool/cli/args.js +325 -0
  7. package/dist/tool/cli/args.js.map +1 -0
  8. package/dist/tool/cli/run.d.ts +2 -0
  9. package/dist/tool/cli/run.d.ts.map +1 -0
  10. package/dist/tool/cli/run.js +318 -0
  11. package/dist/tool/cli/run.js.map +1 -0
  12. package/dist/tool/commands/adopt.js +1 -1
  13. package/dist/tool/commands/adopt.js.map +1 -1
  14. package/dist/tool/commands/doctor.d.ts +1 -0
  15. package/dist/tool/commands/doctor.d.ts.map +1 -1
  16. package/dist/tool/commands/doctor.js +1510 -78
  17. package/dist/tool/commands/doctor.js.map +1 -1
  18. package/dist/tool/commands/explain.d.ts.map +1 -1
  19. package/dist/tool/commands/explain.js +9 -0
  20. package/dist/tool/commands/explain.js.map +1 -1
  21. package/dist/tool/commands/migrate.d.ts +7 -0
  22. package/dist/tool/commands/migrate.d.ts.map +1 -0
  23. package/dist/tool/commands/migrate.js +52 -0
  24. package/dist/tool/commands/migrate.js.map +1 -0
  25. package/dist/tool/questionnaire/answers.d.ts +16 -0
  26. package/dist/tool/questionnaire/answers.d.ts.map +1 -0
  27. package/dist/tool/questionnaire/answers.js +102 -0
  28. package/dist/tool/questionnaire/answers.js.map +1 -0
  29. package/dist/tool/questionnaire/composer.d.ts +6 -4
  30. package/dist/tool/questionnaire/composer.d.ts.map +1 -1
  31. package/dist/tool/questionnaire/composer.js +778 -45
  32. package/dist/tool/questionnaire/composer.js.map +1 -1
  33. package/dist/tool/questionnaire/presets.d.ts +60 -0
  34. package/dist/tool/questionnaire/presets.d.ts.map +1 -0
  35. package/dist/tool/questionnaire/presets.js +165 -0
  36. package/dist/tool/questionnaire/presets.js.map +1 -0
  37. package/dist/tool/questionnaire/questionnaire.d.ts +10 -0
  38. package/dist/tool/questionnaire/questionnaire.d.ts.map +1 -0
  39. package/dist/tool/questionnaire/questionnaire.js +582 -0
  40. package/dist/tool/questionnaire/questionnaire.js.map +1 -0
  41. package/dist/tool/schema/manifest-migrations.d.ts +5 -0
  42. package/dist/tool/schema/manifest-migrations.d.ts.map +1 -1
  43. package/dist/tool/schema/manifest-migrations.js +45 -0
  44. package/dist/tool/schema/manifest-migrations.js.map +1 -1
  45. package/dist/tool/schema/overlay-loader.d.ts.map +1 -1
  46. package/dist/tool/schema/overlay-loader.js +24 -0
  47. package/dist/tool/schema/overlay-loader.js.map +1 -1
  48. package/dist/tool/schema/project-config.d.ts +13 -1
  49. package/dist/tool/schema/project-config.d.ts.map +1 -1
  50. package/dist/tool/schema/project-config.js +188 -10
  51. package/dist/tool/schema/project-config.js.map +1 -1
  52. package/dist/tool/schema/target-rules.d.ts +78 -0
  53. package/dist/tool/schema/target-rules.d.ts.map +1 -0
  54. package/dist/tool/schema/target-rules.js +367 -0
  55. package/dist/tool/schema/target-rules.js.map +1 -0
  56. package/dist/tool/schema/types.d.ts +42 -3
  57. package/dist/tool/schema/types.d.ts.map +1 -1
  58. package/dist/tool/utils/parameters.d.ts +76 -0
  59. package/dist/tool/utils/parameters.d.ts.map +1 -0
  60. package/dist/tool/utils/parameters.js +125 -0
  61. package/dist/tool/utils/parameters.js.map +1 -0
  62. package/dist/tool/utils/paths.d.ts +2 -0
  63. package/dist/tool/utils/paths.d.ts.map +1 -0
  64. package/dist/tool/utils/paths.js +31 -0
  65. package/dist/tool/utils/paths.js.map +1 -0
  66. package/docs/deployment-targets.md +88 -56
  67. package/docs/examples.md +20 -17
  68. package/docs/filesystem-contract.md +5 -0
  69. package/docs/minimal-and-editor.md +65 -5
  70. package/docs/overlay-imports.md +92 -14
  71. package/docs/overlays.md +231 -135
  72. package/docs/specs/001-verbose-plan-graph/spec.md +5 -12
  73. package/docs/specs/002-superposition-config-file/spec.md +5 -12
  74. package/docs/specs/003-mkdocs2-overlay/spec.md +2 -9
  75. package/docs/specs/004-doctor-fix/spec.md +1 -8
  76. package/docs/specs/005-cuda-overlay/spec.md +2 -9
  77. package/docs/specs/006-rocm-overlay/spec.md +3 -10
  78. package/docs/specs/007-target-aware-generation/spec.md +119 -0
  79. package/docs/specs/008-project-file-canonical/spec.md +82 -0
  80. package/docs/specs/009-project-env/spec.md +140 -0
  81. package/docs/specs/010-compose-env-materialization/spec.md +123 -0
  82. package/docs/specs/011-overlay-parameters/spec.md +228 -0
  83. package/docs/specs/012-ollama-cli-overlay/spec.md +47 -0
  84. package/docs/specs/013-doctor-dependency-check/spec.md +250 -0
  85. package/docs/specs/014-doctor-compose-port-cross-validation/spec.md +276 -0
  86. package/docs/specs/015-doctor-env-example-drift/spec.md +248 -0
  87. package/docs/specs/016-doctor-reproducibility-check/spec.md +276 -0
  88. package/docs/specs/017-doctor-dry-run/spec.md +276 -0
  89. package/docs/specs/018-init-project-file/spec.md +59 -0
  90. package/docs/specs/taxonomy.md +186 -0
  91. package/overlays/.presets/full-observability.yml +113 -0
  92. package/overlays/.presets/k8s-dev.yml +174 -0
  93. package/overlays/.presets/local-llm.yml +105 -0
  94. package/overlays/.presets/vector-ai.yml +150 -0
  95. package/overlays/.shared/README.md +27 -2
  96. package/overlays/.shared/compose/nvidia-gpu-devcontainer.yml +22 -0
  97. package/overlays/.shared/vscode/js-ts-settings.json +19 -0
  98. package/overlays/.shared/vscode/markdown-extensions.json +8 -0
  99. package/overlays/alertmanager/devcontainer.patch.json +0 -1
  100. package/overlays/alertmanager/docker-compose.yml +8 -0
  101. package/overlays/alertmanager/overlay.yml +1 -0
  102. package/overlays/amp/devcontainer.patch.json +4 -1
  103. package/overlays/bun/devcontainer.patch.json +1 -10
  104. package/overlays/bun/overlay.yml +8 -1
  105. package/overlays/claude-code/devcontainer.patch.json +6 -1
  106. package/overlays/codex/devcontainer.patch.json +5 -0
  107. package/overlays/comfyui/.env.example +34 -0
  108. package/overlays/comfyui/README.md +342 -0
  109. package/overlays/comfyui/devcontainer.patch.json +15 -0
  110. package/overlays/comfyui/docker-compose.yml +40 -0
  111. package/overlays/comfyui/overlay.yml +24 -0
  112. package/overlays/comfyui/setup.sh +36 -0
  113. package/overlays/comfyui/verify.sh +103 -0
  114. package/overlays/commitlint/devcontainer.patch.json +1 -6
  115. package/overlays/docker-sock/overlay.yml +1 -0
  116. package/overlays/dotnet/overlay.yml +4 -1
  117. package/overlays/fuseki/.env.example +5 -0
  118. package/overlays/fuseki/README.md +173 -0
  119. package/overlays/fuseki/devcontainer.patch.json +18 -0
  120. package/overlays/fuseki/docker-compose.yml +29 -0
  121. package/overlays/fuseki/overlay.yml +42 -0
  122. package/overlays/fuseki/verify.sh +58 -0
  123. package/overlays/gemini-cli/devcontainer.patch.json +4 -1
  124. package/overlays/go/overlay.yml +6 -1
  125. package/overlays/grafana/devcontainer.patch.json +0 -1
  126. package/overlays/grafana/docker-compose.yml +8 -2
  127. package/overlays/grafana/overlay.yml +6 -1
  128. package/overlays/jaeger/.env.example +11 -0
  129. package/overlays/jaeger/README.md +33 -4
  130. package/overlays/jaeger/devcontainer.patch.json +9 -1
  131. package/overlays/jaeger/docker-compose.yml +17 -0
  132. package/overlays/jaeger/overlay.yml +1 -12
  133. package/overlays/java/overlay.yml +6 -1
  134. package/overlays/jupyter/docker-compose.yml +1 -0
  135. package/overlays/jupyter/overlay.yml +1 -0
  136. package/overlays/k3d/README.md +201 -0
  137. package/overlays/k3d/devcontainer.patch.json +9 -0
  138. package/overlays/k3d/overlay.yml +19 -0
  139. package/overlays/k3d/setup.sh +34 -0
  140. package/overlays/k3d/verify.sh +38 -0
  141. package/overlays/keycloak/devcontainer.patch.json +0 -1
  142. package/overlays/keycloak/docker-compose.yml +1 -0
  143. package/overlays/keycloak/overlay.yml +15 -0
  144. package/overlays/localstack/docker-compose.yml +1 -0
  145. package/overlays/localstack/overlay.yml +19 -1
  146. package/overlays/loki/devcontainer.patch.json +0 -1
  147. package/overlays/loki/docker-compose.yml +8 -0
  148. package/overlays/loki/overlay.yml +1 -0
  149. package/overlays/mailpit/docker-compose.yml +1 -0
  150. package/overlays/mailpit/overlay.yml +1 -0
  151. package/overlays/minio/devcontainer.patch.json +1 -1
  152. package/overlays/minio/docker-compose.yml +1 -0
  153. package/overlays/minio/overlay.yml +23 -2
  154. package/overlays/mkdocs/devcontainer.patch.json +1 -5
  155. package/overlays/mkdocs/overlay.yml +3 -1
  156. package/overlays/mkdocs2/devcontainer.patch.json +1 -5
  157. package/overlays/mkdocs2/overlay.yml +2 -0
  158. package/overlays/mongodb/docker-compose.yml +2 -0
  159. package/overlays/mongodb/overlay.yml +26 -2
  160. package/overlays/mysql/docker-compose.yml +2 -0
  161. package/overlays/mysql/overlay.yml +36 -2
  162. package/overlays/nats/docker-compose.yml +1 -0
  163. package/overlays/nats/overlay.yml +18 -2
  164. package/overlays/nodejs/devcontainer.patch.json +1 -12
  165. package/overlays/nodejs/overlay.yml +8 -1
  166. package/overlays/ollama/.env.example +14 -0
  167. package/overlays/ollama/README.md +326 -0
  168. package/overlays/ollama/devcontainer.patch.json +14 -0
  169. package/overlays/ollama/docker-compose.yml +25 -0
  170. package/overlays/ollama/overlay.yml +27 -0
  171. package/overlays/ollama/verify.sh +76 -0
  172. package/overlays/ollama-cli/README.md +90 -0
  173. package/overlays/ollama-cli/devcontainer.patch.json +3 -0
  174. package/overlays/ollama-cli/overlay.yml +19 -0
  175. package/overlays/ollama-cli/setup.sh +103 -0
  176. package/overlays/ollama-cli/verify.sh +49 -0
  177. package/overlays/open-webui/.env.example +5 -0
  178. package/overlays/open-webui/README.md +162 -0
  179. package/overlays/open-webui/devcontainer.patch.json +14 -0
  180. package/overlays/open-webui/docker-compose.yml +24 -0
  181. package/overlays/open-webui/overlay.yml +45 -0
  182. package/overlays/opencode/devcontainer.patch.json +4 -1
  183. package/overlays/otel-collector/README.md +4 -0
  184. package/overlays/otel-collector/devcontainer.patch.json +4 -1
  185. package/overlays/otel-collector/docker-compose.yml +8 -4
  186. package/overlays/otel-collector/overlay.yml +1 -0
  187. package/overlays/otel-demo-nodejs/devcontainer.patch.json +0 -1
  188. package/overlays/otel-demo-nodejs/docker-compose.yml +1 -0
  189. package/overlays/otel-demo-nodejs/overlay.yml +9 -1
  190. package/overlays/otel-demo-python/devcontainer.patch.json +0 -1
  191. package/overlays/otel-demo-python/docker-compose.yml +1 -0
  192. package/overlays/otel-demo-python/overlay.yml +6 -1
  193. package/overlays/pandoc/README.md +10 -0
  194. package/overlays/pandoc/devcontainer.patch.json +0 -5
  195. package/overlays/pandoc/overlay.yml +2 -0
  196. package/overlays/pandoc/setup.sh +10 -0
  197. package/overlays/pgvector/.env.example +6 -0
  198. package/overlays/pgvector/README.md +215 -0
  199. package/overlays/pgvector/devcontainer.patch.json +29 -0
  200. package/overlays/pgvector/docker-compose.yml +33 -0
  201. package/overlays/pgvector/overlay.yml +47 -0
  202. package/overlays/playwright/devcontainer.patch.json +0 -5
  203. package/overlays/playwright/overlay.yml +2 -1
  204. package/overlays/postgres/.env.example +5 -5
  205. package/overlays/postgres/devcontainer.patch.json +4 -4
  206. package/overlays/postgres/docker-compose.yml +11 -6
  207. package/overlays/postgres/overlay.yml +23 -2
  208. package/overlays/pre-commit/devcontainer.patch.json +1 -7
  209. package/overlays/prometheus/devcontainer.patch.json +0 -1
  210. package/overlays/prometheus/docker-compose.yml +8 -0
  211. package/overlays/prometheus/overlay.yml +1 -0
  212. package/overlays/promtail/devcontainer.patch.json +1 -2
  213. package/overlays/promtail/docker-compose.yml +8 -0
  214. package/overlays/promtail/overlay.yml +1 -0
  215. package/overlays/qdrant/.env.example +4 -0
  216. package/overlays/qdrant/README.md +216 -0
  217. package/overlays/qdrant/devcontainer.patch.json +20 -0
  218. package/overlays/qdrant/docker-compose.yml +26 -0
  219. package/overlays/qdrant/overlay.yml +44 -0
  220. package/overlays/rabbitmq/docker-compose.yml +1 -0
  221. package/overlays/rabbitmq/overlay.yml +25 -2
  222. package/overlays/redis/docker-compose.yml +7 -0
  223. package/overlays/redis/overlay.yml +15 -1
  224. package/overlays/redpanda/docker-compose.yml +1 -0
  225. package/overlays/redpanda/overlay.yml +15 -3
  226. package/overlays/rocm/overlay.yml +2 -1
  227. package/overlays/rust/overlay.yml +3 -1
  228. package/overlays/skaffold/README.md +256 -0
  229. package/overlays/skaffold/devcontainer.patch.json +9 -0
  230. package/overlays/skaffold/overlay.yml +20 -0
  231. package/overlays/skaffold/setup.sh +33 -0
  232. package/overlays/skaffold/verify.sh +24 -0
  233. package/overlays/sqlserver/docker-compose.yml +1 -0
  234. package/overlays/sqlserver/overlay.yml +17 -0
  235. package/overlays/tempo/devcontainer.patch.json +0 -1
  236. package/overlays/tempo/docker-compose.yml +8 -0
  237. package/overlays/tempo/overlay.yml +1 -0
  238. package/overlays/windsurf-cli/devcontainer.patch.json +4 -1
  239. package/package.json +3 -2
  240. package/tool/schema/config.schema.json +31 -1
  241. package/tool/schema/overlay-manifest.schema.json +33 -0
  242. package/overlays/.shared/otel/otel-base-config.yaml +0 -30
@@ -0,0 +1,216 @@
1
+ # Qdrant Overlay
2
+
3
+ Adds [Qdrant](https://qdrant.tech) as a Docker Compose service, providing a high-performance vector database for similarity search and embedding-based retrieval.
4
+
5
+ ## Features
6
+
7
+ - **Qdrant vector database** — Store, index, and query high-dimensional embedding vectors at scale
8
+ - **REST API on port 6333** — Full-featured HTTP API for collections, points, and search
9
+ - **gRPC API on port 6334** — High-throughput binary protocol for production workloads
10
+ - **Persistent storage** — Named Docker volume preserves data across container rebuilds
11
+ - **Pre-configured `QDRANT_URL`** — Container environment variable set for easy SDK usage
12
+ - **Health check** — Compose readiness check against `/readyz` before dependent services start
13
+
14
+ ## How It Works
15
+
16
+ Qdrant runs as a Docker Compose service alongside your devcontainer. The devcontainer connects to it using the hostname `qdrant` on port `6333` (REST) or `6334` (gRPC).
17
+
18
+ **Service configuration:**
19
+
20
+ - Image: `qdrant/qdrant:latest`
21
+ - Network: `devnet` (shared with the dev container)
22
+ - Ports: `6333` (REST API), `6334` (gRPC)
23
+ - Volume: `qdrant-data` for persistent vector storage
24
+
25
+ The following environment variables are pre-set in the devcontainer:
26
+
27
+ | Variable | Value |
28
+ | ------------- | -------------------- |
29
+ | `QDRANT_HOST` | `qdrant` |
30
+ | `QDRANT_PORT` | `6333` |
31
+ | `QDRANT_URL` | `http://qdrant:6333` |
32
+
33
+ ## Common Commands
34
+
35
+ ### REST API
36
+
37
+ ```bash
38
+ # Health check
39
+ curl http://qdrant:6333/healthz
40
+
41
+ # Create a collection
42
+ curl -X PUT http://qdrant:6333/collections/my_collection \
43
+ -H "Content-Type: application/json" \
44
+ -d '{
45
+ "vectors": {
46
+ "size": 1536,
47
+ "distance": "Cosine"
48
+ }
49
+ }'
50
+
51
+ # Insert points
52
+ curl -X PUT http://qdrant:6333/collections/my_collection/points \
53
+ -H "Content-Type: application/json" \
54
+ -d '{
55
+ "points": [
56
+ {
57
+ "id": 1,
58
+ "vector": [0.1, 0.2, 0.3],
59
+ "payload": {"text": "example document"}
60
+ }
61
+ ]
62
+ }'
63
+
64
+ # Search for similar vectors
65
+ curl -X POST http://qdrant:6333/collections/my_collection/points/search \
66
+ -H "Content-Type: application/json" \
67
+ -d '{
68
+ "vector": [0.1, 0.2, 0.3],
69
+ "limit": 5
70
+ }'
71
+
72
+ # List collections
73
+ curl http://qdrant:6333/collections
74
+ ```
75
+
76
+ ### Python SDK
77
+
78
+ ```bash
79
+ pip install qdrant-client
80
+
81
+ python - <<'EOF'
82
+ from qdrant_client import QdrantClient
83
+ from qdrant_client.models import Distance, VectorParams, PointStruct
84
+
85
+ client = QdrantClient(url="http://qdrant:6333")
86
+
87
+ # Create collection
88
+ client.create_collection(
89
+ collection_name="my_collection",
90
+ vectors_config=VectorParams(size=1536, distance=Distance.COSINE),
91
+ )
92
+
93
+ # Insert vectors
94
+ client.upsert(
95
+ collection_name="my_collection",
96
+ points=[
97
+ PointStruct(id=1, vector=[0.1] * 1536, payload={"text": "hello"})
98
+ ],
99
+ )
100
+
101
+ # Search
102
+ results = client.search(
103
+ collection_name="my_collection",
104
+ query_vector=[0.1] * 1536,
105
+ limit=5,
106
+ )
107
+ print(results)
108
+ EOF
109
+ ```
110
+
111
+ ### Node.js SDK
112
+
113
+ ```bash
114
+ npm install @qdrant/js-client-rest
115
+
116
+ node - <<'EOF'
117
+ import { QdrantClient } from "@qdrant/js-client-rest";
118
+
119
+ const client = new QdrantClient({ url: "http://qdrant:6333" });
120
+
121
+ await client.createCollection("my_collection", {
122
+ vectors: { size: 1536, distance: "Cosine" },
123
+ });
124
+
125
+ const results = await client.search("my_collection", {
126
+ vector: Array(1536).fill(0.1),
127
+ limit: 5,
128
+ });
129
+ console.log(results);
130
+ EOF
131
+ ```
132
+
133
+ ## Configuration
134
+
135
+ ### Environment Variables
136
+
137
+ | Variable | Default | Description |
138
+ | ------------------ | -------- | ----------------------- |
139
+ | `QDRANT_VERSION` | `latest` | Qdrant Docker image tag |
140
+ | `QDRANT_PORT` | `6333` | Host port for REST API |
141
+ | `QDRANT_GRPC_PORT` | `6334` | Host port for gRPC API |
142
+
143
+ ### Port Customization
144
+
145
+ ```bash
146
+ # .devcontainer/.env
147
+ QDRANT_PORT=6335
148
+ QDRANT_GRPC_PORT=6336
149
+ ```
150
+
151
+ ## Use Cases
152
+
153
+ - **RAG (Retrieval-Augmented Generation)** — Store embeddings for document chunks; retrieve context for LLM queries
154
+ - **Semantic search** — Find similar documents, images, or code snippets by embedding similarity
155
+ - **Recommendation systems** — Surface similar items based on learned embeddings
156
+ - **Anomaly detection** — Identify outliers in high-dimensional embedding spaces
157
+ - **Local AI pipelines** — Pair with `ollama` for fully offline embedding + retrieval workflows
158
+
159
+ **Integrates well with:**
160
+
161
+ - `ollama` — Generate embeddings locally (`ollama pull nomic-embed-text`)
162
+ - `python` — LangChain, LlamaIndex, or raw `qdrant-client` integrations
163
+ - `nodejs` — `@qdrant/js-client-rest` for JavaScript embeddings workflows
164
+
165
+ ## Troubleshooting
166
+
167
+ ### Service Not Ready
168
+
169
+ ```bash
170
+ # Check service status
171
+ docker compose ps qdrant
172
+
173
+ # View Qdrant logs
174
+ docker compose logs qdrant
175
+
176
+ # Test health endpoint
177
+ curl http://qdrant:6333/healthz
178
+ ```
179
+
180
+ ### Port Conflict
181
+
182
+ If ports 6333 or 6334 are already in use:
183
+
184
+ ```bash
185
+ # .devcontainer/.env
186
+ QDRANT_PORT=6335
187
+ QDRANT_GRPC_PORT=6336
188
+ ```
189
+
190
+ ### Data Persistence
191
+
192
+ Qdrant data is stored in the `qdrant-data` named Docker volume. It persists across container rebuilds but is scoped to the Docker environment:
193
+
194
+ ```bash
195
+ # Inspect the volume
196
+ docker volume inspect qdrant-data
197
+
198
+ # Backup data
199
+ docker run --rm -v qdrant-data:/data -v $(pwd):/backup alpine \
200
+ tar czf /backup/qdrant-backup.tar.gz /data
201
+ ```
202
+
203
+ ## References
204
+
205
+ - [Qdrant Documentation](https://qdrant.tech/documentation/)
206
+ - [Qdrant REST API Reference](https://qdrant.github.io/qdrant/redoc/index.html)
207
+ - [Qdrant Docker Hub](https://hub.docker.com/r/qdrant/qdrant)
208
+ - [Python SDK](https://python-client.qdrant.tech/)
209
+ - [JavaScript SDK](https://github.com/qdrant/qdrant-js)
210
+
211
+ **Related Overlays:**
212
+
213
+ - [`pgvector`](../pgvector/README.md) — PostgreSQL-native vector storage (alternative; conflicts with `postgres`)
214
+ - [`ollama`](../ollama/README.md) — Local LLM and embedding generation
215
+ - [`python`](../python/README.md) — Python development environment
216
+ - [`nodejs`](../nodejs/README.md) — Node.js development environment
@@ -0,0 +1,20 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
3
+ "runServices": ["qdrant"],
4
+ "forwardPorts": [6333, 6334],
5
+ "portsAttributes": {
6
+ "6333": {
7
+ "label": "Qdrant REST API",
8
+ "onAutoForward": "notify"
9
+ },
10
+ "6334": {
11
+ "label": "Qdrant gRPC",
12
+ "onAutoForward": "ignore"
13
+ }
14
+ },
15
+ "containerEnv": {
16
+ "QDRANT_HOST": "qdrant",
17
+ "QDRANT_PORT": "6333",
18
+ "QDRANT_URL": "http://qdrant:6333"
19
+ }
20
+ }
@@ -0,0 +1,26 @@
1
+ version: '3.8'
2
+
3
+ services:
4
+ qdrant:
5
+ image: qdrant/qdrant:${QDRANT_VERSION:-{{cs.QDRANT_VERSION}}}
6
+ restart: unless-stopped
7
+ volumes:
8
+ - qdrant-data:/qdrant/storage
9
+ ports:
10
+ - '${QDRANT_PORT:-{{cs.QDRANT_PORT}}}:6333'
11
+ - '${QDRANT_GRPC_PORT:-{{cs.QDRANT_GRPC_PORT}}}:6334'
12
+ networks:
13
+ - devnet
14
+ healthcheck:
15
+ test: ['CMD-SHELL', 'curl -sf http://localhost:6333/readyz || exit 1']
16
+ interval: 10s
17
+ timeout: 5s
18
+ retries: 5
19
+ start_period: 10s
20
+
21
+ volumes:
22
+ qdrant-data:
23
+
24
+ networks:
25
+ devnet:
26
+ name: devnet
@@ -0,0 +1,44 @@
1
+ id: qdrant
2
+ name: Qdrant
3
+ description: High-performance vector database for similarity search and embeddings
4
+ category: database
5
+ supports:
6
+ - compose
7
+ requires: []
8
+ suggests:
9
+ - ollama
10
+ - python
11
+ - nodejs
12
+ - prometheus
13
+ - grafana
14
+ - otel-collector
15
+ conflicts: []
16
+ serviceOrder: 0
17
+ tags:
18
+ - database
19
+ - vector
20
+ - embeddings
21
+ - search
22
+ - qdrant
23
+ ports:
24
+ - port: 6333
25
+ service: qdrant
26
+ protocol: http
27
+ description: Qdrant REST API
28
+ onAutoForward: notify
29
+ connectionStringTemplate: 'http://{host}:{port}'
30
+ - port: 6334
31
+ service: qdrant
32
+ protocol: grpc
33
+ description: Qdrant gRPC API
34
+ onAutoForward: ignore
35
+ parameters:
36
+ QDRANT_VERSION:
37
+ description: Qdrant Docker image tag
38
+ default: v1.9.0
39
+ QDRANT_PORT:
40
+ description: Host port mapped to Qdrant REST API (6333 inside container)
41
+ default: '6333'
42
+ QDRANT_GRPC_PORT:
43
+ description: Host port mapped to Qdrant gRPC API (6334 inside container)
44
+ default: '6334'
@@ -28,3 +28,4 @@ volumes:
28
28
 
29
29
  networks:
30
30
  devnet:
31
+ name: devnet
@@ -1,12 +1,35 @@
1
1
  id: rabbitmq
2
2
  name: RabbitMQ
3
3
  description: Message broker with AMQP protocol and management UI
4
- category: database
4
+ category: messaging
5
5
  supports:
6
6
  - compose
7
7
  requires: []
8
- suggests: []
8
+ suggests:
9
+ - prometheus
10
+ - grafana
9
11
  conflicts: []
12
+ serviceOrder: 0
13
+ parameters:
14
+ RABBITMQ_VERSION:
15
+ description: RabbitMQ image version tag (management variant used)
16
+ default: 3-management
17
+ RABBITMQ_PORT:
18
+ description: Host port mapped to AMQP (5672 inside container)
19
+ default: '5672'
20
+ RABBITMQ_MANAGEMENT_PORT:
21
+ description: Host port mapped to management UI (15672 inside container)
22
+ default: '15672'
23
+ RABBITMQ_USER:
24
+ description: RabbitMQ default username
25
+ default: guest
26
+ RABBITMQ_PASSWORD:
27
+ description: RabbitMQ default password
28
+ default: guest
29
+ sensitive: true
30
+ RABBITMQ_VHOST:
31
+ description: RabbitMQ default virtual host
32
+ default: /
10
33
  tags:
11
34
  - database
12
35
  - messaging
@@ -13,9 +13,16 @@ services:
13
13
  REDIS_PASSWORD: ${REDIS_PASSWORD:-}
14
14
  networks:
15
15
  - devnet
16
+ healthcheck:
17
+ test: ['CMD', 'redis-cli', 'ping']
18
+ interval: 10s
19
+ timeout: 5s
20
+ retries: 5
21
+ start_period: 10s
16
22
 
17
23
  volumes:
18
24
  redis-data:
19
25
 
20
26
  networks:
21
27
  devnet:
28
+ name: devnet
@@ -5,8 +5,22 @@ category: database
5
5
  supports:
6
6
  - compose
7
7
  requires: []
8
- suggests: []
8
+ suggests:
9
+ - prometheus
10
+ - grafana
9
11
  conflicts: []
12
+ serviceOrder: 0
13
+ parameters:
14
+ REDIS_VERSION:
15
+ description: Redis image version tag
16
+ default: '7'
17
+ REDIS_PORT:
18
+ description: Host port mapped to Redis (6379 inside container)
19
+ default: '6379'
20
+ REDIS_PASSWORD:
21
+ description: Redis password (leave empty to disable authentication)
22
+ default: ''
23
+ sensitive: true
10
24
  tags:
11
25
  - database
12
26
  - cache
@@ -63,3 +63,4 @@ volumes:
63
63
 
64
64
  networks:
65
65
  devnet:
66
+ name: devnet
@@ -1,12 +1,24 @@
1
1
  id: redpanda
2
2
  name: Redpanda
3
3
  description: Kafka-compatible event streaming with web console
4
- category: database
4
+ category: messaging
5
5
  supports:
6
6
  - compose
7
7
  requires: []
8
- suggests: []
9
- conflicts: []
8
+ suggests:
9
+ - prometheus
10
+ - grafana
11
+ conflicts:
12
+ - mysql
13
+ - mongodb
14
+ - nodejs
15
+ - bun
16
+ - go
17
+ - java
18
+ - dotnet
19
+ - otel-demo-nodejs
20
+ - otel-demo-python
21
+ serviceOrder: 0
10
22
  tags:
11
23
  - database
12
24
  - messaging
@@ -4,7 +4,8 @@ description: AMD ROCm libraries and GPU passthrough for containerized ML/inferen
4
4
  category: dev
5
5
  supports: []
6
6
  requires: []
7
- suggests: []
7
+ suggests:
8
+ - comfyui
8
9
  conflicts:
9
10
  - cuda
10
11
  tags:
@@ -5,7 +5,9 @@ category: language
5
5
  supports: []
6
6
  requires: []
7
7
  suggests: []
8
- conflicts: []
8
+ conflicts:
9
+ - grafana
10
+ - open-webui
9
11
  tags:
10
12
  - language
11
13
  - rust
@@ -0,0 +1,256 @@
1
+ # Skaffold Overlay
2
+
3
+ Installs [Skaffold](https://skaffold.dev), Google's command-line tool for continuous development on Kubernetes — handling the build, push, and deploy lifecycle automatically as source files change.
4
+
5
+ > **Note:** This overlay conflicts with `tilt` because both tools serve the same "continuous Kubernetes development" role. Choose `skaffold` for a configuration-file-driven, CI-friendly pipeline, or `tilt` for a more interactive, UI-driven workflow.
6
+
7
+ ## Features
8
+
9
+ - **`skaffold dev`** — Watch source files and automatically rebuild, push, and redeploy on changes
10
+ - **`skaffold run`** — One-shot build and deploy pipeline for CI/CD integration
11
+ - **Declarative config** — `skaffold.yaml` defines the entire build-test-deploy pipeline as code
12
+ - **Multiple builders** — Docker, Buildpacks, Bazel, Jib (Maven/Gradle), and more
13
+ - **Multiple deployers** — `kubectl`, Helm, Kustomize, and Cloud Run
14
+ - **Test integration** — Container Structure Tests and custom test steps built in
15
+ - **Profile support** — Swap out configs per environment (dev, staging, prod)
16
+
17
+ ## How It Works
18
+
19
+ Skaffold is installed as a static binary in the devcontainer during `setup.sh`. It orchestrates the build-push-deploy cycle against whichever Kubernetes cluster is active in your `kubeconfig` (e.g. a k3d or kind cluster).
20
+
21
+ **Suggested overlays:**
22
+
23
+ - `kubectl-helm` — Kubernetes CLI and Helm used as Skaffold deployers
24
+ - `kind` — Full-conformance local Kubernetes cluster
25
+ - `k3d` — Lightweight local Kubernetes cluster
26
+
27
+ ## Installation
28
+
29
+ Skaffold is installed automatically during devcontainer creation via `setup.sh`:
30
+
31
+ - Downloads the Skaffold binary for your architecture (amd64/arm64)
32
+ - Installs to `/usr/local/bin/skaffold`
33
+ - Verifies the installation
34
+
35
+ ## Common Commands
36
+
37
+ ### Development Workflow
38
+
39
+ ```bash
40
+ # Continuous development — rebuild and redeploy on file changes
41
+ skaffold dev
42
+
43
+ # One-shot build + deploy
44
+ skaffold run
45
+
46
+ # Delete all resources deployed by Skaffold
47
+ skaffold delete
48
+
49
+ # Preview what Skaffold would deploy (dry run)
50
+ skaffold render
51
+ ```
52
+
53
+ ### Build and Test
54
+
55
+ ```bash
56
+ # Build images only (no deploy)
57
+ skaffold build
58
+
59
+ # Run tests only
60
+ skaffold test
61
+
62
+ # Build and push to a registry
63
+ skaffold build --push
64
+ ```
65
+
66
+ ### Profiles
67
+
68
+ ```bash
69
+ # Use a specific profile
70
+ skaffold dev --profile staging
71
+
72
+ # Combine multiple profiles
73
+ skaffold run --profile prod --profile feature-flag
74
+ ```
75
+
76
+ ### Debugging
77
+
78
+ ```bash
79
+ # Enable port-forwarding for services
80
+ skaffold dev --port-forward
81
+
82
+ # Verbose output
83
+ skaffold dev -v debug
84
+
85
+ # Show rendered manifests
86
+ skaffold render --output manifests.yaml
87
+ ```
88
+
89
+ ## Configuration
90
+
91
+ ### skaffold.yaml
92
+
93
+ Create a `skaffold.yaml` in your project root:
94
+
95
+ ```yaml
96
+ apiVersion: skaffold/v4beta11
97
+ kind: Config
98
+ metadata:
99
+ name: my-app
100
+ build:
101
+ artifacts:
102
+ - image: my-app
103
+ docker:
104
+ dockerfile: Dockerfile
105
+ deploy:
106
+ kubectl:
107
+ manifests:
108
+ - k8s/*.yaml
109
+ test:
110
+ - image: my-app
111
+ structureTests:
112
+ - ./structure-test.yaml
113
+ profiles:
114
+ - name: prod
115
+ deploy:
116
+ helm:
117
+ releases:
118
+ - name: my-app
119
+ chartPath: helm/my-app
120
+ ```
121
+
122
+ ### Common Builders
123
+
124
+ ```yaml
125
+ # Docker (default)
126
+ build:
127
+ artifacts:
128
+ - image: my-app
129
+ docker:
130
+ dockerfile: Dockerfile
131
+
132
+ # Buildpacks (no Dockerfile needed)
133
+ build:
134
+ artifacts:
135
+ - image: my-app
136
+ buildpacks:
137
+ builder: gcr.io/buildpacks/builder:v1
138
+
139
+ # Jib (Java/Maven)
140
+ build:
141
+ artifacts:
142
+ - image: my-app
143
+ jib:
144
+ project: my-module
145
+ ```
146
+
147
+ ### Common Deployers
148
+
149
+ ```yaml
150
+ # kubectl (plain manifests)
151
+ deploy:
152
+ kubectl:
153
+ manifests:
154
+ - k8s/**/*.yaml
155
+
156
+ # Helm
157
+ deploy:
158
+ helm:
159
+ releases:
160
+ - name: my-app
161
+ chartPath: helm/my-app
162
+ valuesFiles:
163
+ - helm/values.yaml
164
+
165
+ # Kustomize
166
+ deploy:
167
+ kustomize:
168
+ paths:
169
+ - k8s/overlays/dev
170
+ ```
171
+
172
+ ## Benefits vs Tilt
173
+
174
+ | Feature | Skaffold (this overlay) | Tilt |
175
+ | --------------------- | --------------------------------- | -------------------------------- |
176
+ | **Primary interface** | ✅ CLI + skaffold.yaml config | Interactive UI (port 10350) |
177
+ | **CI/CD suitability** | ✅ First-class CI support | ⚠️ UI-oriented, less CI-friendly |
178
+ | **Config format** | ✅ Declarative YAML | Starlark/Python (Tiltfile) |
179
+ | **Build systems** | ✅ Docker, Buildpacks, Jib, Bazel | Docker, Buildpacks |
180
+ | **Deploy targets** | ✅ kubectl, Helm, Kustomize, Run | kubectl, Helm |
181
+ | **Learning curve** | Lower (declarative YAML) | Programmable (more flexible) |
182
+ | **Debugging support** | ✅ Built-in debug mode | ✅ Built-in live updates |
183
+
184
+ **Choose Skaffold when:**
185
+
186
+ - You want a declarative, portable, config-file-driven pipeline
187
+ - CI/CD integration is a priority
188
+ - You need support for multiple build systems (Jib, Buildpacks, Bazel)
189
+
190
+ **Choose Tilt when:**
191
+
192
+ - You prefer an interactive browser UI for development
193
+ - You want fine-grained control over the update pipeline via a Tiltfile
194
+
195
+ ## Use Cases
196
+
197
+ - **Inner loop acceleration** — Rebuild and redeploy Kubernetes workloads on save, without manual `docker build && kubectl apply`
198
+ - **Multi-service applications** — Manage build and deploy of multiple microservices from a single `skaffold.yaml`
199
+ - **CI/CD integration** — Use `skaffold run` in pipelines for consistent build-test-deploy flows
200
+ - **Helm chart development** — Iterate on Helm charts with live cluster feedback
201
+ - **GitOps preview environments** — Render manifests for inspection or PR previews
202
+
203
+ **Integrates well with:**
204
+
205
+ - `kubectl-helm` — Used by Skaffold's deploy pipeline
206
+ - `k3d` — Lightweight local cluster for development
207
+ - `kind` — Full-conformance local cluster for testing
208
+
209
+ ## Troubleshooting
210
+
211
+ ### No kubeconfig Found
212
+
213
+ ```bash
214
+ # Ensure kubectl is configured (kubectl-helm overlay must be selected)
215
+ kubectl cluster-info
216
+
217
+ # If using k3d, merge cluster config
218
+ k3d kubeconfig merge dev --kubeconfig-merge-default
219
+
220
+ # If using kind, kubeconfig is set automatically on cluster creation
221
+ kind create cluster --name dev
222
+ ```
223
+
224
+ ### Build Failures
225
+
226
+ ```bash
227
+ # Check Docker is accessible
228
+ docker info
229
+
230
+ # Run with verbose logging
231
+ skaffold dev -v debug
232
+ ```
233
+
234
+ ### Deploy Failures
235
+
236
+ ```bash
237
+ # View Kubernetes events
238
+ kubectl get events --sort-by='.lastTimestamp'
239
+
240
+ # Tail pod logs
241
+ kubectl logs -f deployment/my-app
242
+ ```
243
+
244
+ ## References
245
+
246
+ - [Skaffold Documentation](https://skaffold.dev/docs/)
247
+ - [Skaffold GitHub](https://github.com/GoogleContainerTools/skaffold)
248
+ - [skaffold.yaml Reference](https://skaffold.dev/docs/references/yaml/)
249
+ - [Kubernetes Documentation](https://kubernetes.io/docs/)
250
+
251
+ **Related Overlays:**
252
+
253
+ - [`kubectl-helm`](../kubectl-helm/README.md) — Kubernetes CLI and Helm (recommended with Skaffold)
254
+ - [`kind`](../kind/README.md) — Full-conformance local Kubernetes cluster
255
+ - [`k3d`](../k3d/README.md) — Lightweight local Kubernetes cluster
256
+ - [`tilt`](../tilt/README.md) — Alternative interactive Kubernetes development tool (conflicts)