Devcontainers
Devcontainers are the standard development environment for all Groupe-3D projects. Docker or Orbstack is the only host requirement for developers. See 2026-01-01: Use devcontainers as the standard development environment for the full rationale.
For the full devcontainer specification and editor integration details, refer to the official documentation.
Requirements
Section titled “Requirements”Every project must ship a .devcontainer/devcontainer.json that satisfies the following conventions.
Standard features
Section titled “Standard features”All devcontainers must include these features:
"features": { "ghcr.io/devcontainers/features/common-utils:2": { "configureZshAsDefaultShell": true, "installOhMyZsh": true, "installZsh": true, "upgradePackages": true, "username": "vscode" }, "ghcr.io/devcontainers/features/git:1": { "ppa": "false", "version": "latest" }, "ghcr.io/eitsupi/devcontainer-features/go-task:1": {}}common-utils sets up a consistent shell experience (Zsh + Oh My Zsh) and a non-root vscode user. git ensures a recent Git version. go-task provides the task command, which every project uses as its standard task runner.
Language runtimes (Node.js, Ruby, Python, Go, etc.) must also be added via features — not by choosing a language-specific base image. Browse available features at containers.dev/features.
Standard extensions and settings
Section titled “Standard extensions and settings”"customizations": { "vscode": { "extensions": [ "ms-vsliveshare.vsliveshare" ], "settings": { "github.copilot.chat.skillsLocations": [ "~/.copilot/skills" ] } }}ms-vsliveshare.vsliveshare enables collaborative editing sessions. The skillsLocations setting tells Copilot to load agent skills from the directory mounted below. Add project-specific extensions alongside these mandatory ones.
Skills mount
Section titled “Skills mount”Organisation-wide agent skills live on the host machine at ~/.copilot/skills (see 2026-04-14: Syncing organisation-wide agent skills). A bind mount makes them available inside the container:
"mounts": [ "source=${localEnv:HOME}/.copilot/skills,target=/home/vscode/.copilot/skills,type=bind,consistency=cached"]${localEnv:HOME} resolves to the host user’s home directory on macOS and Linux. Adjust the target path if your image uses a different user than vscode (e.g. /root/.copilot/skills for root-based images).
Run sync-skills on the host before building or rebuilding the container so the mounted directory is up to date.
Port forwarding
Section titled “Port forwarding”Only the application’s own port(s) may appear in forwardPorts. Backing services (databases, caches, queues) must not be forwarded to the host. See 2026-04-21: Only expose application ports in devcontainers.
When you need to connect an external tool (e.g. TablePlus, RedisInsight) to a backing service:
- Orbstack: use the container’s domain name (e.g.
postgres.my-app.orb.local) - Docker Desktop: use the container IP shown in the Docker Desktop UI
Minimal template
Section titled “Minimal template”{ "name": "my-project", "image": "mcr.microsoft.com/devcontainers/base:ubuntu", "features": { "ghcr.io/devcontainers/features/common-utils:2": { "configureZshAsDefaultShell": true, "installOhMyZsh": true, "installZsh": true, "upgradePackages": true, "username": "vscode" }, "ghcr.io/devcontainers/features/git:1": { "ppa": "false", "version": "latest" }, "ghcr.io/eitsupi/devcontainer-features/go-task:1": {} }, "mounts": [ "source=${localEnv:HOME}/.copilot/skills,target=/home/vscode/.copilot/skills,type=bind,consistency=cached" ], "forwardPorts": [3000], "customizations": { "vscode": { "extensions": [ "ms-vsliveshare.vsliveshare" ], "settings": { "github.copilot.chat.skillsLocations": [ "~/.copilot/skills" ] } } }, "postCreateCommand": "task devcontainer:postcreate"}Replace 3000 with the application’s actual port. Add language-specific features and extensions as needed.