A native VS Code extension for managing Teleport (tsh) logins, resources, and
local proxies. It's a ground-up redesign of the Wails desktop app (tsh-gui),
built around VS Code's own shell instead of reimplementing an explorer, editor,
and window chrome.
What it does
Connection projects (.tsh files). Opening a .tsh file shows a
connection screen (custom editor): the list of proxies, their live status, and
start/stop controls. Use Teleport: Open Project as JSON to edit the raw
file.
Login state in the status bar. A status-bar item shows the current
tsh login (user@cluster) and expiry; click it to log in.
Proxies. Start/stop individual proxies or the whole project. Each proxy
runs a tsh proxy … process; output streams to the Teleport output
channel.
Readiness actions. Each proxy surfaces the single next step it needs —
log in, switch cluster, request access, or start — based on session state and
observed tsh errors.
SSH sessions open as real VS Code integrated terminals.
Port conflicts. Starting a proxy on a busy port offers to kill the
conflicting process (via lsof/ss).
Kubernetes context switching against a workbench-scoped KUBECONFIG, so
it never clobbers your global kubeconfig.
Requirements
The tsh CLI on your PATH (or set teleport.tshPath).
lsof or ss for port-conflict detection (optional).
Architecture
The extension host (Node/TS) reimplements the Go backend:
Concern
Module
tsh CLI wrappers
src/tsh/
Project model / validation / args
src/model/project.ts
Readiness state machine
src/model/readiness.ts
Connection-string derivation
src/model/connstring.ts
Proxy process manager
src/proxy/manager.ts
Port lookup / kill
src/proxy/port.ts
SSH terminal (node-pty)
src/ssh/terminal.ts
Session + status bar
src/session.ts
Custom editor (connection UI)
src/editor/ + media/
Prompts (add/edit proxy)
src/ui/proxyPrompt.ts
Development
npm install
npm run watch # esbuild in watch mode
# Press F5 in VS Code to launch an Extension Development Host
npm run typecheck # tsc --noEmit
npm run build # production bundle
node-pty is a native module and is kept external (not bundled). It is
required only for SSH terminals; the rest of the extension works without it.