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
@@ -1,47 +1,74 @@
1
1
  #!/bin/bash
2
- # Python setup script - Install Python packages
2
+ # Python setup script - Create virtual environment and install dependencies
3
3
 
4
4
  set -e
5
5
 
6
6
  # Extract overlay name from script filename (setup-<overlay>.sh -> <overlay>)
7
7
  OVERLAY_NAME=$(basename "$0" | sed 's/setup-//;s/\.sh$//')
8
8
 
9
- echo "🐍 Setting up Python environment..."
9
+ echo "🐍 Setting up Python virtual environment..."
10
+
11
+ # Determine workspace root (script is run from workspace root via postCreateCommand)
12
+ WORKSPACE_ROOT="${PWD}"
13
+ VENV_DIR="${WORKSPACE_ROOT}/.venv"
14
+
15
+ # Create virtual environment if it doesn't exist
16
+ if [ ! -d "${VENV_DIR}" ]; then
17
+ echo "đŸ“Ļ Creating virtual environment at .venv..."
18
+ if ! command -v python3 >/dev/null 2>&1; then
19
+ echo "❌ python3 is not available on PATH. Please ensure python3 is installed."
20
+ exit 1
21
+ fi
22
+ python3 -m venv "${VENV_DIR}"
23
+ echo "✓ Virtual environment created"
24
+ else
25
+ echo "✓ Virtual environment already exists at .venv"
26
+ fi
27
+
28
+ # Activate virtual environment
29
+ # shellcheck source=/dev/null
30
+ source "${VENV_DIR}/bin/activate"
31
+
32
+ # Upgrade pip, setuptools, and wheel inside the venv
33
+ echo "âŦ†ī¸ Upgrading pip, setuptools, and wheel..."
34
+ pip install --upgrade pip setuptools wheel
35
+ echo "✓ pip, setuptools, and wheel upgraded"
10
36
 
11
37
  # Install overlay-specific packages (if requirements-overlay.txt exists)
12
38
  if [ -f ".devcontainer/requirements-overlay-${OVERLAY_NAME}.txt" ]; then
13
39
  echo "đŸ“Ļ Installing overlay packages from requirements-overlay-${OVERLAY_NAME}.txt..."
14
- pip install --user -r .devcontainer/requirements-overlay-${OVERLAY_NAME}.txt
40
+ pip install -r ".devcontainer/requirements-overlay-${OVERLAY_NAME}.txt"
15
41
  echo "✓ Overlay packages installed"
16
42
  fi
17
43
 
18
- # Check if requirements.txt exists (project dependencies)
44
+ # Install from root requirements.txt (project production dependencies)
19
45
  if [ -f "requirements.txt" ]; then
20
- echo "đŸ“Ļ Found requirements.txt, installing dependencies..."
21
- pip install --user -r requirements.txt
46
+ echo "đŸ“Ļ Installing dependencies from requirements.txt..."
47
+ pip install -r requirements.txt
22
48
  echo "✓ Dependencies installed from requirements.txt"
23
- elif [ -f "requirements-dev.txt" ]; then
24
- echo "đŸ“Ļ Found requirements-dev.txt, installing dev dependencies..."
25
- pip install --user -r requirements-dev.txt
49
+ fi
50
+
51
+ # Install from requirements-dev.txt (project development dependencies)
52
+ if [ -f "requirements-dev.txt" ]; then
53
+ echo "đŸ“Ļ Installing dev dependencies from requirements-dev.txt..."
54
+ pip install -r requirements-dev.txt
26
55
  echo "✓ Dev dependencies installed from requirements-dev.txt"
27
56
  fi
28
57
 
29
- # Check if pyproject.toml exists (modern Python projects)
58
+ # Install project in editable mode if pyproject.toml exists (modern Python projects)
30
59
  if [ -f "pyproject.toml" ]; then
31
- echo "đŸ“Ļ Found pyproject.toml, installing project..."
32
- pip install --user -e .
60
+ echo "đŸ“Ļ Found pyproject.toml, installing project in editable mode..."
61
+ pip install -e .
33
62
  echo "✓ Project installed in editable mode"
34
- fi
35
-
36
- # Check if setup.py exists (legacy Python projects)
37
- if [ -f "setup.py" ] && [ ! -f "pyproject.toml" ]; then
38
- echo "đŸ“Ļ Found setup.py, installing project..."
39
- pip install --user -e .
63
+ elif [ -f "setup.py" ]; then
64
+ # Fallback for legacy Python projects
65
+ echo "đŸ“Ļ Found setup.py, installing project in editable mode..."
66
+ pip install -e .
40
67
  echo "✓ Project installed in editable mode"
41
68
  fi
42
69
 
43
- # Upgrade pip, setuptools, and wheel
44
- echo "âŦ†ī¸ Upgrading pip, setuptools, and wheel..."
45
- pip install --user --upgrade pip setuptools wheel
46
-
47
- echo "✓ Python setup complete"
70
+ echo ""
71
+ echo "✓ Python virtual environment setup complete"
72
+ echo " Virtual environment: ${VENV_DIR}"
73
+ echo " Python interpreter: ${VENV_DIR}/bin/python"
74
+ echo " Activate manually: source .venv/bin/activate"
@@ -1,6 +1,6 @@
1
1
  #!/bin/bash
2
2
  # Verification script for Python overlay
3
- # Confirms Python and pip are installed
3
+ # Confirms Python, pip, and virtual environment are installed and functional
4
4
 
5
5
  set -e
6
6
 
@@ -28,5 +28,33 @@ else
28
28
  exit 1
29
29
  fi
30
30
 
31
+ # Check venv module is available
32
+ echo ""
33
+ echo "3ī¸âƒŖ Checking venv module..."
34
+ if python3 -m venv --help &> /dev/null; then
35
+ echo " ✅ venv module available"
36
+ else
37
+ echo " ❌ venv module not available"
38
+ exit 1
39
+ fi
40
+
41
+ # Check virtual environment was created (only if we are inside a devcontainer)
42
+ echo ""
43
+ echo "4ī¸âƒŖ Checking virtual environment..."
44
+ VENV_DIR="${PWD}/.venv"
45
+ if [ -d "${VENV_DIR}" ]; then
46
+ if [ -f "${VENV_DIR}/bin/python" ]; then
47
+ VENV_PYTHON_VERSION=$("${VENV_DIR}/bin/python" --version 2>&1)
48
+ echo " Virtual environment: ${VENV_DIR}"
49
+ echo " Python version: ${VENV_PYTHON_VERSION}"
50
+ echo " ✅ Virtual environment is functional"
51
+ else
52
+ echo " âš ī¸ Virtual environment directory exists but python not found"
53
+ echo " â„šī¸ Run setup script to create it: bash .devcontainer/scripts/setup-python.sh"
54
+ fi
55
+ else
56
+ echo " â„šī¸ No .venv found — will be created on container start by setup-python.sh"
57
+ fi
58
+
31
59
  echo ""
32
60
  echo "✅ Python overlay verification complete"
@@ -14,5 +14,15 @@ tags:
14
14
  - rabbitmq
15
15
  - amqp
16
16
  ports:
17
- - 5672
18
- - 15672
17
+ - port: 5672
18
+ service: rabbitmq
19
+ protocol: tcp
20
+ description: RabbitMQ AMQP connection
21
+ onAutoForward: notify
22
+ connectionStringTemplate: 'amqp://{rabbitmq_user}:{rabbitmq_password}@{host}:{port}{rabbitmq_vhost}'
23
+ - port: 15672
24
+ service: rabbitmq
25
+ protocol: http
26
+ description: RabbitMQ management UI
27
+ path: /
28
+ onAutoForward: openBrowser
@@ -12,4 +12,9 @@ tags:
12
12
  - cache
13
13
  - redis
14
14
  ports:
15
- - 6379
15
+ - port: 6379
16
+ service: redis
17
+ protocol: tcp
18
+ description: Redis server connection
19
+ onAutoForward: notify
20
+ connectionStringTemplate: 'redis://{host}:{port}'
@@ -0,0 +1,259 @@
1
+ # Tilt Overlay
2
+
3
+ Live update and orchestration for Kubernetes development with real-time feedback.
4
+
5
+ ## Features
6
+
7
+ - **Tilt** - Smart rebuilds and live updates for Kubernetes
8
+ - **Web UI** - Browser-based dashboard on port 10350
9
+ - **Live Updates** - See code changes instantly in K8s
10
+ - **Smart Builds** - Only rebuild what changed
11
+ - **Resource Orchestration** - Manage complex K8s workflows
12
+ - **Multi-service Support** - Handle microservices architectures
13
+
14
+ ## How It Works
15
+
16
+ This overlay installs Tilt, a development tool that orchestrates your Kubernetes development workflow. Tilt watches your code, automatically rebuilds containers, and updates your Kubernetes cluster when files change.
17
+
18
+ **Suggested overlays:**
19
+
20
+ - `kind` - Local Kubernetes cluster
21
+ - `kubectl-helm` - Kubernetes CLI and Helm
22
+
23
+ **Conflicts:**
24
+
25
+ - `skaffold` - Alternative K8s build orchestration tool
26
+
27
+ ## Installation
28
+
29
+ Tilt is installed automatically during devcontainer creation via `setup.sh`:
30
+
31
+ - Downloads and installs latest Tilt CLI
32
+ - Installs to `/usr/local/bin/tilt`
33
+ - Web UI accessible on port 10350
34
+
35
+ ## Common Commands
36
+
37
+ ### Starting Tilt
38
+
39
+ ```bash
40
+ # Start Tilt with Tiltfile in current directory
41
+ tilt up
42
+
43
+ # Start Tilt in specific directory
44
+ tilt up --file ./services/api/Tiltfile
45
+
46
+ # Start without opening browser
47
+ tilt up --hud=false
48
+
49
+ # Run in CI mode (no interactive UI)
50
+ tilt ci
51
+ ```
52
+
53
+ ### Managing Resources
54
+
55
+ ```bash
56
+ # List resources
57
+ tilt get uiresources
58
+
59
+ # Trigger manual build
60
+ tilt trigger <resource-name>
61
+
62
+ # Disable a resource
63
+ tilt disable <resource-name>
64
+
65
+ # Enable a resource
66
+ tilt enable <resource-name>
67
+ ```
68
+
69
+ ### Logs and Debugging
70
+
71
+ ```bash
72
+ # View logs
73
+ tilt logs <resource-name>
74
+
75
+ # Get resource status
76
+ tilt get uiresources <resource-name>
77
+
78
+ # Dump snapshot for debugging
79
+ tilt dump engine
80
+ ```
81
+
82
+ ## Tiltfile Configuration
83
+
84
+ Create a `Tiltfile` in your project root:
85
+
86
+ ### Basic Example
87
+
88
+ ```python
89
+ # Build Docker image
90
+ docker_build('myapp', '.')
91
+
92
+ # Deploy to Kubernetes
93
+ k8s_yaml('k8s/deployment.yaml')
94
+
95
+ # Forward port
96
+ k8s_resource('myapp', port_forwards=8000)
97
+ ```
98
+
99
+ ### Live Update Example
100
+
101
+ ```python
102
+ # Build with live update (no rebuild for code changes)
103
+ docker_build('myapp', '.',
104
+ live_update=[
105
+ sync('./src', '/app/src'),
106
+ run('npm install', trigger=['package.json']),
107
+ restart_container(),
108
+ ]
109
+ )
110
+
111
+ k8s_yaml('k8s/deployment.yaml')
112
+ k8s_resource('myapp', port_forwards=8000)
113
+ ```
114
+
115
+ ### Multi-Service Example
116
+
117
+ ```python
118
+ # API service
119
+ docker_build('api', './services/api')
120
+ k8s_yaml('./services/api/k8s.yaml')
121
+ k8s_resource('api', port_forwards=3000)
122
+
123
+ # Frontend service
124
+ docker_build('frontend', './services/frontend')
125
+ k8s_yaml('./services/frontend/k8s.yaml')
126
+ k8s_resource('frontend', port_forwards=8080)
127
+
128
+ # Database (no rebuild needed)
129
+ k8s_yaml('./infra/postgres.yaml')
130
+ k8s_resource('postgres', port_forwards=5432)
131
+ ```
132
+
133
+ ### Custom Buttons
134
+
135
+ ```python
136
+ # Add custom actions to UI
137
+ local_resource(
138
+ 'db-migrate',
139
+ 'kubectl exec -it deploy/api -- npm run migrate',
140
+ trigger_mode=TRIGGER_MODE_MANUAL,
141
+ auto_init=False
142
+ )
143
+ ```
144
+
145
+ ## Use Cases
146
+
147
+ - **Microservices development** - Manage multiple services with dependencies
148
+ - **Rapid iteration** - See changes instantly without manual rebuilds
149
+ - **Team development** - Standardize local development workflow
150
+ - **Complex K8s apps** - Orchestrate multi-tier applications
151
+ - **Learning Kubernetes** - Simplified K8s development experience
152
+
153
+ **Integrates well with:**
154
+
155
+ - `kind` or `k3d` - Local Kubernetes clusters
156
+ - `kubectl-helm` - Kubernetes CLI and Helm
157
+ - `nodejs`, `python`, `dotnet` - Application development
158
+ - `docker-in-docker` - Docker builds
159
+
160
+ ## Web UI
161
+
162
+ Access Tilt's web dashboard:
163
+
164
+ - **URL**: http://localhost:10350
165
+ - **Features**:
166
+ - Real-time resource status
167
+ - Build logs and errors
168
+ - Resource dependencies graph
169
+ - Manual trigger buttons
170
+ - Performance metrics
171
+
172
+ The UI auto-opens when you run `tilt up`.
173
+
174
+ ## Benefits vs Skaffold
175
+
176
+ | Feature | Tilt | Skaffold |
177
+ | ------------------ | ------------------------ | --------------------- |
178
+ | **UI** | ✅ Rich web UI | âš ī¸ CLI only |
179
+ | **Live Updates** | ✅ Sophisticated | âš ī¸ Basic |
180
+ | **Configuration** | ✅ Programmable (Python) | âš ī¸ Declarative (YAML) |
181
+ | **Flexibility** | ✅ Very flexible | âš ī¸ More opinionated |
182
+ | **Learning Curve** | âš ī¸ Steeper | ✅ Gentler |
183
+ | **CI Integration** | ✅ Good | ✅ Excellent |
184
+
185
+ **When to use Tilt:**
186
+
187
+ - Need rich UI and debugging tools
188
+ - Want programmable configuration
189
+ - Developing complex microservices
190
+ - Value rapid feedback loops
191
+
192
+ **When to use Skaffold:**
193
+
194
+ - Prefer declarative configuration
195
+ - Focus on CI/CD pipelines
196
+ - Want simpler tool
197
+ - Need Google Cloud integration
198
+
199
+ ## Troubleshooting
200
+
201
+ ### Tilt Can't Find Kubernetes
202
+
203
+ Ensure you have a K8s cluster:
204
+
205
+ ```bash
206
+ # Create kind cluster
207
+ kind create cluster --name dev
208
+
209
+ # Verify kubectl works
210
+ kubectl cluster-info
211
+ ```
212
+
213
+ ### Build Failures
214
+
215
+ Check build logs in Tilt UI or:
216
+
217
+ ```bash
218
+ tilt logs <resource-name>
219
+ ```
220
+
221
+ ### Port Already in Use
222
+
223
+ Change Tilt UI port:
224
+
225
+ ```bash
226
+ # In Tiltfile
227
+ config.define_string('ui-port', args=False, usage='Tilt UI port')
228
+ cfg = config.parse()
229
+ tilt_port = cfg.get('ui-port', '10350')
230
+ ```
231
+
232
+ Or use port offset when generating devcontainer.
233
+
234
+ ### Live Update Not Working
235
+
236
+ Ensure your Tiltfile has `live_update` configuration:
237
+
238
+ ```python
239
+ docker_build('myapp', '.',
240
+ live_update=[
241
+ sync('./src', '/app/src'),
242
+ restart_container(),
243
+ ]
244
+ )
245
+ ```
246
+
247
+ ## References
248
+
249
+ - [Tilt Documentation](https://docs.tilt.dev/)
250
+ - [Tilt Getting Started](https://docs.tilt.dev/tutorial.html)
251
+ - [Tiltfile API Reference](https://docs.tilt.dev/api.html)
252
+ - [Tilt Examples](https://github.com/tilt-dev/tilt-example-html)
253
+
254
+ **Related Overlays:**
255
+
256
+ - `kind` - Local Kubernetes cluster (suggested)
257
+ - `kubectl-helm` - Kubernetes CLI and Helm (suggested)
258
+ - `skaffold` - Alternative K8s build tool (conflicts)
259
+ - `docker-in-docker` - Docker builds
@@ -0,0 +1,17 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
3
+ "features": {
4
+ "./features/cross-distro-packages": {
5
+ "apt": "curl",
6
+ "apk": "curl"
7
+ }
8
+ },
9
+ "forwardPorts": [10350],
10
+ "portsAttributes": {
11
+ "10350": {
12
+ "label": "Tilt UI",
13
+ "onAutoForward": "openBrowser"
14
+ }
15
+ },
16
+ "postCreateCommand": "bash .devcontainer/scripts/setup-tilt.sh"
17
+ }
@@ -0,0 +1,19 @@
1
+ id: tilt
2
+ name: Tilt
3
+ description: Live update and orchestration for Kubernetes development
4
+ category: dev
5
+ supports: []
6
+ requires: []
7
+ suggests:
8
+ - kind
9
+ - kubectl-helm
10
+ conflicts:
11
+ - skaffold
12
+ tags:
13
+ - dev
14
+ - kubernetes
15
+ - k8s
16
+ - development
17
+ - live-reload
18
+ ports:
19
+ - 10350
@@ -0,0 +1,25 @@
1
+ #!/bin/bash
2
+ # Setup script for Tilt
3
+
4
+ set -e
5
+
6
+ echo "🔧 Setting up Tilt..."
7
+
8
+ # Install Tilt
9
+ echo "đŸ“Ļ Installing Tilt..."
10
+
11
+ curl -fsSL https://raw.githubusercontent.com/tilt-dev/tilt/master/scripts/install.sh | bash
12
+
13
+ # Verify installation
14
+ if command -v tilt &> /dev/null; then
15
+ echo "✅ Tilt installed successfully"
16
+ tilt version
17
+ else
18
+ echo "❌ Tilt installation failed"
19
+ exit 1
20
+ fi
21
+
22
+ echo "✅ Tilt setup complete"
23
+ echo ""
24
+ echo "â„šī¸ To start Tilt, run:"
25
+ echo " tilt up"
@@ -0,0 +1,24 @@
1
+ #!/bin/bash
2
+ # Verification script for Tilt overlay
3
+ # Confirms Tilt is installed
4
+
5
+ set -e
6
+
7
+ echo "🔍 Verifying Tilt overlay..."
8
+ echo ""
9
+
10
+ # Check Tilt is installed
11
+ echo "1ī¸âƒŖ Checking Tilt installation..."
12
+ if command -v tilt &> /dev/null; then
13
+ tilt version
14
+ echo " ✅ Tilt is installed"
15
+ else
16
+ echo " ❌ Tilt is not installed"
17
+ exit 1
18
+ fi
19
+
20
+ echo ""
21
+ echo "✅ Tilt overlay verification complete"
22
+ echo ""
23
+ echo "â„šī¸ To start Tilt, run:"
24
+ echo " tilt up"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "container-superposition",
3
- "version": "0.1.1",
3
+ "version": "0.1.4",
4
4
  "description": "Solution-ready devcontainer templates and features with guided initialization",
5
5
  "type": "module",
6
6
  "main": "dist/scripts/init.js",
@@ -14,7 +14,9 @@
14
14
  "test": "vitest run",
15
15
  "test:watch": "vitest",
16
16
  "test:smoke": "bash scripts/test.sh",
17
- "docs:generate": "tsx docs/generate-docs.ts",
17
+ "docs:generate": "tsx docs/generate-docs.ts && prettier --write docs/overlays.md",
18
+ "lint": "tsc --noEmit && npm run format:check",
19
+ "lint:fix": "npm run format",
18
20
  "format": "prettier --write \"**/*.{ts,js,json,md,yaml,yml}\"",
19
21
  "format:check": "prettier --check \"**/*.{ts,js,json,md,yaml,yml}\"",
20
22
  "clean": "rm -rf dist",
@@ -53,15 +55,15 @@
53
55
  "dependencies": {
54
56
  "@inquirer/checkbox": "^5.0.4",
55
57
  "@inquirer/prompts": "^8.2.0",
56
- "boxen": "^7.1.1",
58
+ "boxen": "^8.0.1",
57
59
  "chalk": "^5.6.2",
58
- "commander": "^12.1.0",
60
+ "commander": "^14.0.3",
59
61
  "js-yaml": "^4.1.1",
60
- "ora": "^8.2.0"
62
+ "ora": "^9.3.0"
61
63
  },
62
64
  "devDependencies": {
63
65
  "@types/js-yaml": "^4.0.9",
64
- "@types/node": "^20.19.33",
66
+ "@types/node": "^25.2.3",
65
67
  "@vitest/ui": "^4.0.18",
66
68
  "prettier": "^3.4.2",
67
69
  "tsx": "^4.7.0",
package/tool/README.md CHANGED
@@ -103,6 +103,7 @@ This makes the questionnaire more engaging and the output easier to scan.
103
103
  | `--cloud-tools <list>` | Cloud tools: `aws-cli`, `azure-cli`, `gcloud`, `kubectl-helm`, `terraform`, `pulumi` | `--cloud-tools aws-cli,kubectl-helm` |
104
104
  | `--dev-tools <list>` | Development tools: `docker-in-docker`, `docker-sock`, `playwright`, `codex`, `git-helpers`, `pre-commit`, `commitlint`, `just`, `direnv`, `modern-cli-tools`, `ngrok` | `--dev-tools docker-in-docker,playwright` |
105
105
  | `--port-offset <number>` | Add offset to all exposed ports (e.g., 100 makes Grafana 3100) | `--port-offset 100` |
106
+ | `--target <environment>` | Deployment target: local, codespaces, gitpod, devpod (validates compatibility) | `--target codespaces` |
106
107
  | `-o`, `--output <path>` | Output directory (default: `./.devcontainer`) | `-o ./custom-path` |
107
108
  | `-h`, `--help` | Show help | `--help` |
108
109
 
@@ -121,21 +122,16 @@ After running the tool, you'll have:
121
122
  ```
122
123
  .devcontainer/
123
124
  ├── devcontainer.json # Main configuration (editable!)
124
- ├── docker-compose.yml # Base compose file (if using compose template)
125
+ ├── docker-compose.yml # Combined compose file with selected services
125
126
  ├── .env.example # Environment variables from selected overlays
126
127
  ├── scripts/
127
128
  │ └── post_create.sh # Post-creation scripts
128
- ├── docker-compose.postgres.yml # (if postgres selected)
129
- ├── docker-compose.redis.yml # (if redis selected)
130
- ├── docker-compose.otel-collector.yml # (if otel-collector selected)
131
- ├── docker-compose.jaeger.yml # (if jaeger selected)
132
- ├── docker-compose.prometheus.yml # (if prometheus selected)
133
- ├── docker-compose.grafana.yml # (if grafana selected)
134
- ├── docker-compose.loki.yml # (if loki selected)
135
- ├── otel-collector-config.yaml # (if otel-collector selected)
136
- ├── prometheus.yml # (if prometheus selected)
137
- ├── grafana-datasources.yml # (if grafana selected)
138
- └── loki-config.yaml # (if loki selected)
129
+ ├── otel-collector-config-otel-collector.yaml # (if otel-collector selected)
130
+ ├── prometheus-prometheus.yml # (if prometheus selected)
131
+ ├── grafana-datasources-grafana.yml # (if grafana selected)
132
+ ├── dashboard-provider-grafana.yml # (if grafana selected)
133
+ ├── dashboards-grafana/ # (if grafana selected)
134
+ └── loki-config-loki.yaml # (if loki selected)
139
135
  ```
140
136
 
141
137
  All `.env.example` files from selected overlays are automatically merged into a single file with all relevant environment variables.
@@ -192,17 +188,17 @@ Each overlay is a composable package that can include:
192
188
  ```
193
189
  overlays/postgres/
194
190
  ├── devcontainer.patch.json # Features, env vars, ports (merged into devcontainer.json)
195
- ├── docker-compose.yml # Service definition (copied as docker-compose.{overlay}.yml)
191
+ ├── docker-compose.yml # Service definition (merged into output docker-compose.yml)
196
192
  ├── .env.example # Environment variables (merged into combined .env.example)
197
- └── [additional files] # Config files, scripts, directories (copied as-is)
193
+ └── [additional files] # Copied with overlay suffix to avoid filename conflicts
198
194
  ```
199
195
 
200
196
  The tool intelligently handles each file type:
201
197
 
202
198
  - **devcontainer.patch.json** - Deep-merged into devcontainer.json (arrays concatenated, objects merged)
203
- - **docker-compose.yml** - Copied as `docker-compose.{overlay}.yml` and referenced in devcontainer.json
199
+ - **docker-compose.yml** - Merged with base compose into one output `docker-compose.yml`
204
200
  - **.env.example** - Content merged into combined `.env.example` in output
205
- - **Other files/directories** - Copied as-is to output (e.g., `otel-collector.yml`, `config/redis.conf`)
201
+ - **Other files/directories** - Copied with an overlay suffix (e.g., `prometheus-prometheus.yml`, `dashboards-grafana/`)
206
202
 
207
203
  This allows overlays to provide complete, self-contained configurations including any necessary config files.
208
204