Apple Container — VS Code / Cursor Extension
Manage Apple's native container CLI directly from VS Code or Cursor. Browse and control containers, images, volumes, and networks from a dedicated sidebar; stream logs, open shells, monitor live stats, watch disk usage, and build OCI images from Dockerfiles — all without leaving your editor.
Requirements
|
|
| macOS |
macOS 26 Tahoe or later |
| Hardware |
Apple Silicon (M1 / M2 / M3 / M4) |
container CLI |
Download the signed .pkg from github.com/apple/container/releases |
| System service |
Run container system start once after each reboot (or click the status bar item) |
Installation
Development / from source
git clone https://github.com/your-org/apple-container-vscode
cd apple-container-vscode
npm install
npm run compile
Press F5 in VS Code / Cursor to open an Extension Development Host with the extension loaded.
Package as VSIX
npm install -g @vscode/vsce
vsce package
# → apple-container-0.x.x.vsix
Install via Extensions: Install from VSIX… in the command palette.
Configuration
| Setting |
Default |
Description |
appleContainer.cliPath |
container |
Path to the container binary (override if not on $PATH). |
appleContainer.refreshInterval |
10 |
Auto-refresh interval in seconds. Set 0 to disable. |
// .vscode/settings.json
{
"appleContainer.cliPath": "/usr/local/bin/container",
"appleContainer.refreshInterval": 5
}
Features
Containers view
Lists all containers (running and stopped) with image name, state, and IP address.
Expandable items — each container with published ports or mounts can be expanded to show:
- Port sub-items — displays
hostPort → containerPort/protocol. Click a TCP port item to open it in the browser instantly.
- Mount sub-items — shows the bind/volume mount destination, source path, and read/write mode.
Hover tooltip — hovering a container shows a rich tooltip with:
- Image, state, and network address
- Full port-forwarding table with clickable "Open in browser" links for running containers
- Bound mounts with source paths
Context menu actions:
| Action |
When available |
| Start |
Container is stopped |
| Stop |
Container is running |
| Stop Selected |
Multiple selected (multi-select enabled) |
| Open Shell |
Container is running — opens interactive sh in the integrated terminal |
| View Logs |
Always — tails logs with -f in the terminal |
| Copy File from Container |
Running — pick a path inside the container, save locally |
| Copy File to Container |
Running — pick a local file, set destination path |
| Inspect |
Always — opens full JSON in a read-only editor tab |
| Delete |
Always — requires confirmation |
| Delete Selected |
Multiple selected |
Title bar buttons:
| Button |
Action |
$(pulse) |
Open Live Stats dashboard |
$(refresh) |
Refresh containers list |
$(clear-all) |
Prune stopped containers |
$(pie-chart) |
Open Disk Usage panel |
Images view
Lists all local OCI images with architecture, size, and creation date.
Context menu actions:
| Action |
Description |
| Run Image |
Launch the image with the guided run wizard |
| Tag Image |
Enter a new name:tag for the image |
| Push Image |
Push to a registry (streams progress to the output channel) |
| Inspect |
View full image JSON |
| Delete |
Delete with confirmation |
| Delete Selected |
Delete multiple images at once |
Title bar buttons:
| Button |
Action |
$(cloud-download) |
Pull image from a registry |
$(package) |
Build image from a Dockerfile |
$(run) |
Run container (guided wizard) |
$(clear-all) |
Prune unused images |
$(refresh) |
Refresh images list |
Volumes view
Lists all volumes with driver, format, and actual disk usage (reads the source path with du -sk — not the quota).
Context menu: Inspect, Delete (with confirmation).
Title bar: Create Volume, Refresh, Prune Unused Volumes.
Networks view
Lists all container networks with driver, gateway, and subnet.
Context menu: Inspect, Delete (with confirmation).
Title bar: Create Network, Refresh, Prune Unused Networks.
System status bar
The bottom status bar item shows the current system service state (● running / ○ stopped).
- Click to toggle: starts the service if stopped, stops it if running.
- Polls the service every N seconds automatically.
Live Stats dashboard
Open via the $(pulse) button or Apple Container: Show Live Stats in the command palette.
Displays a card for each running container with:
- CPU — percentage bar + sparkline chart of the last 30 samples
- MEM — usage/limit bar + sparkline chart
- NET RX / TX — cumulative network I/O bytes
- BLK READ / WRITE — cumulative block device I/O bytes
Rate mode toggle — click "Show rates /s" in the panel header to switch all I/O values from cumulative totals to live bytes-per-second throughput rates computed from consecutive sample deltas.
Stats refresh every 3 seconds automatically.
Disk Usage panel
Open via Apple Container: Disk Usage (system df) or the $(pie-chart) button.
Runs container system df and displays a table of disk usage for Images, Containers, and Volumes (total count, active count, size, reclaimable space). Each row with reclaimable space shows a Reclaim button that prunes the corresponding resource type.
Dockerfile CodeLens
When a Dockerfile or Containerfile is open in the editor, two CodeLens actions appear above every FROM instruction:
- Build image — triggers the build wizard for that Dockerfile
- Build & Run — builds the image and immediately launches the run wizard
Build & Run wizard
Triggered from the command palette, title bar, or CodeLens.
- Build — prompts for Dockerfile path, context directory, and image tag. Streams
docker build output to the Apple Container output channel.
- Run — interactive form to set the container name, port mappings (
-p), environment variables (-e), volume mounts (-v), and extra CLI flags.
Registry
Available from the Images title bar or command palette:
| Command |
Description |
| Pull Image |
Enter any image reference; streams progress to the output channel |
| Push Image |
Right-click an image item; streams push progress |
| Tag Image |
Right-click an image item; enter new name:tag |
| Registry Login |
3-step wizard: registry host → username → password (hidden input) |
File copy
Copy files between the host and a running container:
| Method |
Description |
| Copy File from Container |
Right-click a running container → pick a path inside → choose where to save locally |
| Copy File to Container |
Right-click a running container → pick a local file → set destination path |
| Explorer context menu |
Right-click any file in the Explorer → "Copy to Container…" → pick a running container |
Crash notifications
A background watcher (polls every 8 s) tracks running containers. When a previously-running container disappears, a VS Code notification appears:
Container "my-app" stopped unexpectedly. [Restart] [Dismiss]
Clicking Restart runs container start <id> immediately.
Auto-refresh (smart polling)
All four sidebar views refresh automatically at the configured interval (appleContainer.refreshInterval).
The refresh is change-aware: on each tick, the extension fetches a lightweight snapshot of each resource list and compares it with the previous snapshot. The tree only re-renders if the data actually changed — no unnecessary UI redraws or flicker when nothing is happening.
| View |
Watched signals |
| Containers |
Container IDs, state, network addresses |
| Images |
Image IDs, names |
| Volumes |
Volume IDs, names |
| Networks |
Network IDs, names |
Command palette reference
All commands are under the Apple Container category (Cmd+Shift+P):
| Command |
Description |
| Start Container System |
Start the container system service |
| Stop Container System |
Stop the container system service |
| Show Live Stats |
Open the live stats dashboard |
| Disk Usage (system df) |
Open the disk usage panel |
| Pull Image… |
Pull an image from a registry |
| Registry Login… |
Authenticate to a container registry |
| Build Image from Dockerfile… |
Build an OCI image |
| Run Container… |
Launch a container with the run wizard |
| Prune Stopped Containers |
Remove all stopped containers |
| Prune Unused Images |
Remove dangling / unused images |
Right-click any item in the sidebar for additional context-menu actions.
Architecture
VS Code / Cursor
│
├── Activity Bar — Apple Container sidebar
│ ├── Containers view src/containersProvider.ts
│ ├── Images view src/imagesProvider.ts
│ ├── Volumes view src/volumesProvider.ts
│ └── Networks view src/networksProvider.ts
│
├── Status bar item src/statusBar.ts
├── Live Stats webview src/statsWebview.ts
├── Disk Usage webview src/systemDf.ts
├── Dockerfile CodeLens src/dockerfileCodeLens.ts
│
├── Background services
│ ├── AutoRefresher src/autoRefresh.ts (change-aware polling)
│ └── CrashWatcher src/crashWatcher.ts (stop detection + notifications)
│
├── Commands src/commands.ts
├── Registry commands src/registryCommands.ts
├── Build & Run src/buildRun.ts
├── File copy src/fileCopy.ts
├── Output channel src/output.ts
└── CLI wrapper src/cli.ts
│
▼ child_process.execFile / spawn
│
container ls / start / stop / rm / exec / logs
container image ls / pull / push / tag / build / rm
container volume ls / create / rm / prune
container network ls / create / rm / prune
container system status / start / stop / df
container stats / copy / registry login
Limitations
- Requires Apple Silicon + macOS 26 Tahoe. Intel Macs are not supported by the
container CLI.
- The extension does not install or upgrade the
container CLI — manage that separately via the releases page.
- Registry login stores credentials in the CLI's credential store, not VS Code's secret storage.
License
MIT