container-superposition 0.1.8 → 0.1.10

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 (184) hide show
  1. package/README.md +3 -0
  2. package/dist/tool/cli/args.d.ts.map +1 -1
  3. package/dist/tool/cli/args.js +1 -1
  4. package/dist/tool/cli/args.js.map +1 -1
  5. package/dist/tool/commands/adopt.d.ts.map +1 -1
  6. package/dist/tool/commands/adopt.js +15 -21
  7. package/dist/tool/commands/adopt.js.map +1 -1
  8. package/dist/tool/commands/doctor.d.ts +1 -0
  9. package/dist/tool/commands/doctor.d.ts.map +1 -1
  10. package/dist/tool/commands/doctor.js +1370 -73
  11. package/dist/tool/commands/doctor.js.map +1 -1
  12. package/dist/tool/questionnaire/composer.d.ts +3 -1
  13. package/dist/tool/questionnaire/composer.d.ts.map +1 -1
  14. package/dist/tool/questionnaire/composer.js +273 -20
  15. package/dist/tool/questionnaire/composer.js.map +1 -1
  16. package/dist/tool/questionnaire/presets.d.ts.map +1 -1
  17. package/dist/tool/questionnaire/presets.js +1 -0
  18. package/dist/tool/questionnaire/presets.js.map +1 -1
  19. package/dist/tool/questionnaire/questionnaire.d.ts.map +1 -1
  20. package/dist/tool/questionnaire/questionnaire.js +3 -1
  21. package/dist/tool/questionnaire/questionnaire.js.map +1 -1
  22. package/dist/tool/schema/project-config.d.ts.map +1 -1
  23. package/dist/tool/schema/project-config.js +174 -1
  24. package/dist/tool/schema/project-config.js.map +1 -1
  25. package/dist/tool/schema/types.d.ts +53 -2
  26. package/dist/tool/schema/types.d.ts.map +1 -1
  27. package/docs/README.md +1 -0
  28. package/docs/overlays.md +188 -147
  29. package/docs/specs/001-verbose-plan-graph/spec.md +5 -12
  30. package/docs/specs/002-superposition-config-file/spec.md +5 -12
  31. package/docs/specs/003-mkdocs2-overlay/spec.md +2 -9
  32. package/docs/specs/004-doctor-fix/spec.md +1 -8
  33. package/docs/specs/005-cuda-overlay/spec.md +2 -9
  34. package/docs/specs/006-rocm-overlay/spec.md +3 -10
  35. package/docs/specs/007-target-aware-generation/spec.md +4 -11
  36. package/docs/specs/008-project-file-canonical/spec.md +7 -8
  37. package/docs/specs/009-project-env/spec.md +3 -10
  38. package/docs/specs/010-compose-env-materialization/spec.md +3 -10
  39. package/docs/specs/011-overlay-parameters/spec.md +2 -9
  40. package/docs/specs/012-ollama-cli-overlay/spec.md +47 -0
  41. package/docs/specs/013-doctor-dependency-check/spec.md +250 -0
  42. package/docs/specs/014-doctor-compose-port-cross-validation/spec.md +276 -0
  43. package/docs/specs/015-doctor-env-example-drift/spec.md +248 -0
  44. package/docs/specs/016-doctor-reproducibility-check/spec.md +276 -0
  45. package/docs/specs/017-doctor-dry-run/spec.md +276 -0
  46. package/docs/specs/{007-init-project-file → 018-init-project-file}/spec.md +2 -9
  47. package/docs/specs/019-project-mounts/spec.md +176 -0
  48. package/docs/specs/taxonomy.md +186 -0
  49. package/docs/superposition-yml.md +467 -0
  50. package/overlays/.presets/full-observability.yml +113 -0
  51. package/overlays/.presets/k8s-dev.yml +174 -0
  52. package/overlays/.presets/local-llm.yml +105 -0
  53. package/overlays/.presets/vector-ai.yml +150 -0
  54. package/overlays/.shared/vscode/js-ts-settings.json +19 -0
  55. package/overlays/.shared/vscode/markdown-extensions.json +8 -0
  56. package/overlays/alertmanager/devcontainer.patch.json +0 -1
  57. package/overlays/alertmanager/docker-compose.yml +8 -0
  58. package/overlays/alertmanager/overlay.yml +1 -0
  59. package/overlays/amp/devcontainer.patch.json +4 -1
  60. package/overlays/ansible/README.md +163 -0
  61. package/overlays/ansible/devcontainer.patch.json +14 -0
  62. package/overlays/ansible/overlay.yml +18 -0
  63. package/overlays/argocd/README.md +158 -0
  64. package/overlays/argocd/devcontainer.patch.json +9 -0
  65. package/overlays/argocd/overlay.yml +17 -0
  66. package/overlays/argocd/setup.sh +29 -0
  67. package/overlays/argocd/verify.sh +14 -0
  68. package/overlays/bun/devcontainer.patch.json +1 -10
  69. package/overlays/bun/overlay.yml +8 -1
  70. package/overlays/claude-code/devcontainer.patch.json +6 -1
  71. package/overlays/codex/devcontainer.patch.json +5 -0
  72. package/overlays/comfyui/docker-compose.yml +1 -0
  73. package/overlays/comfyui/overlay.yml +4 -0
  74. package/overlays/commitlint/devcontainer.patch.json +1 -6
  75. package/overlays/docker-sock/overlay.yml +1 -0
  76. package/overlays/dotnet/overlay.yml +4 -1
  77. package/overlays/fuseki/.env.example +5 -0
  78. package/overlays/fuseki/README.md +173 -0
  79. package/overlays/fuseki/devcontainer.patch.json +18 -0
  80. package/overlays/fuseki/docker-compose.yml +29 -0
  81. package/overlays/fuseki/overlay.yml +42 -0
  82. package/overlays/fuseki/verify.sh +58 -0
  83. package/overlays/gemini-cli/devcontainer.patch.json +4 -1
  84. package/overlays/go/overlay.yml +6 -1
  85. package/overlays/grafana/devcontainer.patch.json +0 -1
  86. package/overlays/grafana/docker-compose.yml +8 -2
  87. package/overlays/grafana/overlay.yml +6 -1
  88. package/overlays/jaeger/.env.example +11 -0
  89. package/overlays/jaeger/README.md +33 -4
  90. package/overlays/jaeger/devcontainer.patch.json +9 -1
  91. package/overlays/jaeger/docker-compose.yml +17 -0
  92. package/overlays/jaeger/overlay.yml +1 -12
  93. package/overlays/java/overlay.yml +6 -1
  94. package/overlays/jupyter/docker-compose.yml +1 -0
  95. package/overlays/jupyter/overlay.yml +1 -0
  96. package/overlays/keycloak/devcontainer.patch.json +0 -1
  97. package/overlays/keycloak/docker-compose.yml +1 -0
  98. package/overlays/keycloak/overlay.yml +15 -0
  99. package/overlays/localstack/docker-compose.yml +1 -0
  100. package/overlays/localstack/overlay.yml +19 -1
  101. package/overlays/loki/devcontainer.patch.json +0 -1
  102. package/overlays/loki/docker-compose.yml +8 -0
  103. package/overlays/loki/overlay.yml +1 -0
  104. package/overlays/mailpit/docker-compose.yml +1 -0
  105. package/overlays/mailpit/overlay.yml +1 -0
  106. package/overlays/minio/devcontainer.patch.json +1 -1
  107. package/overlays/minio/docker-compose.yml +1 -0
  108. package/overlays/minio/overlay.yml +23 -2
  109. package/overlays/mkdocs/devcontainer.patch.json +1 -5
  110. package/overlays/mkdocs/overlay.yml +3 -1
  111. package/overlays/mkdocs2/devcontainer.patch.json +1 -5
  112. package/overlays/mkdocs2/overlay.yml +2 -0
  113. package/overlays/mongodb/docker-compose.yml +2 -0
  114. package/overlays/mongodb/overlay.yml +26 -2
  115. package/overlays/mysql/docker-compose.yml +2 -0
  116. package/overlays/mysql/overlay.yml +36 -2
  117. package/overlays/nats/docker-compose.yml +1 -0
  118. package/overlays/nats/overlay.yml +18 -2
  119. package/overlays/nodejs/devcontainer.patch.json +1 -12
  120. package/overlays/nodejs/overlay.yml +8 -1
  121. package/overlays/ollama/README.md +4 -3
  122. package/overlays/ollama/docker-compose.yml +1 -0
  123. package/overlays/ollama/overlay.yml +6 -1
  124. package/overlays/ollama/verify.sh +5 -28
  125. package/overlays/ollama-cli/README.md +90 -0
  126. package/overlays/ollama-cli/devcontainer.patch.json +3 -0
  127. package/overlays/ollama-cli/overlay.yml +19 -0
  128. package/overlays/{ollama → ollama-cli}/setup.sh +7 -10
  129. package/overlays/ollama-cli/verify.sh +49 -0
  130. package/overlays/open-webui/docker-compose.yml +1 -0
  131. package/overlays/open-webui/overlay.yml +8 -1
  132. package/overlays/opencode/devcontainer.patch.json +4 -1
  133. package/overlays/otel-collector/README.md +4 -0
  134. package/overlays/otel-collector/devcontainer.patch.json +4 -1
  135. package/overlays/otel-collector/docker-compose.yml +8 -4
  136. package/overlays/otel-collector/overlay.yml +1 -0
  137. package/overlays/otel-demo-nodejs/devcontainer.patch.json +0 -1
  138. package/overlays/otel-demo-nodejs/docker-compose.yml +1 -0
  139. package/overlays/otel-demo-nodejs/overlay.yml +9 -1
  140. package/overlays/otel-demo-python/devcontainer.patch.json +0 -1
  141. package/overlays/otel-demo-python/docker-compose.yml +1 -0
  142. package/overlays/otel-demo-python/overlay.yml +6 -1
  143. package/overlays/pandoc/README.md +10 -0
  144. package/overlays/pandoc/devcontainer.patch.json +0 -5
  145. package/overlays/pandoc/overlay.yml +2 -0
  146. package/overlays/pandoc/setup.sh +10 -0
  147. package/overlays/pgvector/devcontainer.patch.json +11 -5
  148. package/overlays/pgvector/docker-compose.yml +1 -0
  149. package/overlays/pgvector/overlay.yml +3 -0
  150. package/overlays/playwright/devcontainer.patch.json +0 -5
  151. package/overlays/playwright/overlay.yml +2 -1
  152. package/overlays/postgres/docker-compose.yml +1 -0
  153. package/overlays/postgres/overlay.yml +4 -1
  154. package/overlays/pre-commit/devcontainer.patch.json +1 -7
  155. package/overlays/prometheus/devcontainer.patch.json +0 -1
  156. package/overlays/prometheus/docker-compose.yml +8 -0
  157. package/overlays/prometheus/overlay.yml +1 -0
  158. package/overlays/promtail/devcontainer.patch.json +1 -2
  159. package/overlays/promtail/docker-compose.yml +8 -0
  160. package/overlays/promtail/overlay.yml +1 -0
  161. package/overlays/qdrant/docker-compose.yml +1 -0
  162. package/overlays/qdrant/overlay.yml +5 -1
  163. package/overlays/rabbitmq/docker-compose.yml +1 -0
  164. package/overlays/rabbitmq/overlay.yml +25 -2
  165. package/overlays/redis/docker-compose.yml +7 -0
  166. package/overlays/redis/overlay.yml +15 -1
  167. package/overlays/redpanda/docker-compose.yml +1 -0
  168. package/overlays/redpanda/overlay.yml +15 -3
  169. package/overlays/rocm/overlay.yml +2 -1
  170. package/overlays/rust/overlay.yml +3 -1
  171. package/overlays/sqlserver/docker-compose.yml +1 -0
  172. package/overlays/sqlserver/overlay.yml +17 -0
  173. package/overlays/task/README.md +47 -0
  174. package/overlays/task/devcontainer.patch.json +9 -0
  175. package/overlays/task/overlay.yml +16 -0
  176. package/overlays/task/setup.sh +29 -0
  177. package/overlays/task/verify.sh +14 -0
  178. package/overlays/tempo/devcontainer.patch.json +0 -1
  179. package/overlays/tempo/docker-compose.yml +8 -0
  180. package/overlays/tempo/overlay.yml +1 -0
  181. package/overlays/windsurf-cli/devcontainer.patch.json +4 -1
  182. package/package.json +1 -1
  183. package/tool/schema/config.schema.json +74 -1
  184. package/overlays/.shared/otel/otel-base-config.yaml +0 -30
@@ -0,0 +1,18 @@
1
+ id: ansible
2
+ name: Ansible
3
+ description: Automation and configuration management with Ansible and ansible-lint
4
+ category: cloud
5
+ supports: []
6
+ requires: []
7
+ suggests:
8
+ - aws-cli
9
+ - azure-cli
10
+ - gcloud
11
+ - terraform
12
+ conflicts: []
13
+ tags:
14
+ - cloud
15
+ - iac
16
+ - automation
17
+ - ansible
18
+ ports: []
@@ -0,0 +1,158 @@
1
+ # Argo CD CLI Overlay
2
+
3
+ Adds the [`argocd`](https://argo-cd.readthedocs.io/) CLI for managing GitOps workflows with an Argo CD server — log in, inspect apps, trigger syncs, and manage rollouts without leaving your devcontainer.
4
+
5
+ ## Features
6
+
7
+ - **Argo CD CLI** — `argocd` client for login, app sync, rollback, and lifecycle operations
8
+ - **Release install** — binary downloaded from official Argo CD GitHub releases
9
+ - **Architecture-aware** — installs `amd64` or `arm64` automatically
10
+
11
+ ## How It Works
12
+
13
+ The `argocd` binary is downloaded from the official Argo CD GitHub releases page (`github.com/argoproj/argo-cd`) during devcontainer creation via `setup.sh`.
14
+
15
+ - Detects host architecture (`amd64` / `arm64`) automatically
16
+ - Downloads the matching pre-built binary and places it in `/usr/local/bin/argocd`
17
+ - No Argo CD server is run inside the devcontainer — the CLI connects to an external (or locally port-forwarded) Argo CD server
18
+
19
+ **Dependencies:** None required. Pair with `kubectl-helm` for full cluster access, and `k3d` or `kind` for local Kubernetes clusters where you can deploy Argo CD for testing.
20
+
21
+ ## Common Commands
22
+
23
+ ### Authentication
24
+
25
+ ```bash
26
+ # Login to an Argo CD server
27
+ argocd login argocd.example.com
28
+
29
+ # Login with TLS disabled (for local/dev servers)
30
+ argocd login localhost:8080 --insecure
31
+
32
+ # Login and save context (avoids re-entering credentials)
33
+ argocd login argocd.example.com --grpc-web
34
+
35
+ # Check current logged-in context
36
+ argocd context
37
+
38
+ # Switch context
39
+ argocd context my-cluster
40
+
41
+ # Logout
42
+ argocd logout argocd.example.com
43
+ ```
44
+
45
+ ### Application Management
46
+
47
+ ```bash
48
+ # List all applications
49
+ argocd app list
50
+
51
+ # Get detailed status of an app
52
+ argocd app get my-app
53
+
54
+ # Create an app (GitOps source)
55
+ argocd app create my-app \
56
+ --repo https://github.com/myorg/my-manifests.git \
57
+ --path k8s/overlays/dev \
58
+ --dest-server https://kubernetes.default.svc \
59
+ --dest-namespace my-app
60
+
61
+ # Sync (deploy) an app
62
+ argocd app sync my-app
63
+
64
+ # Wait for sync to complete
65
+ argocd app wait my-app --sync
66
+
67
+ # Delete an app (without deleting cluster resources)
68
+ argocd app delete my-app
69
+
70
+ # Delete an app and all managed cluster resources
71
+ argocd app delete my-app --cascade
72
+ ```
73
+
74
+ ### Sync Operations
75
+
76
+ ```bash
77
+ # Sync only specific resources
78
+ argocd app sync my-app --resource apps:Deployment:my-app
79
+
80
+ # Force sync (ignores resource health)
81
+ argocd app sync my-app --force
82
+
83
+ # Dry-run sync (show diff without applying)
84
+ argocd app diff my-app
85
+
86
+ # Rollback to a previous revision
87
+ argocd app rollback my-app 3
88
+
89
+ # View app history
90
+ argocd app history my-app
91
+ ```
92
+
93
+ ### Projects & RBAC
94
+
95
+ ```bash
96
+ # List projects
97
+ argocd proj list
98
+
99
+ # Create a project
100
+ argocd proj create my-project \
101
+ --description "My project" \
102
+ --src https://github.com/myorg/my-manifests.git \
103
+ --dest https://kubernetes.default.svc,my-namespace
104
+
105
+ # List project roles
106
+ argocd proj role list my-project
107
+ ```
108
+
109
+ ## Local Port-Forward Workflow
110
+
111
+ When testing Argo CD in a local cluster (k3d / kind):
112
+
113
+ ```bash
114
+ # Install Argo CD in the cluster
115
+ kubectl create namespace argocd
116
+ kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
117
+
118
+ # Wait for pods to be ready
119
+ kubectl -n argocd wait --for=condition=ready pod -l app.kubernetes.io/name=argocd-server --timeout=120s
120
+
121
+ # Port-forward the API server
122
+ kubectl -n argocd port-forward svc/argocd-server 8080:443 &
123
+
124
+ # Get the initial admin password
125
+ argocd admin initial-password -n argocd
126
+
127
+ # Login
128
+ argocd login localhost:8080 --insecure
129
+ ```
130
+
131
+ ## Use Cases
132
+
133
+ - **GitOps deployments** — Sync Kubernetes manifests from Git to a cluster via Argo CD
134
+ - **Multi-environment promotion** — Manage dev/staging/production app variants with app-of-apps patterns
135
+ - **Rollback workflows** — Inspect history and revert to a previous known-good revision
136
+ - **Local GitOps testing** — Deploy Argo CD to a local `k3d` or `kind` cluster to test GitOps pipelines without a cloud environment
137
+ - **Drift detection** — Use `argocd app diff` to detect config drift before syncing
138
+
139
+ **Integrates well with:**
140
+
141
+ - `kubectl-helm` — Kubernetes CLI and Helm for inspecting or patching resources managed by Argo CD
142
+ - `k3d` — Lightweight local clusters for GitOps development and testing
143
+ - `kind` — Full-conformance local clusters for Argo CD testing
144
+ - `terraform` — Provision the cluster and bootstrap Argo CD with Terraform, then manage apps with the CLI
145
+
146
+ ## References
147
+
148
+ - [Argo CD Documentation](https://argo-cd.readthedocs.io/)
149
+ - [Argo CD CLI Reference](https://argo-cd.readthedocs.io/en/stable/user-guide/commands/argocd/)
150
+ - [Argo CD GitHub Releases](https://github.com/argoproj/argo-cd/releases)
151
+ - [Argo CD Getting Started](https://argo-cd.readthedocs.io/en/stable/getting_started/)
152
+ - [App of Apps Pattern](https://argo-cd.readthedocs.io/en/stable/operator-manual/cluster-bootstrapping/)
153
+
154
+ **Related Overlays:**
155
+
156
+ - [`kubectl-helm`](../kubectl-helm/README.md) — Kubernetes CLI and Helm package manager
157
+ - [`k3d`](../k3d/README.md) — Lightweight local Kubernetes clusters
158
+ - [`kind`](../kind/README.md) — Full-conformance local Kubernetes clusters
@@ -0,0 +1,9 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
3
+ "postCreateCommand": {
4
+ "setup-argocd": "bash .devcontainer/scripts/setup-argocd.sh"
5
+ },
6
+ "postStartCommand": {
7
+ "verify-argocd": "bash .devcontainer/scripts/verify-argocd.sh"
8
+ }
9
+ }
@@ -0,0 +1,17 @@
1
+ id: argocd
2
+ name: Argo CD CLI
3
+ description: GitOps CLI for managing Argo CD applications and sync workflows
4
+ category: cloud
5
+ supports: []
6
+ requires: []
7
+ suggests:
8
+ - kubectl-helm
9
+ - k3d
10
+ - kind
11
+ conflicts: []
12
+ tags:
13
+ - cloud
14
+ - kubernetes
15
+ - gitops
16
+ - argocd
17
+ ports: []
@@ -0,0 +1,29 @@
1
+ #!/bin/bash
2
+ # Setup script for Argo CD CLI
3
+
4
+ set -e
5
+
6
+ echo "🔧 Setting up Argo CD CLI..."
7
+
8
+ # Source shared setup utilities
9
+ # shellcheck source=setup-utils.sh
10
+ source "$(dirname "${BASH_SOURCE[0]}")/setup-utils.sh"
11
+
12
+ detect_arch
13
+
14
+ ARGOCD_VERSION="${ARGOCD_VERSION:-v2.14.12}"
15
+ echo "📦 Installing argocd ${ARGOCD_VERSION}..."
16
+
17
+ install_binary \
18
+ "https://github.com/argoproj/argo-cd/releases/download/${ARGOCD_VERSION}/argocd-linux-${CS_ARCH}" \
19
+ "argocd"
20
+
21
+ if command -v argocd >/dev/null 2>&1; then
22
+ echo "✅ Argo CD CLI installed successfully"
23
+ argocd version --client --short || argocd version --client
24
+ else
25
+ echo "❌ Argo CD CLI installation failed"
26
+ exit 1
27
+ fi
28
+
29
+ echo "✅ Argo CD CLI setup complete"
@@ -0,0 +1,14 @@
1
+ #!/bin/bash
2
+ # Verification script for Argo CD CLI overlay
3
+
4
+ set -e
5
+
6
+ echo "🔍 Verifying Argo CD CLI overlay..."
7
+
8
+ if command -v argocd >/dev/null 2>&1; then
9
+ argocd version --client --short || argocd version --client
10
+ echo "✅ Argo CD CLI is installed"
11
+ else
12
+ echo "❌ Argo CD CLI is not installed"
13
+ exit 1
14
+ fi
@@ -12,16 +12,7 @@
12
12
  },
13
13
  "customizations": {
14
14
  "vscode": {
15
- "extensions": ["oven.bun-vscode", "dbaeumer.vscode-eslint", "esbenp.prettier-vscode"],
16
- "settings": {
17
- "editor.defaultFormatter": "esbenp.prettier-vscode",
18
- "[typescript]": {
19
- "editor.defaultFormatter": "esbenp.prettier-vscode"
20
- },
21
- "[javascript]": {
22
- "editor.defaultFormatter": "esbenp.prettier-vscode"
23
- }
24
- }
15
+ "extensions": ["oven.bun-vscode"]
25
16
  }
26
17
  },
27
18
  "remoteEnv": {
@@ -5,7 +5,12 @@ category: language
5
5
  supports: []
6
6
  requires: []
7
7
  suggests: []
8
- conflicts: []
8
+ conflicts:
9
+ - grafana
10
+ - open-webui
11
+ - mysql
12
+ - redpanda
13
+ - otel-demo-nodejs
9
14
  tags:
10
15
  - language
11
16
  - bun
@@ -14,3 +19,5 @@ tags:
14
19
  ports:
15
20
  - 3000
16
21
  - 8080
22
+ imports:
23
+ - .shared/vscode/js-ts-settings.json
@@ -1,3 +1,8 @@
1
1
  {
2
- "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json"
2
+ "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
3
+ "customizations": {
4
+ "vscode": {
5
+ "extensions": ["anthropic.claude-code"]
6
+ }
7
+ }
3
8
  }
@@ -5,5 +5,10 @@
5
5
  "apt": "bubblewrap",
6
6
  "apk": "bubblewrap"
7
7
  }
8
+ },
9
+ "customizations": {
10
+ "vscode": {
11
+ "extensions": ["openai.chatgpt"]
12
+ }
8
13
  }
9
14
  }
@@ -37,3 +37,4 @@ volumes:
37
37
 
38
38
  networks:
39
39
  devnet:
40
+ name: devnet
@@ -7,9 +7,13 @@ supports:
7
7
  requires: []
8
8
  suggests:
9
9
  - cuda
10
+ - rocm
10
11
  - python
11
12
  - ollama
13
+ compose_imports:
14
+ - .shared/compose/nvidia-gpu-devcontainer.yml
12
15
  conflicts: []
16
+ serviceOrder: 3
13
17
  tags:
14
18
  - dev
15
19
  - ai
@@ -1,8 +1,3 @@
1
1
  {
2
- "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
3
- "features": {
4
- "ghcr.io/devcontainers/features/node:1": {
5
- "version": "lts"
6
- }
7
- }
2
+ "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json"
8
3
  }
@@ -7,6 +7,7 @@ requires: []
7
7
  suggests: []
8
8
  conflicts:
9
9
  - docker-in-docker
10
+ serviceOrder: 0
10
11
  tags:
11
12
  - dev
12
13
  - docker
@@ -5,7 +5,10 @@ category: language
5
5
  supports: []
6
6
  requires: []
7
7
  suggests: []
8
- conflicts: []
8
+ conflicts:
9
+ - mysql
10
+ - redpanda
11
+ - otel-demo-nodejs
9
12
  tags:
10
13
  - language
11
14
  - dotnet
@@ -0,0 +1,5 @@
1
+ # Apache Jena Fuseki Configuration
2
+ FUSEKI_VERSION={{cs.FUSEKI_VERSION}}
3
+ FUSEKI_PORT={{cs.FUSEKI_PORT}}
4
+ FUSEKI_ADMIN_PASSWORD={{cs.FUSEKI_ADMIN_PASSWORD}}
5
+ FUSEKI_DATASET={{cs.FUSEKI_DATASET}}
@@ -0,0 +1,173 @@
1
+ # Apache Jena Fuseki Overlay
2
+
3
+ SPARQL 1.1 server and RDF triplestore powered by Apache Jena TDB2, with a built-in web administration UI.
4
+
5
+ ## Features
6
+
7
+ - **Apache Jena Fuseki** — SPARQL 1.1 server supporting queries, updates, and the Graph Store Protocol
8
+ - **TDB2 triplestore** — High-performance persistent RDF storage with better concurrency than TDB1
9
+ - **Admin web UI** — Browser-based interface for managing datasets, running ad-hoc queries, and monitoring the server (port 3030)
10
+ - **REST management API** — Create, list, and delete datasets without restarting the server
11
+ - **Dataset auto-creation** — A default dataset is created automatically on first start
12
+ - **Persistent storage** — RDF data is stored in a named Docker volume (`fuseki-data`) and survives container restarts
13
+ - **Docker Compose service** — Runs as an isolated sidecar container accessible on the `devnet` network
14
+
15
+ ## How It Works
16
+
17
+ This overlay adds Fuseki as a separate Docker Compose service. Fuseki runs inside its own container and is reachable from your development container using the hostname `fuseki`.
18
+
19
+ **Service configuration:**
20
+
21
+ - Image: `ghcr.io/stain/jena-fuseki`
22
+ - Network: `devnet` (shared with the dev container)
23
+ - Persistence: `fuseki-data` volume for TDB2 database files
24
+ - Port: 3030 (customizable via `FUSEKI_PORT` host mapping)
25
+
26
+ **Environment variables set in the dev container:**
27
+
28
+ | Variable | Value | Description |
29
+ | ----------------------- | -------------------- | ----------------------------------------- |
30
+ | `FUSEKI_HOST` | `fuseki` | Container hostname for internal access |
31
+ | `FUSEKI_PORT` | `3030` | Container-internal port for SPARQL access |
32
+ | `FUSEKI_URL` | `http://fuseki:3030` | Base URL for SPARQL requests |
33
+ | `FUSEKI_DATASET` | `ds` (default) | Name of the default dataset |
34
+ | `FUSEKI_ADMIN_PASSWORD` | see `.env` | Admin user password (set in `.env`) |
35
+
36
+ ## Common Commands
37
+
38
+ ### SPARQL Queries
39
+
40
+ ```bash
41
+ # Simple SELECT query
42
+ curl -X POST \
43
+ -H "Content-Type: application/sparql-query" \
44
+ -d "SELECT * WHERE { ?s ?p ?o } LIMIT 10" \
45
+ "$FUSEKI_URL/$FUSEKI_DATASET/query"
46
+
47
+ # Query with URL encoding (GET request)
48
+ curl -G "$FUSEKI_URL/$FUSEKI_DATASET/query" \
49
+ --data-urlencode "query=SELECT * WHERE { ?s ?p ?o } LIMIT 10"
50
+ ```
51
+
52
+ ### Loading RDF Data
53
+
54
+ ```bash
55
+ # Load a Turtle file into the default graph
56
+ curl -X PUT \
57
+ -H "Content-Type: text/turtle" \
58
+ --data-binary @data.ttl \
59
+ "$FUSEKI_URL/$FUSEKI_DATASET/data"
60
+
61
+ # Add data without replacing existing triples (POST)
62
+ curl -X POST \
63
+ -H "Content-Type: text/turtle" \
64
+ --data-binary @more-data.ttl \
65
+ "$FUSEKI_URL/$FUSEKI_DATASET/data"
66
+
67
+ # Load into a named graph
68
+ curl -X PUT \
69
+ -H "Content-Type: text/turtle" \
70
+ --data-binary @data.ttl \
71
+ "$FUSEKI_URL/$FUSEKI_DATASET/data?graph=http://example.org/mygraph"
72
+ ```
73
+
74
+ ### SPARQL Update
75
+
76
+ ```bash
77
+ # Insert triples via SPARQL Update
78
+ curl -X POST \
79
+ -H "Content-Type: application/sparql-update" \
80
+ -d "INSERT DATA { <http://example.org/s> <http://example.org/p> \"o\" . }" \
81
+ "$FUSEKI_URL/$FUSEKI_DATASET/update"
82
+ ```
83
+
84
+ ### Dataset Management
85
+
86
+ ```bash
87
+ # List all datasets (requires admin credentials)
88
+ curl -u "admin:$FUSEKI_ADMIN_PASSWORD" "$FUSEKI_URL/\$/datasets"
89
+
90
+ # Create a new TDB2-backed dataset
91
+ curl -X POST \
92
+ -u "admin:$FUSEKI_ADMIN_PASSWORD" \
93
+ -H "Content-Type: application/x-www-form-urlencoded" \
94
+ -d "dbName=mydata&dbType=tdb2" \
95
+ "$FUSEKI_URL/\$/datasets"
96
+
97
+ # Delete a dataset
98
+ curl -X DELETE \
99
+ -u "admin:$FUSEKI_ADMIN_PASSWORD" \
100
+ "$FUSEKI_URL/\$/datasets/mydata"
101
+ ```
102
+
103
+ ### Admin UI
104
+
105
+ ```bash
106
+ # Open in browser (from the host machine)
107
+ open http://localhost:3030
108
+ ```
109
+
110
+ Log in with username `admin` and the configured `FUSEKI_ADMIN_PASSWORD`. From the UI you can browse and query datasets, upload RDF files, create/delete datasets, and monitor server statistics.
111
+
112
+ ## Use Cases
113
+
114
+ - **Semantic web development** — Prototype and test OWL/RDFS ontologies and SPARQL queries locally
115
+ - **Linked data applications** — Build applications that consume or publish RDF data
116
+ - **Knowledge graph projects** — Store, update, and query knowledge graphs during development
117
+ - **Data integration** — Use SPARQL Federation or CONSTRUCT queries to merge heterogeneous data sources
118
+ - **Research and education** — Run SPARQL 1.1 workloads without a cloud account
119
+
120
+ **Integrates well with:**
121
+
122
+ - `java` — Use Apache Jena client library (`jena-arq`) for typed SPARQL queries
123
+ - `python` — Use `SPARQLWrapper` or `rdflib-endpoint` for data science workflows
124
+ - `nodejs` — Use `n3` or `comunica` for JavaScript/TypeScript SPARQL clients
125
+
126
+ ## Configuration
127
+
128
+ ### Environment Variables
129
+
130
+ The overlay includes a `.env.example` file. Copy and customize:
131
+
132
+ ```bash
133
+ cd .devcontainer
134
+ cp .env.example .env
135
+ ```
136
+
137
+ **Default values (`.devcontainer/.env.example`):**
138
+
139
+ ```bash
140
+ FUSEKI_VERSION=latest
141
+ FUSEKI_PORT=3030
142
+ FUSEKI_ADMIN_PASSWORD=admin # ⚠ Change this for any shared environment
143
+ FUSEKI_DATASET=ds
144
+ ```
145
+
146
+ ⚠️ **Security:** The default `FUSEKI_ADMIN_PASSWORD=admin` must be changed for any environment accessible beyond localhost.
147
+
148
+ ### SPARQL Endpoints
149
+
150
+ Default dataset `ds` endpoints (from inside the dev container):
151
+
152
+ | Endpoint | URL |
153
+ | ----------------- | ------------------------------ |
154
+ | SPARQL Query | `http://fuseki:3030/ds/query` |
155
+ | SPARQL Update | `http://fuseki:3030/ds/update` |
156
+ | Graph Store (GSP) | `http://fuseki:3030/ds/data` |
157
+ | Admin UI | `http://fuseki:3030` |
158
+
159
+ All endpoints are also forwarded to `localhost:3030` on the host machine.
160
+
161
+ ## References
162
+
163
+ - [Apache Jena Fuseki Documentation](https://jena.apache.org/documentation/fuseki2/)
164
+ - [SPARQL 1.1 Query Language](https://www.w3.org/TR/sparql11-query/)
165
+ - [SPARQL 1.1 Update](https://www.w3.org/TR/sparql11-update/)
166
+ - [Fuseki Docker Image (stain/jena-docker)](https://github.com/stain/jena-docker)
167
+ - [Apache Jena TDB2](https://jena.apache.org/documentation/tdb2/)
168
+
169
+ **Related Overlays:**
170
+
171
+ - `java` — Develop JVM applications using Apache Jena client libraries
172
+ - `python` — Use RDFLib or SPARQLWrapper for Python-based SPARQL workflows
173
+ - `nodejs` — Build JavaScript SPARQL clients with Comunica or N3.js
@@ -0,0 +1,18 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
3
+ "runServices": ["fuseki"],
4
+ "forwardPorts": [3030],
5
+ "portsAttributes": {
6
+ "3030": {
7
+ "label": "Fuseki SPARQL Server",
8
+ "onAutoForward": "openBrowser"
9
+ }
10
+ },
11
+ "remoteEnv": {
12
+ "FUSEKI_HOST": "fuseki",
13
+ "FUSEKI_PORT": "3030",
14
+ "FUSEKI_DATASET": "{{cs.FUSEKI_DATASET}}",
15
+ "FUSEKI_ADMIN_PASSWORD": "{{cs.FUSEKI_ADMIN_PASSWORD}}",
16
+ "FUSEKI_URL": "http://fuseki:3030"
17
+ }
18
+ }
@@ -0,0 +1,29 @@
1
+ version: '3.8'
2
+
3
+ services:
4
+ fuseki:
5
+ image: stain/jena-fuseki:${FUSEKI_VERSION:-{{cs.FUSEKI_VERSION}}}
6
+ restart: unless-stopped
7
+ volumes:
8
+ - fuseki-data:/fuseki
9
+ environment:
10
+ ADMIN_PASSWORD: ${FUSEKI_ADMIN_PASSWORD:-{{cs.FUSEKI_ADMIN_PASSWORD}}}
11
+ FUSEKI_DATASET_1: ${FUSEKI_DATASET:-{{cs.FUSEKI_DATASET}}}
12
+ TDB: '2'
13
+ ports:
14
+ - '${FUSEKI_PORT:-{{cs.FUSEKI_PORT}}}:3030'
15
+ networks:
16
+ - devnet
17
+ healthcheck:
18
+ test: ['CMD-SHELL', 'curl -sf http://localhost:3030/$/ping || exit 1']
19
+ interval: 10s
20
+ timeout: 5s
21
+ retries: 5
22
+ start_period: 20s
23
+
24
+ volumes:
25
+ fuseki-data:
26
+
27
+ networks:
28
+ devnet:
29
+ name: devnet
@@ -0,0 +1,42 @@
1
+ id: fuseki
2
+ name: Apache Jena Fuseki
3
+ description: SPARQL 1.1 server and triplestore backed by Apache Jena TDB
4
+ category: database
5
+ supports:
6
+ - compose
7
+ requires: []
8
+ suggests:
9
+ - java
10
+ - python
11
+ - nodejs
12
+ conflicts: []
13
+ serviceOrder: 0
14
+ tags:
15
+ - database
16
+ - rdf
17
+ - sparql
18
+ - triplestore
19
+ - semantic-web
20
+ - linked-data
21
+ - jena
22
+ ports:
23
+ - port: 3030
24
+ service: fuseki
25
+ protocol: http
26
+ description: Fuseki SPARQL server and admin UI
27
+ path: /
28
+ onAutoForward: openBrowser
29
+ parameters:
30
+ FUSEKI_VERSION:
31
+ description: Apache Jena Fuseki image version tag
32
+ default: latest
33
+ FUSEKI_PORT:
34
+ description: Host port mapped to Fuseki (3030 inside container)
35
+ default: '3030'
36
+ FUSEKI_ADMIN_PASSWORD:
37
+ description: Fuseki admin user password
38
+ default: admin
39
+ sensitive: true
40
+ FUSEKI_DATASET:
41
+ description: Name of the default dataset to create on first start
42
+ default: ds