Kushi 🍡
Connect to any personal Docker Registry (HTTP API V2) directly from VS Code: browse the image catalog, inspect tags, search and delete single tags or entire repositories.
Kushi (串) is the skewer your tags are threaded on — cute little dango included.
v1.0.0 — first official release.
Features
Activity bar view
A dedicated Kushi view in the activity bar (left sidebar) lists every registry you configure. From there you can:
- Add / edit / remove registries — each entry stores a URL, an optional label and optional basic-auth credentials
- Connect / disconnect with a single click (clicking a disconnected server connects to it)
- The last connection is automatically restored when VS Code starts
Authentication
- Basic auth and transparent Bearer token auth (
WWW-Authenticate: Bearer): works with Docker Hub, GitHub Packages, GitLab-style registries and Harbor — challenge parsing, token exchange, per-scope caching and transparent retry are all handled for you
- Docker CLI credentials reuse: credentials registered with
docker login are looked up in ~/.docker/config.json and pre-filled when adding a registry
- TLS opt-in per registry for self-signed or privately-signed certificates:
- Verify TLS certificate (default) — system trust store
- Trust a custom CA certificate — point Kushi at a PEM file (stored in SecretStorage); verification stays ON
- Skip TLS verification (insecure) — explicit opt-out, and the tree marks those registries as "TLS unverified"
Catalog browsing
Once connected, the tree shows the image catalog of the registry. Clicking a repository expands its tag list — every tag, a dango on the skewer. Tag lists are fetched with full pagination support, so repositories with thousands of tags are never truncated.
Image details
Click a tag (or use its context menu) and the Details pane docked in the Kushi container shows:
- Manifest digest, media type and size;
Docker-Distribution-Api-Version of the registry
- Platforms — for multi-arch indexes every platform is listed and the
amd64 child is resolved
- Config — entrypoint, cmd, env, ports, labels, created, author
- Layers — expandable list with size and media type of each layer
- Referrers (OCI 1.1) — signatures and SBOMs attached to the image (hidden when the registry does not implement the endpoint)
- The ready-to-copy
docker pull command, plus a Copy Value context-menu action on every value
An Open in Editor action opens the same details as a full editor tab.
Right-click a tag → Copy Tag to Registry...: pick the destination registry and tag name, and Kushi transfers the image recursively — blobs (with dedup, skipping already-present ones), child manifests of multi-arch indexes and the root manifest. The copy keeps byte-identical digests.
Multi-select batch deletion
Ctrl/Cmd+click several tags (even across different registries) and delete them in one operation, with per-tag progress and a summary of any failures.
Search
The Kushi view ships with VS Code's native find/filter widget:
- Click the magnifier icon in the view title (or focus the view and press
Ctrl+F)
- The native find bar opens on top of the tree; toggle the funnel inside it to switch from highlight to filter mode
- Type to narrow repositories and tags live: both expose their name as
filterText, so a query like my-app narrows the catalog and v2 narrows the tag lists of the expanded repositories
No dialogs involved — it is the very same search you get in the Explorer.
Tag and repository deletion
- Right-click a tag → Delete Tag...: the extension resolves the manifest digest (
HEAD /v2/<name>/manifests/<tag>) and issues DELETE /v2/<name>/manifests/<digest> after an explicit confirmation
- Right-click a repository → Delete Repository...: deletes every tag of the repository (each with its own digest resolution), reporting per-tag failures if any
Note: the Registry V2 API only supports deletion by digest, and most registries ship with deletion disabled. For a standard registry:2 container set:
REGISTRY_STORAGE_DELETE_ENABLED=true
Security
Passwords and CA certificates are stored in VS Code SecretStorage (OS keychain / secret service) — never in plain-text settings or global state. The server list (URL, label, username, TLS opt-ins) is stored in the extension global state. TLS verification is always ON by default; any per-registry exception is opt-in and visible in the tree.
Commands
All commands live under the Kushi category:
| Command |
Description |
Kushi: Add Registry... |
Configure a new registry (URL, label, credentials, TLS mode) |
Kushi: Edit Registry... |
Edit URL / label / credentials / TLS mode |
Kushi: Remove Registry |
Remove a registry and its stored secrets |
Kushi: Connect / Disconnect |
Open or close a session |
Kushi: Refresh |
Re-fetch catalogs and tag lists |
Kushi: Show Image Details... |
Inspect a tag in the Details pane |
Kushi: Copy Tag to Registry... |
Copy a tag to another registry |
Kushi: Open Details in Editor |
Full-page view of the last inspected tag |
Kushi: Delete Tag... |
Delete one or more selected tags |
Kushi: Delete Repository... |
Delete every tag of a repository |
Filtering is built into the view itself: click the magnifier icon in the view title (or press Ctrl+F while the view has focus) and use VS Code's native find/filter widget — no dialogs involved.
Supported registries
Any implementation of the Docker Registry HTTP API V2, including:
registry:2 (Docker Distribution) — self-hosted, perfect for personal registries
- Harbor, GitLab Container Registry, GitHub Packages (basic-auth endpoints permitting)
- Any reverse-proxied registry (nginx, Traefik, Caddy) with basic authentication
Building from source
npm install
npm run compile # bundle with esbuild into dist/
npm test # unit tests (mock registry server)
npm run package # build a .vsix with vsce
License
MIT