container-superposition 0.1.1 → 0.1.4

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 (178) hide show
  1. package/README.md +569 -8
  2. package/dist/scripts/init.js +436 -254
  3. package/dist/scripts/init.js.map +1 -1
  4. package/dist/tool/commands/doctor.d.ts +15 -0
  5. package/dist/tool/commands/doctor.d.ts.map +1 -0
  6. package/dist/tool/commands/doctor.js +862 -0
  7. package/dist/tool/commands/doctor.js.map +1 -0
  8. package/dist/tool/commands/explain.d.ts +13 -0
  9. package/dist/tool/commands/explain.d.ts.map +1 -0
  10. package/dist/tool/commands/explain.js +299 -0
  11. package/dist/tool/commands/explain.js.map +1 -0
  12. package/dist/tool/commands/list.d.ts +16 -0
  13. package/dist/tool/commands/list.d.ts.map +1 -0
  14. package/dist/tool/commands/list.js +121 -0
  15. package/dist/tool/commands/list.js.map +1 -0
  16. package/dist/tool/commands/plan.d.ts +67 -0
  17. package/dist/tool/commands/plan.d.ts.map +1 -0
  18. package/dist/tool/commands/plan.js +851 -0
  19. package/dist/tool/commands/plan.js.map +1 -0
  20. package/dist/tool/questionnaire/composer.d.ts +16 -2
  21. package/dist/tool/questionnaire/composer.d.ts.map +1 -1
  22. package/dist/tool/questionnaire/composer.js +411 -200
  23. package/dist/tool/questionnaire/composer.js.map +1 -1
  24. package/dist/tool/readme/markdown-parser.d.ts.map +1 -1
  25. package/dist/tool/readme/markdown-parser.js.map +1 -1
  26. package/dist/tool/readme/readme-generator.d.ts.map +1 -1
  27. package/dist/tool/readme/readme-generator.js +11 -6
  28. package/dist/tool/readme/readme-generator.js.map +1 -1
  29. package/dist/tool/schema/deployment-targets.d.ts +77 -0
  30. package/dist/tool/schema/deployment-targets.d.ts.map +1 -0
  31. package/dist/tool/schema/deployment-targets.js +91 -0
  32. package/dist/tool/schema/deployment-targets.js.map +1 -0
  33. package/dist/tool/schema/manifest-migrations.d.ts +51 -0
  34. package/dist/tool/schema/manifest-migrations.d.ts.map +1 -0
  35. package/dist/tool/schema/manifest-migrations.js +159 -0
  36. package/dist/tool/schema/manifest-migrations.js.map +1 -0
  37. package/dist/tool/schema/overlay-loader.d.ts +1 -1
  38. package/dist/tool/schema/overlay-loader.d.ts.map +1 -1
  39. package/dist/tool/schema/overlay-loader.js +42 -14
  40. package/dist/tool/schema/overlay-loader.js.map +1 -1
  41. package/dist/tool/schema/types.d.ts +62 -2
  42. package/dist/tool/schema/types.d.ts.map +1 -1
  43. package/dist/tool/utils/gitignore.d.ts +15 -0
  44. package/dist/tool/utils/gitignore.d.ts.map +1 -0
  45. package/dist/tool/utils/gitignore.js +41 -0
  46. package/dist/tool/utils/gitignore.js.map +1 -0
  47. package/dist/tool/utils/merge.d.ts +134 -0
  48. package/dist/tool/utils/merge.d.ts.map +1 -0
  49. package/dist/tool/utils/merge.js +277 -0
  50. package/dist/tool/utils/merge.js.map +1 -0
  51. package/dist/tool/utils/port-utils.d.ts +29 -0
  52. package/dist/tool/utils/port-utils.d.ts.map +1 -0
  53. package/dist/tool/utils/port-utils.js +128 -0
  54. package/dist/tool/utils/port-utils.js.map +1 -0
  55. package/dist/tool/utils/services-export.d.ts +14 -0
  56. package/dist/tool/utils/services-export.d.ts.map +1 -0
  57. package/dist/tool/utils/services-export.js +478 -0
  58. package/dist/tool/utils/services-export.js.map +1 -0
  59. package/dist/tool/utils/summary.d.ts +69 -0
  60. package/dist/tool/utils/summary.d.ts.map +1 -0
  61. package/dist/tool/utils/summary.js +260 -0
  62. package/dist/tool/utils/summary.js.map +1 -0
  63. package/dist/tool/utils/version.d.ts +9 -0
  64. package/dist/tool/utils/version.d.ts.map +1 -0
  65. package/dist/tool/utils/version.js +32 -0
  66. package/dist/tool/utils/version.js.map +1 -0
  67. package/docs/architecture.md +25 -21
  68. package/docs/deployment-targets.md +150 -0
  69. package/docs/discovery-commands.md +442 -0
  70. package/docs/merge-strategy.md +700 -0
  71. package/docs/minimal-and-editor.md +265 -0
  72. package/docs/overlay-imports.md +209 -0
  73. package/docs/overlay-manifest-refactoring.md +2 -2
  74. package/docs/overlay-metadata-archive.md +1 -1
  75. package/docs/overlays.md +139 -28
  76. package/docs/presets-architecture.md +3 -3
  77. package/docs/presets.md +1 -1
  78. package/docs/publishing.md +36 -35
  79. package/docs/team-workflow.md +540 -0
  80. package/overlays/.presets/data-engineering.yml +392 -0
  81. package/overlays/.presets/event-sourced-service.yml +262 -0
  82. package/overlays/.presets/frontend.yml +287 -0
  83. package/overlays/.presets/k8s-operator-dev.yml +462 -0
  84. package/overlays/{presets → .presets}/microservice.yml +32 -6
  85. package/overlays/.presets/web-api.yml +129 -0
  86. package/overlays/.registry/README.md +1 -1
  87. package/overlays/.registry/deployment-targets.yml +54 -0
  88. package/overlays/.shared/README.md +43 -0
  89. package/overlays/.shared/compose/common-healthchecks.yml +38 -0
  90. package/overlays/.shared/otel/instrumentation.env +20 -0
  91. package/overlays/.shared/otel/otel-base-config.yaml +30 -0
  92. package/overlays/.shared/vscode/recommended-extensions.json +14 -0
  93. package/overlays/README.md +1 -1
  94. package/overlays/cloudflared/README.md +190 -0
  95. package/overlays/cloudflared/devcontainer.patch.json +3 -0
  96. package/overlays/cloudflared/overlay.yml +15 -0
  97. package/overlays/cloudflared/setup.sh +49 -0
  98. package/overlays/cloudflared/verify.sh +21 -0
  99. package/overlays/codex/overlay.yml +1 -0
  100. package/overlays/direnv/README.md +6 -4
  101. package/overlays/direnv/setup.sh +0 -12
  102. package/overlays/duckdb/README.md +274 -0
  103. package/overlays/duckdb/devcontainer.patch.json +10 -0
  104. package/overlays/duckdb/overlay.yml +17 -0
  105. package/overlays/duckdb/setup.sh +45 -0
  106. package/overlays/duckdb/verify.sh +32 -0
  107. package/overlays/git-helpers/overlay.yml +1 -0
  108. package/overlays/grafana/README.md +5 -5
  109. package/overlays/grafana/dashboard-provider.yml +1 -1
  110. package/overlays/grafana/docker-compose.yml +2 -2
  111. package/overlays/grafana/overlay.yml +6 -1
  112. package/overlays/grpc-tools/README.md +242 -0
  113. package/overlays/grpc-tools/devcontainer.patch.json +14 -0
  114. package/overlays/grpc-tools/overlay.yml +14 -0
  115. package/overlays/grpc-tools/setup.sh +57 -0
  116. package/overlays/grpc-tools/verify.sh +47 -0
  117. package/overlays/jaeger/overlay.yml +16 -3
  118. package/overlays/jupyter/.env.example +6 -0
  119. package/overlays/jupyter/README.md +210 -0
  120. package/overlays/jupyter/devcontainer.patch.json +14 -0
  121. package/overlays/jupyter/docker-compose.yml +23 -0
  122. package/overlays/jupyter/overlay.yml +18 -0
  123. package/overlays/jupyter/verify.sh +35 -0
  124. package/overlays/keycloak/.env.example +5 -0
  125. package/overlays/keycloak/README.md +238 -0
  126. package/overlays/keycloak/devcontainer.patch.json +17 -0
  127. package/overlays/keycloak/docker-compose.yml +32 -0
  128. package/overlays/keycloak/overlay.yml +23 -0
  129. package/overlays/keycloak/verify.sh +54 -0
  130. package/overlays/kind/README.md +221 -0
  131. package/overlays/kind/devcontainer.patch.json +10 -0
  132. package/overlays/kind/overlay.yml +18 -0
  133. package/overlays/kind/setup.sh +43 -0
  134. package/overlays/kind/verify.sh +40 -0
  135. package/overlays/localstack/.env.example +6 -0
  136. package/overlays/localstack/README.md +188 -0
  137. package/overlays/localstack/devcontainer.patch.json +21 -0
  138. package/overlays/localstack/docker-compose.yml +25 -0
  139. package/overlays/localstack/overlay.yml +18 -0
  140. package/overlays/localstack/verify.sh +47 -0
  141. package/overlays/loki/overlay.yml +6 -1
  142. package/overlays/mailpit/.env.example +4 -0
  143. package/overlays/mailpit/README.md +191 -0
  144. package/overlays/mailpit/devcontainer.patch.json +20 -0
  145. package/overlays/mailpit/docker-compose.yml +17 -0
  146. package/overlays/mailpit/overlay.yml +26 -0
  147. package/overlays/mailpit/verify.sh +52 -0
  148. package/overlays/modern-cli-tools/overlay.yml +1 -0
  149. package/overlays/mongodb/overlay.yml +12 -2
  150. package/overlays/mysql/overlay.yml +12 -2
  151. package/overlays/nats/overlay.yml +12 -2
  152. package/overlays/ngrok/overlay.yml +2 -1
  153. package/overlays/openapi-tools/README.md +243 -0
  154. package/overlays/openapi-tools/devcontainer.patch.json +10 -0
  155. package/overlays/openapi-tools/overlay.yml +16 -0
  156. package/overlays/openapi-tools/setup.sh +45 -0
  157. package/overlays/openapi-tools/verify.sh +51 -0
  158. package/overlays/otel-collector/overlay.yml.example +26 -0
  159. package/overlays/postgres/overlay.yml +6 -1
  160. package/overlays/prometheus/overlay.yml +6 -1
  161. package/overlays/python/README.md +51 -35
  162. package/overlays/python/devcontainer.patch.json +7 -4
  163. package/overlays/python/setup.sh +50 -23
  164. package/overlays/python/verify.sh +29 -1
  165. package/overlays/rabbitmq/overlay.yml +12 -2
  166. package/overlays/redis/overlay.yml +6 -1
  167. package/overlays/tilt/README.md +259 -0
  168. package/overlays/tilt/devcontainer.patch.json +17 -0
  169. package/overlays/tilt/overlay.yml +19 -0
  170. package/overlays/tilt/setup.sh +25 -0
  171. package/overlays/tilt/verify.sh +24 -0
  172. package/package.json +8 -6
  173. package/tool/README.md +12 -16
  174. package/tool/schema/overlay-manifest.schema.json +64 -4
  175. package/tool/schema/superposition-manifest.schema.json +104 -0
  176. package/overlays/presets/web-api.yml +0 -109
  177. /package/overlays/{presets → .presets}/docs-site.yml +0 -0
  178. /package/overlays/{presets → .presets}/fullstack.yml +0 -0
@@ -0,0 +1,274 @@
1
+ # DuckDB Overlay
2
+
3
+ In-process analytical database for OLAP workloads and data analysis.
4
+
5
+ ## Features
6
+
7
+ - **DuckDB CLI** - Command-line interface for interactive queries
8
+ - **In-process** - No separate server required, embedded database
9
+ - **OLAP optimized** - Columnar storage for analytical queries
10
+ - **SQL support** - Full ANSI SQL with extensions
11
+ - **Parquet/CSV support** - Direct querying of file formats
12
+ - **Python integration** - Works seamlessly with Python and pandas
13
+
14
+ ## How It Works
15
+
16
+ This overlay installs the DuckDB CLI, an in-process analytical database designed for OLAP workloads. Unlike traditional databases, DuckDB runs embedded in your application without requiring a separate server.
17
+
18
+ **Suggested overlays:**
19
+
20
+ - `python` - For DuckDB Python API
21
+ - `jupyter` - Interactive data analysis
22
+
23
+ ## Installation
24
+
25
+ DuckDB CLI is installed automatically during devcontainer creation via `setup.sh`:
26
+
27
+ - Downloads DuckDB CLI for your architecture (amd64/aarch64)
28
+ - Installs to `/usr/local/bin/duckdb`
29
+ - Verifies installation with test query
30
+
31
+ ## Common Commands
32
+
33
+ ### Interactive Shell
34
+
35
+ ```bash
36
+ # Start DuckDB with in-memory database
37
+ duckdb
38
+
39
+ # Create/open persistent database
40
+ duckdb mydata.db
41
+
42
+ # Open database read-only
43
+ duckdb mydata.db -readonly
44
+ ```
45
+
46
+ ### Query Files
47
+
48
+ ```bash
49
+ # Query CSV file
50
+ duckdb -c "SELECT * FROM 'data.csv' LIMIT 10"
51
+
52
+ # Query Parquet file
53
+ duckdb -c "SELECT * FROM 'data.parquet' WHERE col > 100"
54
+
55
+ # Query JSON file
56
+ duckdb -c "SELECT * FROM read_json_auto('data.json')"
57
+ ```
58
+
59
+ ### Create Tables
60
+
61
+ ```bash
62
+ # From CSV
63
+ CREATE TABLE sales AS SELECT * FROM 'sales.csv';
64
+
65
+ # From Parquet
66
+ CREATE TABLE events AS SELECT * FROM 'events.parquet';
67
+
68
+ # From query
69
+ CREATE TABLE summary AS
70
+ SELECT date, SUM(amount) as total
71
+ FROM sales
72
+ GROUP BY date;
73
+ ```
74
+
75
+ ### Export Results
76
+
77
+ ```bash
78
+ # Export to CSV
79
+ COPY (SELECT * FROM sales) TO 'output.csv' (HEADER, DELIMITER ',');
80
+
81
+ # Export to Parquet
82
+ COPY sales TO 'output.parquet' (FORMAT PARQUET);
83
+
84
+ # Export to JSON
85
+ COPY (SELECT * FROM sales LIMIT 100) TO 'sample.json';
86
+ ```
87
+
88
+ ## Python Integration
89
+
90
+ Install DuckDB Python package:
91
+
92
+ ```python
93
+ # In Python code or Jupyter notebook
94
+ !pip install duckdb
95
+
96
+ import duckdb
97
+
98
+ # Connect to database
99
+ con = duckdb.connect('mydata.db')
100
+
101
+ # Execute query
102
+ result = con.execute("SELECT * FROM sales WHERE amount > 100").fetchall()
103
+
104
+ # Query pandas DataFrame directly
105
+ import pandas as pd
106
+ df = pd.read_csv('data.csv')
107
+ result = con.execute("SELECT * FROM df WHERE col > 100").df()
108
+
109
+ # Close connection
110
+ con.close()
111
+ ```
112
+
113
+ ### Pandas Integration
114
+
115
+ ```python
116
+ import duckdb
117
+ import pandas as pd
118
+
119
+ # Read CSV into DuckDB, query, get pandas DataFrame
120
+ df = duckdb.query("SELECT * FROM 'data.csv' WHERE col > 100").df()
121
+
122
+ # Query DataFrame with SQL
123
+ df2 = duckdb.query("SELECT col1, AVG(col2) FROM df GROUP BY col1").df()
124
+ ```
125
+
126
+ ## Use Cases
127
+
128
+ - **Data analysis** - Ad-hoc analysis of large datasets
129
+ - **ETL pipelines** - Transform data with SQL
130
+ - **Analytics** - OLAP queries on columnar data
131
+ - **Data science** - Integrate with Python/Jupyter workflows
132
+ - **Data exploration** - Quick insights from CSV/Parquet files
133
+ - **Embedded analytics** - In-app analytical queries
134
+
135
+ **Integrates well with:**
136
+
137
+ - `python` - DuckDB Python API (suggested)
138
+ - `jupyter` - Interactive data analysis (suggested)
139
+ - Node.js, .NET - DuckDB client libraries available
140
+
141
+ ## SQL Examples
142
+
143
+ ### Analytical Queries
144
+
145
+ ```sql
146
+ -- Time series aggregation
147
+ SELECT
148
+ date_trunc('day', timestamp) as day,
149
+ COUNT(*) as events,
150
+ AVG(duration) as avg_duration
151
+ FROM events
152
+ WHERE timestamp > '2024-01-01'
153
+ GROUP BY day
154
+ ORDER BY day;
155
+
156
+ -- Window functions
157
+ SELECT
158
+ user_id,
159
+ event_time,
160
+ event_type,
161
+ ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY event_time) as event_seq
162
+ FROM user_events;
163
+
164
+ -- Join multiple files
165
+ SELECT
166
+ u.name,
167
+ COUNT(o.id) as order_count,
168
+ SUM(o.amount) as total_spent
169
+ FROM 'users.csv' u
170
+ JOIN 'orders.parquet' o ON u.id = o.user_id
171
+ GROUP BY u.name
172
+ ORDER BY total_spent DESC;
173
+ ```
174
+
175
+ ### File Formats
176
+
177
+ ```sql
178
+ -- CSV with options
179
+ SELECT * FROM read_csv_auto('data.csv', header=true, delim='|');
180
+
181
+ -- Parquet with projection
182
+ SELECT col1, col2 FROM 'data.parquet' WHERE col3 > 100;
183
+
184
+ -- JSON with auto-detection
185
+ SELECT * FROM read_json_auto('data.json');
186
+
187
+ -- Excel files
188
+ INSTALL spatial;
189
+ LOAD spatial;
190
+ SELECT * FROM ST_Read('data.xlsx');
191
+ ```
192
+
193
+ ## Benefits vs PostgreSQL
194
+
195
+ | Feature | DuckDB | PostgreSQL |
196
+ | --------------------- | --------------------- | ----------------------- |
197
+ | **Use Case** | ✅ Analytics (OLAP) | ✅ Transactions (OLTP) |
198
+ | **Setup** | ✅ No server needed | ⚠️ Separate service |
199
+ | **File Queries** | ✅ Direct CSV/Parquet | ❌ Requires COPY |
200
+ | **Analytical Speed** | ✅ Very fast | ⚠️ Slower for analytics |
201
+ | **Concurrent Writes** | ⚠️ Limited | ✅ Excellent |
202
+ | **Data Size** | ✅ GBs-TBs | ✅ TBs+ |
203
+
204
+ **When to use DuckDB:**
205
+
206
+ - Analytical queries on read-heavy data
207
+ - Working with files (CSV, Parquet, JSON)
208
+ - Embedded analytics in applications
209
+ - Data science and exploration
210
+
211
+ **When to use PostgreSQL:**
212
+
213
+ - Transactional workloads (OLTP)
214
+ - Concurrent writes from multiple clients
215
+ - Need full ACID guarantees
216
+ - Large-scale production databases
217
+
218
+ ## Troubleshooting
219
+
220
+ ### Installation Fails
221
+
222
+ Check architecture is supported:
223
+
224
+ ```bash
225
+ uname -m
226
+ # Should be x86_64 or aarch64/arm64
227
+ ```
228
+
229
+ ### File Not Found
230
+
231
+ Ensure file paths are correct:
232
+
233
+ ```bash
234
+ # Use absolute paths or paths relative to working directory
235
+ duckdb -c "SELECT * FROM '/absolute/path/data.csv'"
236
+ duckdb -c "SELECT * FROM './relative/path/data.csv'"
237
+ ```
238
+
239
+ ### Out of Memory
240
+
241
+ DuckDB uses memory-mapped files. For large datasets:
242
+
243
+ ```sql
244
+ -- Limit memory usage
245
+ SET memory_limit='4GB';
246
+
247
+ -- Use temp directory
248
+ SET temp_directory='/tmp';
249
+ ```
250
+
251
+ ### Slow Queries
252
+
253
+ DuckDB is optimized for analytics but:
254
+
255
+ ```sql
256
+ -- Create indexes for point queries
257
+ CREATE INDEX idx_id ON sales(id);
258
+
259
+ -- Use columnar storage
260
+ COPY sales TO 'sales.parquet' (FORMAT PARQUET);
261
+ ```
262
+
263
+ ## References
264
+
265
+ - [DuckDB Documentation](https://duckdb.org/docs/)
266
+ - [DuckDB Python API](https://duckdb.org/docs/api/python/overview)
267
+ - [DuckDB SQL Reference](https://duckdb.org/docs/sql/introduction)
268
+ - [DuckDB File Formats](https://duckdb.org/docs/data/overview)
269
+
270
+ **Related Overlays:**
271
+
272
+ - `python` - DuckDB Python API (suggested)
273
+ - `jupyter` - Interactive analysis (suggested)
274
+ - `postgres` - Transactional database
@@ -0,0 +1,10 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
3
+ "features": {
4
+ "./features/cross-distro-packages": {
5
+ "apt": "wget unzip",
6
+ "apk": "wget unzip"
7
+ }
8
+ },
9
+ "postCreateCommand": "bash .devcontainer/scripts/setup-duckdb.sh"
10
+ }
@@ -0,0 +1,17 @@
1
+ id: duckdb
2
+ name: DuckDB
3
+ description: In-process analytical database for OLAP workloads
4
+ category: database
5
+ supports: []
6
+ requires: []
7
+ suggests:
8
+ - python
9
+ - jupyter
10
+ conflicts: []
11
+ tags:
12
+ - database
13
+ - analytics
14
+ - sql
15
+ - duckdb
16
+ - olap
17
+ ports: []
@@ -0,0 +1,45 @@
1
+ #!/bin/bash
2
+ # Setup script for DuckDB
3
+
4
+ set -e
5
+
6
+ echo "🔧 Setting up DuckDB..."
7
+
8
+ # Detect architecture
9
+ ARCH=$(uname -m)
10
+ case $ARCH in
11
+ x86_64)
12
+ DUCKDB_ARCH="amd64"
13
+ ;;
14
+ aarch64|arm64)
15
+ DUCKDB_ARCH="aarch64"
16
+ ;;
17
+ *)
18
+ echo "❌ Unsupported architecture: $ARCH"
19
+ exit 1
20
+ ;;
21
+ esac
22
+
23
+ # Install DuckDB CLI
24
+ DUCKDB_VERSION="${DUCKDB_VERSION:-v1.0.0}"
25
+ echo "📦 Installing DuckDB CLI ${DUCKDB_VERSION}..."
26
+
27
+ wget -q "https://github.com/duckdb/duckdb/releases/download/${DUCKDB_VERSION}/duckdb_cli-linux-${DUCKDB_ARCH}.zip" -O /tmp/duckdb.zip
28
+ unzip -q /tmp/duckdb.zip -d /tmp/
29
+ chmod +x /tmp/duckdb
30
+ sudo mv /tmp/duckdb /usr/local/bin/duckdb
31
+ rm /tmp/duckdb.zip
32
+
33
+ # Verify installation
34
+ if command -v duckdb &> /dev/null; then
35
+ echo "✅ DuckDB CLI installed successfully"
36
+ duckdb --version
37
+ else
38
+ echo "❌ DuckDB CLI installation failed"
39
+ exit 1
40
+ fi
41
+
42
+ echo "✅ DuckDB setup complete"
43
+ echo ""
44
+ echo "ℹ️ To start DuckDB, run:"
45
+ echo " duckdb mydata.db"
@@ -0,0 +1,32 @@
1
+ #!/bin/bash
2
+ # Verification script for DuckDB overlay
3
+ # Confirms DuckDB is installed
4
+
5
+ set -e
6
+
7
+ echo "🔍 Verifying DuckDB overlay..."
8
+ echo ""
9
+
10
+ # Check DuckDB CLI is installed
11
+ echo "1️⃣ Checking DuckDB CLI installation..."
12
+ if command -v duckdb &> /dev/null; then
13
+ duckdb --version
14
+ echo " ✅ DuckDB CLI is installed"
15
+ else
16
+ echo " ❌ DuckDB CLI is not installed"
17
+ exit 1
18
+ fi
19
+
20
+ # Test DuckDB with a simple query
21
+ echo ""
22
+ echo "2️⃣ Testing DuckDB with simple query..."
23
+ RESULT=$(echo "SELECT 'DuckDB is working!' as message;" | duckdb 2>&1 | grep -i "DuckDB is working" || true)
24
+ if [ -n "$RESULT" ]; then
25
+ echo " ✅ DuckDB query executed successfully"
26
+ else
27
+ echo " ❌ DuckDB query failed"
28
+ exit 1
29
+ fi
30
+
31
+ echo ""
32
+ echo "✅ DuckDB overlay verification complete"
@@ -13,3 +13,4 @@ tags:
13
13
  - ssh
14
14
  - gpg
15
15
  ports: []
16
+ minimal: true
@@ -300,7 +300,7 @@ Access at: http://localhost:3000/dashboards
300
300
  2. Click **Dashboard settings** (gear icon)
301
301
  3. Click **JSON Model**
302
302
  4. Copy JSON
303
- 5. Save to `.devcontainer/dashboards/my-dashboard.json`
303
+ 5. Save to `.devcontainer/dashboards-grafana/my-dashboard.json`
304
304
  6. Restart Grafana to load
305
305
 
306
306
  **Option 2: Export from Grafana.com**
@@ -308,14 +308,14 @@ Access at: http://localhost:3000/dashboards
308
308
  1. Browse https://grafana.com/grafana/dashboards/
309
309
  2. Find dashboard (e.g., Node Exporter Full)
310
310
  3. Download JSON
311
- 4. Save to `.devcontainer/dashboards/`
311
+ 4. Save to `.devcontainer/dashboards-grafana/`
312
312
  5. Restart Grafana
313
313
 
314
314
  **Dashboard structure:**
315
315
 
316
316
  ```
317
317
  .devcontainer/
318
- ├── dashboards/
318
+ ├── dashboards-grafana/
319
319
  │ ├── observability-overview.json
320
320
  │ ├── my-custom-dashboard.json
321
321
  │ └── node-exporter.json
@@ -376,13 +376,13 @@ docker exec tempo cat /etc/tempo/tempo-config.yaml
376
376
  docker exec grafana ls /etc/grafana/provisioning/dashboards/
377
377
 
378
378
  # Check dashboard files are present
379
- docker exec grafana ls /etc/grafana/provisioning/dashboards/*.json
379
+ docker exec grafana ls /etc/grafana/dashboards/*.json
380
380
 
381
381
  # Check Grafana logs for errors
382
382
  docker logs grafana | grep -i dashboard
383
383
 
384
384
  # Validate JSON syntax
385
- jq . .devcontainer/dashboards/my-dashboard.json
385
+ jq . .devcontainer/dashboards-grafana/my-dashboard.json
386
386
  ```
387
387
 
388
388
  ### Issue: Correlation Links Not Working
@@ -8,4 +8,4 @@ providers:
8
8
  disableDeletion: false
9
9
  editable: true
10
10
  options:
11
- path: /etc/grafana/provisioning/dashboards
11
+ path: /etc/grafana/dashboards
@@ -8,8 +8,8 @@ services:
8
8
  - GF_USERS_ALLOW_SIGN_UP=false
9
9
  volumes:
10
10
  - ./grafana-datasources-grafana.yml:/etc/grafana/provisioning/datasources/datasources.yml
11
- - ./dashboard-provider-grafana.yml:/etc/grafana/provisioning/dashboards/dashboards.yml
12
- - ./dashboards:/etc/grafana/provisioning/dashboards
11
+ - ./dashboard-provider-grafana.yml:/etc/grafana/provisioning/dashboards/provider.yml
12
+ - ./dashboards-grafana:/etc/grafana/dashboards
13
13
  - grafana_data:/var/lib/grafana
14
14
  ports:
15
15
  - '${GRAFANA_PORT:-3000}:3000'
@@ -17,5 +17,10 @@ tags:
17
17
  - ui
18
18
  - visualization
19
19
  ports:
20
- - 3000
20
+ - port: 3000
21
+ service: grafana
22
+ protocol: http
23
+ description: Grafana web UI
24
+ path: /
25
+ onAutoForward: openBrowser
21
26
  order: 3
@@ -0,0 +1,242 @@
1
+ # gRPC Tools Overlay
2
+
3
+ Protocol Buffers compiler, Buf schema management CLI, and grpcurl for gRPC API development.
4
+
5
+ ## Features
6
+
7
+ - **protoc** - Protocol Buffers compiler (from system packages)
8
+ - **buf** - Modern schema management, linting, and breaking change detection
9
+ - **grpcurl** - Command-line tool for interacting with gRPC servers (like curl for gRPC)
10
+ - **VS Code Extensions:**
11
+ - [vscode-proto3](https://marketplace.visualstudio.com/items?itemName=zxh404.vscode-proto3) - Proto3 syntax highlighting and validation
12
+ - [vscode-buf](https://marketplace.visualstudio.com/items?itemName=bufbuild.vscode-buf) - Buf integration for VS Code
13
+
14
+ ## How It Works
15
+
16
+ This overlay installs the gRPC development toolchain into the dev container. `protoc` is installed via system packages, while `buf` and `grpcurl` are downloaded from their official GitHub releases.
17
+
18
+ ## Common Commands
19
+
20
+ ### protoc (Protocol Buffers Compiler)
21
+
22
+ ```bash
23
+ # Compile .proto files to Go
24
+ protoc --go_out=. --go-grpc_out=. api/v1/service.proto
25
+
26
+ # Compile to Python
27
+ protoc --python_out=. api/v1/service.proto
28
+
29
+ # Compile to JavaScript/TypeScript
30
+ protoc --js_out=import_style=commonjs,binary:. api/v1/service.proto
31
+
32
+ # Check version
33
+ protoc --version
34
+ ```
35
+
36
+ ### buf (Schema Management)
37
+
38
+ ```bash
39
+ # Initialize buf workspace
40
+ buf config init
41
+
42
+ # Lint .proto files
43
+ buf lint
44
+
45
+ # Detect breaking changes
46
+ buf breaking --against .git#branch=main
47
+
48
+ # Generate code from .proto files
49
+ buf generate
50
+
51
+ # Format .proto files
52
+ buf format -w
53
+
54
+ # Push schema to Buf Schema Registry
55
+ buf push
56
+
57
+ # Check version
58
+ buf --version
59
+ ```
60
+
61
+ ### grpcurl (gRPC Testing)
62
+
63
+ ```bash
64
+ # List all services on a gRPC server
65
+ grpcurl -plaintext localhost:50051 list
66
+
67
+ # List methods on a service
68
+ grpcurl -plaintext localhost:50051 list mypackage.MyService
69
+
70
+ # Describe a method
71
+ grpcurl -plaintext localhost:50051 describe mypackage.MyService.MyMethod
72
+
73
+ # Call a method
74
+ grpcurl -plaintext -d '{"name": "World"}' localhost:50051 mypackage.MyService/SayHello
75
+
76
+ # Call with headers
77
+ grpcurl -plaintext \
78
+ -H "Authorization: Bearer $TOKEN" \
79
+ -d '{"id": 1}' \
80
+ localhost:50051 mypackage.MyService/GetUser
81
+
82
+ # Stream response
83
+ grpcurl -plaintext localhost:50051 mypackage.MyService/ListUsers
84
+ ```
85
+
86
+ ## Example .proto File
87
+
88
+ ```protobuf
89
+ syntax = "proto3";
90
+
91
+ package myservice.v1;
92
+
93
+ option go_package = "github.com/myorg/myservice/gen/go/myservice/v1";
94
+
95
+ service UserService {
96
+ rpc GetUser(GetUserRequest) returns (GetUserResponse);
97
+ rpc ListUsers(ListUsersRequest) returns (stream User);
98
+ rpc CreateUser(CreateUserRequest) returns (CreateUserResponse);
99
+ }
100
+
101
+ message User {
102
+ string id = 1;
103
+ string name = 2;
104
+ string email = 3;
105
+ }
106
+
107
+ message GetUserRequest {
108
+ string id = 1;
109
+ }
110
+
111
+ message GetUserResponse {
112
+ User user = 1;
113
+ }
114
+
115
+ message ListUsersRequest {}
116
+
117
+ message CreateUserRequest {
118
+ string name = 1;
119
+ string email = 2;
120
+ }
121
+
122
+ message CreateUserResponse {
123
+ User user = 1;
124
+ }
125
+ ```
126
+
127
+ ## buf.yaml Configuration
128
+
129
+ ```yaml
130
+ version: v2
131
+ modules:
132
+ - path: proto
133
+ lint:
134
+ use:
135
+ - DEFAULT
136
+ breaking:
137
+ use:
138
+ - FILE
139
+ ```
140
+
141
+ ## buf.gen.yaml (Code Generation)
142
+
143
+ ```yaml
144
+ version: v2
145
+ plugins:
146
+ # Go
147
+ - remote: buf.build/protocolbuffers/go
148
+ out: gen/go
149
+ opt:
150
+ - paths=source_relative
151
+ - remote: buf.build/grpc/go
152
+ out: gen/go
153
+ opt:
154
+ - paths=source_relative
155
+
156
+ # Python
157
+ - remote: buf.build/protocolbuffers/python
158
+ out: gen/python
159
+
160
+ # TypeScript (Node.js)
161
+ - remote: buf.build/connectrpc/node
162
+ out: gen/typescript
163
+ ```
164
+
165
+ ## Language-Specific Setup
166
+
167
+ ### Go
168
+
169
+ ```bash
170
+ # Install Go gRPC plugins
171
+ go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
172
+ go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
173
+ ```
174
+
175
+ ### Node.js
176
+
177
+ ```bash
178
+ # Install grpc-tools for Node.js
179
+ npm install --save-dev grpc-tools @grpc/grpc-js @grpc/proto-loader
180
+ ```
181
+
182
+ ### Python
183
+
184
+ ```bash
185
+ # Install Python gRPC tools
186
+ pip install grpcio grpcio-tools
187
+ ```
188
+
189
+ ## Use Cases
190
+
191
+ - **gRPC API development** - Design, implement, and test gRPC services
192
+ - **Protocol Buffers schema management** - Lint, format, and version schemas
193
+ - **gRPC endpoint testing** - Test services without a full client implementation
194
+ - **Microservice communication** - Develop services that communicate via gRPC
195
+ - **API documentation** - Describe and explore gRPC service contracts
196
+
197
+ ## Troubleshooting
198
+
199
+ ### protoc plugins not found
200
+
201
+ After installing language-specific plugins, ensure they are in your `PATH`:
202
+
203
+ ```bash
204
+ # Go plugins
205
+ export PATH="$PATH:$(go env GOPATH)/bin"
206
+
207
+ # Verify
208
+ which protoc-gen-go
209
+ which protoc-gen-go-grpc
210
+ ```
211
+
212
+ ### buf lint errors
213
+
214
+ Run `buf lint` to see all lint errors:
215
+
216
+ ```bash
217
+ buf lint
218
+ # proto/api/v1/service.proto:10:1:Service name "userService" should be PascalCase
219
+ ```
220
+
221
+ ### grpcurl: server does not support the reflection API
222
+
223
+ Enable gRPC server reflection in your service:
224
+
225
+ ```go
226
+ // Go example
227
+ import "google.golang.org/grpc/reflection"
228
+ reflection.Register(grpcServer)
229
+ ```
230
+
231
+ ## References
232
+
233
+ - [Protocol Buffers Documentation](https://protobuf.dev/)
234
+ - [Buf Documentation](https://buf.build/docs/)
235
+ - [grpcurl GitHub](https://github.com/fullstorydev/grpcurl)
236
+ - [gRPC Documentation](https://grpc.io/docs/)
237
+
238
+ **Related Overlays:**
239
+
240
+ - `go` - Go language runtime
241
+ - `nodejs` - Node.js runtime
242
+ - `python` - Python runtime