Skip to content
| Marketplace
Sign in
Visual Studio Code>Other>letsgoNew to Visual Studio Code? Get it now.
letsgo

letsgo

letsgo

| (0) | Free
A thin editor client for letsgo: a per-module panel, a status bar built from `letsgo plan --json`, and language features for letsgo.mod served by `letsgo lsp`.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

letsgo for VS Code

A thin editor client for letsgo. Everything it knows comes from the letsgo binary on your machine — this extension carries no copy of its directive table, hook list or feature catalogue.

Status: v1. The panel, status bar, language features, Update pin, Tag next version, the manifest viewer, the palette commands and the letsgo task type work.

Requirements

letsgo on your PATH, or pointed to with letsgo.path:

go install github.com/danielriddell21/letsgo/cmd/letsgo@latest

What it does

Language features for letsgo.mod, the global config.mod and .letsgo/*.mod, served by letsgo lsp (so they need a letsgo new enough to have it): diagnostics on every change, completion, hover documentation, formatting and an outline. Nothing about the syntax is hard-coded here; it all comes from the binary. In an untrusted workspace the server starts with --restricted (parse, format and complete only).

A letsgo view in the Explorer sidebar, one entry per module (a directory with a letsgo.mod), built from letsgo plan --json:

  • resolved values (version, commit, targets)
  • gates, with their pass/fail/warn/skip status
  • artifacts the release would produce
  • features that depart from their defaults
  • plugin pins

The status bar shows the current module's version and gate-failure count.

In an untrusted workspace the extension never runs letsgo plan — a repository you have only opened, not trusted, cannot execute its own pinned plugins through it.

Update pin: a lightbulb on a plugin <hook> <command> <version> sha256:… line installs the plugin's latest release into the plugin store and rewrites the pin. Not offered in an untrusted workspace.

Tag next version: letsgo: Tag next version asks letsgo for a proposal (letsgo tag --json), shows major/minor/patch with the proposed level first and its reason, then tags on your pick. It then offers to push the tag, which is what starts the release in CI. The extension never publishes a release itself. Not run in an untrusted workspace.

Manifests: a letsgo.json gets a Verify lens (letsgo verify <tag>, output in the terminal panel), and "Reopen Editor With… → letsgo manifest" shows its artifacts, gates, features and plugins with a Verify button. letsgo: Verify release asks for a tag.

Commands (Command Palette, all from the binary on your machine; each runs in the terminal panel unless noted, and none runs in an untrusted workspace):

command runs
Plan with analysis letsgo plan --json --analyse, refreshing the panel
Build snapshot letsgo build --snapshot
Rehearse release letsgo release --snapshot (publishes nothing)
Diff releases letsgo diff <from> [to], shown in a read-only document
Install pinned plugins letsgo plugin install
Update letsgo letsgo update, after showing what is available and asking

Checks that point at a line of letsgo.mod (a budget naming a target that isn't built, say) also show as squiggles there and in Problems.

Tasks: a letsgo task type for tasks.json, with a $letsgo problem matcher for letsgo.mod:L:C: message lines. It runs plan, build, verify, diff, doctor, features, audit and plugin, plus release only with --snapshot: the extension never publishes a release.

{ "type": "letsgo", "command": "plan", "args": ["--analyse"], "problemMatcher": "$letsgo" }

Older letsgo: the extension checks letsgo version and switches off features a too-old binary lacks, named once in a warning rather than failing repeatedly. See Editor support for the version each feature needs.

Documentation

Full docs — the LSP methods, every command, the task type, and how this fits into the rest of letsgo — live on the Editor support page of the letsgo wiki.

Development

npm ci --ignore-scripts
npm test            # compile, lint, unit tests (no VS Code needed)
npm run test:host   # extension-host tests in a real VS Code

npm run test:host downloads VS Code into .vscode-test/ on first run and runs two suites in its extension host, one in a trusted workspace and one in an untrusted one, against a fixture workspace (src/test/host/fixtures). A fake letsgo script first on PATH stands in for the binary, so no letsgo install is needed; it logs every call, which is how the tests see what the extension ran. On a headless Linux box wrap it in xvfb-run -a; CI does. The host tests need Linux or macOS. Set VSCODE_TEST_VERSION to test another VS Code version.

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft