ediContainers
VS Code / Cursor extension for managing Apple container machines (container machine).
Features
- Create machines from presets (Ubuntu, Debian, Alpine, Kali) with SSH + sudo preconfigured (
root / root)
- Custom Dockerfile path for hand-written images (does not touch preset Dockerfiles / BASE_IMAGE injection)
- Edit which base images/versions to pull via a user JSON settings file
- List container machines with status and IP address
- Start, stop, and delete machines from the sidebar
- Connect to a running machine via Remote SSH
- Auto-refresh with configurable interval
- Start the container system when it is not running
Requirements
- macOS 26+ on Apple Silicon
- Apple
container CLI installed (container in PATH)
- Container system running:
container system start
- Remote - SSH extension for SSH connections (in Cursor:
anysphere.remote-ssh)
Installation
Prebuilt .vsix releases are published on GitHub — no npm / compile required.
- Open Releases and download
edi-containers-*.vsix (e.g. edi-containers-0.2.1.vsix).
- Install in one of these ways:
Cursor / VS Code UI
- Open Extensions (
Cmd+Shift+X).
- Click
… (top of the Extensions view) → Install from VSIX…
- Select the downloaded
.vsix file.
- Reload the window if prompted.
CLI
# Cursor
cursor --install-extension ~/Downloads/edi-containers-0.2.1.vsix
# VS Code
code --install-extension ~/Downloads/edi-containers-0.2.1.vsix
Or download the asset from the latest release, then install the local file (CLI cannot resolve a version-agnostic .vsix name automatically):
# open latest release in browser, download edi-containers-*.vsix, then:
cursor --install-extension ~/Downloads/edi-containers-0.2.1.vsix
After install, open the ediContainers icon in the Activity Bar.
Usage
- Open the ediContainers view in the Activity Bar.
- Click + (Create Machine): pick a preset or Custom Dockerfile, enter a name. Presets build with injected
BASE_IMAGE; Custom builds your file as-is.
- Machines appear with
status · IP in the description.
- Use inline actions or the context menu:
- Start — boots a stopped machine
- Stop — stops a running machine
- Connect via SSH — pick or enter a username, then open a Remote SSH window as
user@ip (preset machines: root / root)
- Copy IP — copy the machine IP to the clipboard
- Delete Machine — stop (if needed) and delete
- Click the gear (Edit Machine Image Settings) to change preset base image tags/versions. Use Edit Custom Dockerfile (or the Custom item in Create) for a fully manual image.
- Click Refresh to update the list manually.
Custom Dockerfile
Presets stay opinionated (SSH root/root, systemd/OpenRC, etc.). For full control:
- Create Machine → Custom Dockerfile (or command Edit Custom Dockerfile).
- Edit the file in extension global storage (created once from a minimal skeleton; never overwritten).
- Build & Create → choose image tag → machine name.
No --build-arg BASE_IMAGE is passed. Rebuild triggers when the Dockerfile content changes.
SSH usernames are stored in the extension global storage folder and offered again on later connects.
Machine image settings
Defaults ship in templates/machine-images.json. On first use a copy is written to the extension global storage. Edit that copy (via the gear command) to change what gets pulled, for example:
{
"id": "ubuntu",
"label": "Ubuntu",
"description": "Ubuntu + systemd + SSH (root/root)",
"baseImage": "ubuntu:22.04",
"localTag": "edi-containers/ubuntu-ssh:local",
"enabled": true
}
Set "enabled": false to hide a template from Create. After changing baseImage, the next Create rebuilds that local tag.
Configuration
| Setting |
Default |
Description |
ediContainers.containerPath |
container |
Path to the Apple container CLI |
ediContainers.refreshInterval |
8000 |
Auto-refresh interval in ms (0 to disable) |
Development
npm install
npm run compile
npm run watch # during development
If Node.js/npm is not installed globally, you can compile with Cursor's bundled Node:
npm run compile:cursor
Or manually:
export PATH="/Applications/Cursor.app/Contents/Resources/app/resources/helpers:$PATH"
node esbuild.js
Press F5 in VS Code/Cursor to launch an Extension Development Host.
Build VSIX
For maintainers (end users should use Installation from Releases):
npm install
npm run package
This produces edi-containers-<version>.vsix in the repo root. Attach it to a GitHub Release for others to install.
CLI mapping
| Action |
Command |
| List |
container machine list --format json |
| Inspect |
container machine inspect <id> |
| Stop |
container machine stop <id> |
| Start |
container machine run -n <id> -d -- true |
| Create |
container machine create <image> --name <name> |
| Delete |
container machine delete <id> |
| Build template |
container build --tag <tag> --build-arg BASE_IMAGE=… <templateDir> |
| Start system |
container system start |
License
MIT