Docker Compose FlowA VS Code extension that automatically visualizes your
Features
Supported file patterns
Getting StartedInstall from marketplaceSearch "Docker Compose Flow" in the VS Code Extensions panel, or:
Install from a
|
| Direction | Message |
|---|---|
| Webview → Host | { type: "ready" } — sent on mount; host waits for this before sending YAML |
| Host → Webview | { type: "parse", yaml: string, fileName: string } — sent on open and every save |
Publishing
VS Code Marketplace + Open VSX (Cursor, Windsurf, Gitpod, Project IDX)
This guide covers both the official VS Code Marketplace and Open VSX Registry, which is used by every VS Code-compatible editor that isn't Microsoft VS Code (Cursor, Windsurf, Gitpod, Google Project IDX / Antigravity, etc.). Publish to both to reach all of them.
Step 1 — Create a publisher account
VS Code Marketplace
- Sign in at marketplace.visualstudio.com/manage with a Microsoft account.
- Click Create publisher, choose a publisher ID (e.g.
yourname). This ID is permanent. - Go to dev.azure.com, create an organisation if you don't have one.
- Click User settings → Personal Access Tokens → New Token:
- Name:
vsce-publish(or anything) - Organisation: All accessible organisations
- Expiration: set a long date (max 1 year)
- Scopes: Custom defined → tick Marketplace → Manage
- Name:
- Copy the token — you only see it once.
Open VSX
- Sign in at open-vsx.org with a GitHub account.
- Go to your profile → Access Tokens → create a token. Copy it.
Step 2 — Fill in the placeholders in package.json
{
"publisher": "your-publisher-id", // ← your Marketplace publisher ID
"repository": {
"url": "https://github.com/you/repo" // ← your GitHub repo
},
"homepage": "https://github.com/you/repo#readme",
"bugs": { "url": "https://github.com/you/repo/issues" }
}
Step 3 — Add the extension icon
- Create
images/icon.png— 128 × 128 px PNG, ≤ 256 KB. - Avoid transparency at the edges (the marketplace clips to a rounded rectangle).
package.jsonalready has"icon": "images/icon.png"wired up.
vsce packagewill error if the file is missing.
Step 4 — Bump the version and update the changelog
Follow Semantic Versioning:
# patch release (bug fixes)
npm version patch # 0.1.0 → 0.1.1
# minor release (new features, backwards-compatible)
npm version minor # 0.1.0 → 0.2.0
# major release (breaking changes)
npm version major # 0.1.0 → 1.0.0
Then edit CHANGELOG.md — add a section for the new version before publishing.
Step 5 — Verify what goes into the package
# List every file that would be bundled into the .vsix
npx vsce ls --no-dependencies
The output should contain only:
dist/extension.js
dist/extension.js.map
dist/webview/index.js
dist/webview/index.css
images/icon.png
package.json
README.md
CHANGELOG.md
LICENSE (if present)
If you see node_modules/, src/, or webview/, the .vscodeignore is wrong.
Step 6 — Build and package
# Runs bun run build internally, then packages
bun run package
# → docker-compose-flow-0.1.0.vsix
Install it locally to do a final smoke-test before publishing:
code --install-extension docker-compose-flow-0.1.0.vsix
Step 7 — Log in and publish
VS Code Marketplace
# First time (saves token to your keychain)
npx vsce login your-publisher-id
# enter the Azure DevOps PAT when prompted
# Publish (reads publisher + version from package.json)
bun run publish:vsce
Open VSX (Cursor / Windsurf / Gitpod / Project IDX)
# Publish directly from the .vsix — no separate login step needed
npx ovsx publish docker-compose-flow-0.1.0.vsix \
--pat <your-open-vsx-token>
# Or set the token as an env var and use the npm script:
OVSX_PAT=<token> bun run publish:ovsx
Publish both at once
OVSX_PAT=<token> bun run publish
# runs publish:vsce then publish:ovsx
Pre-publish checklist
[ ] publisher ID updated in package.json
[ ] repository / homepage / bugs URLs updated in package.json
[ ] images/icon.png added (128×128 PNG, ≤ 256 KB)
[ ] version bumped (npm version patch|minor|major)
[ ] CHANGELOG.md updated for this version
[ ] bun run typecheck — no type errors
[ ] bun run build — succeeds
[ ] npx vsce ls --no-dependencies — only dist/ + metadata in list
[ ] local smoke-test: code --install-extension *.vsix, open a compose file
[ ] bun run publish:vsce (Marketplace)
[ ] bun run publish:ovsx (Open VSX)
Updating an existing release
# 1. Bump version
npm version patch
# 2. Update CHANGELOG.md
# 3. Build, package, verify
bun run package
npx vsce ls --no-dependencies
# 4. Publish
OVSX_PAT=<token> bun run publish
The Marketplace does not allow re-publishing the same version number. Always bump before publishing, even for hotfixes.
Tech stack
| Layer | Technology |
|---|---|
| Extension host | TypeScript + esbuild |
| Webview UI | React 19 + Vite |
| Graph rendering | @xyflow/react v12 |
| YAML parsing | js-yaml |
| Package manager | Bun |
Contributing
Pull requests welcome. Run bun run typecheck before submitting to catch type errors in both the extension host and webview.
License
Copyright (c) 2025 Malik Zubayer Ul Haider (xianmalik).
See the LICENSE file for full terms.
