Version 0.1.7
[0.1.7] - 2026-03-23
Added
-
Shared overlay imports — Overlays can now declare
imports:in theiroverlay.ymlto reuse fragments fromoverlays/.shared/, reducing copy-paste duplication across the overlay catalogue- Supported types:
.jsonand.yaml/.ymlfragments are deep-merged into the devcontainer patch;.envfragments are appended to.env.examplewith a# from .shared/…comment - Imports are applied in declaration order, followed by the overlay's own
devcontainer.patch.json; the overlay's own patch always wins on key conflict - Path traversal prevention: any import path that does not begin with
.shared/or resolves outsideoverlays/.shared/is rejected before generation starts - Missing files, unsupported types, and traversal attempts all fail with an error that names the overlay and the bad reference
explain <overlay>now shows the overlay'simportslist under a Shared Imports sectiondoctorvalidates import paths (existence, type, and path traversal) for every overlay
- Supported types:
-
otel-collector,prometheus, andjaegeroverlays converted — These three overlays now import.shared/otel/instrumentation.env, so their generated.env.exampleincludes the OTEL SDK environment variables without duplication -
overlays/.shared/vscode/recommended-extensions.jsonreformatted — Now a valid devcontainer patch (customizations.vscode.extensionsarray) that can be merged directly when imported -
doctor --fix— Interactive repair flow for common environment problems- Can fix stale manifests, missing devcontainer regeneration, Node.js version mismatches, and Docker daemon issues
- Re-runs checks after remediation and reports a structured outcome summary; use
--fix --jsonfor machine-readable output
-
Shared setup utilities — A generated
scripts/setup-utils.shis now included automatically when any overlay provides asetup.sh- Centralises apt locking, architecture detection, binary installation helpers, npm environment setup, and quieter script output
- Eliminates apt-lock races between parallel
postCreateCommandscripts and reduces boilerplate across overlay setup scripts
-
alloverlay — Meta-overlay that expands to all non-preset overlays; useful for integration testing; hidden from the interactive questionnaire -
cudaoverlay — NVIDIA CUDA GPU passthrough for containerized ML/inference workloads- Injects
"runArgs": ["--gpus=all"]and"hostRequirements": {"gpu": true}into devcontainer.json setup.shprobesnvidia-smion container start and prints step-by-step remediation guidance when GPU access is unavailableverify.shassertsnvidia-smiexits 0 fordoctorchecks- Conflicts with
rocm(the companion AMD GPU overlay)
- Injects
-
rocmoverlay — AMD ROCm GPU passthrough for containerized ML/inference workloads- Injects
--device=/dev/kfd,--device=/dev/dri,--group-add=video, and--group-add=renderintorunArgs setup.shprobesrocm-smi/rocminfoon container start and prints actionable host-setup guidance when GPU access is unavailableverify.shassertsrocm-smiexits 0 fordoctorchecks- Conflicts with
cuda(bidirectional); treated as a separate supported profile, not a CUDA drop-in replacement
- Injects
-
devcontainer-clioverlay — Installs@devcontainers/cliglobally for building and managing devcontainers from the terminal -
Port conflict auto-resolution —
initandregennow detect host-port collisions across selected overlays and remap conflicting ports automatically, with a before/after warning in the output
Changed
- Flat
overlaysfield in project config — Project files now use a singleoverlaysarray instead of per-category keys (language,database,devTools, etc.); old category keys are still accepted for backward compatibility doctorcommand —--from-manifest,--from-project, and--project-rootflags added, bringingdoctorinto parity withinitandregenfor project-file and manifest selectiondirenvoverlay — Package installation moved tocross-distro-packagesdevcontainer feature (runs at image-build time);setup.shnow handles only shell hook configurationmodern-cli-toolsoverlay — Core packages (jq,ripgrep,fd-find,bat) moved tocross-distro-packages;setup.shnow only installsyqand creates platform symlinks (fdfind→fd,batcat→bat)git-lfsfeature —autoPullset tofalsein thegit-helpersoverlay; prevents container creation failures in repos with no LFS remote configured
Fixed
${containerEnv:HOME}in mount targets — Replaced with absolute path/home/vscode/.codex; Docker cannot resolve container env vars at mount timepandocoverlay — Added missinglmodernpackage required by the default LaTeX template on Trixie;emoji-fallback.luafilter extended to cover BMP symbol blocks (Dingbats U+2700–U+27BF, Miscellaneous Symbols U+2600–U+26FF) — ✅ ⚠ ❌ and similar characters are now routed to\textfallback{}(Noto Sans Symbols 2) so they render as proper glyphs instead of generating XeLaTeX[WARNING] Missing charactermessagestiltoverlay — Replaced pipe-to-bash installer with direct binary download; fixessudo mv: No such file or directoryon some systemsminiooverlay — Fixed hardcodedamd64-only download URL; now correctly selects theaarch64binaryjustoverlay — Removed hardcoded SHA256 checksums that were incorrect foraarch64mongodboverlay — Replaced standard-repo feature (package not in default repos) with asetup.shthat adds the official MongoDB apt repositorygcloudoverlay — Replaced deprecatedapt-key-based feature with asetup.shusinggpg --dearmornatsoverlay — Fixedlatest-alpinetag not existing on Docker Hub; default version is now2windsurf-clioverlay — Replaced non-existent npm package with binary download from GitHub releases; verify script now exits gracefully on unsupported platforms (arm64)powershelloverlay — Fixed hang on interactive NuGet provider prompt;Install-PackageProvideris now skipped on PowerShell 7+ where the provider is built-inplaywrightoverlay — Browser install moved to asetup.shthat holds the shared apt lock, preventingE: Could not get lockraces with other parallel setup scripts; noisy apt and download progress output suppressedkeycloakoverlay — Health-check URL corrected to port9000(management port) instead of8180; verify timeout increased to cover the full container startup window;depends_onnow waits for postgres to be healthy (condition: service_healthy) so Keycloak no longer starts before its database is readypostgresoverlay — Addedpg_isreadyhealthcheck to the service definition so dependent overlays (e.g. Keycloak) can usecondition: service_healthysqlserveroverlay — Verify script replaceddocker exec(which requires Docker socket access) with a two-path strategy:docker execvia the container's ancestor image when available, TCP port check (/dev/tcp) as an automatic fallback when the Docker socket is not mountedredpandaoverlay — Fixed YAML indentation in the Console config that caused the schema-registry URL to be silently ignoredpre-commitoverlay — Installation now preferspipxto avoid conflicts with active virtualenvsdirenvoverlay —direnv allownow also runs on container rebuilds when.envrcalready exists, fixing the "blocked" error on subsequent opensbunoverlay — PATH entry persisted to shell profiles; verify script falls back to~/.bun/bin/bunwhen the binary is not yet on PATH in a non-interactive shellalertmanager/otel-collectoroverlays — Fixed workspace-root detection; scripts now locate.devcontainer/relative to their own path, eliminating failures whenLOCAL_WORKSPACE_FOLDERis a host-only pathalertmanager,promtail,tempo,otel-demo-nodejs,otel-demo-pythonoverlays — Verify scripts now use the service's HTTP health endpoint as the primary readiness check instead ofdocker ps; eliminates false failures when the Docker socket is not accessible from inside the devcontainermysqloverlay — Verify script timeout increased to 90 seconds to match the container healthcheck window- Duplicate
postCreateCommandentries —duckdb,kind,openapi-tools,tilt, andplaywrightoverlay patches were causing setup scripts to run twice; redundant entries removed - Parallel apt contention — Setup scripts now coordinate through the shared apt lock, eliminating
E: Could not get lockfailures during parallelpostCreateCommandexecution - Escape sequences in apt output —
DEBIAN_FRONTEND=noninteractiveandTERM=dumbare now passed explicitly onsudo apt-getinvocations; prevents cursor-probe escape sequences appearing in devcontainer build logs