Skip to content
| Marketplace
Sign in
Visual Studio Code>Programming Languages>WorkmanNew to Visual Studio Code? Get it now.
Workman

Workman

GOOD PUPPIES GOOD SOFTWARE

|
10 installs
| (0) | Free
Language support for Workman
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

Workman VS Code Extension

Small VS Code client for Workman. The Marketplace package includes one portable JavaScript language server bundle that runs on VS Code's built-in Node runtime, so the same small VSIX supports Linux, Windows, and macOS on every architecture supported by VS Code. By default the extension prefers the system wm lsp command: it probes wm from PATH and uses it whenever the command launches and exits cleanly. On development machines wm itself runs the Workman checkout, so wm lsp already serves frontend and LSP changes after Workman: Restart Language Server. When the probe fails, the extension falls back to the packaged server bundle.

The packaged server does not need Deno for ordinary Workman files. JavaScript/TypeScript FFI reflection still uses the deno executable configured by workman.denoPath (default: deno).

C header reflection automatically uses a packaged Aro binary on Linux, macOS, and Windows for x64 and ARM64. No Zig installation is required. The matching binary, resource headers and licenses are unpacked into a local cache on first use; system C headers/SDKs remain necessary. WM_C_HEADER_EXTRACTOR overrides the packaged executable; WM_C_HEADER_BACKEND=zig selects the previous system-Zig backend. See the extractor docs for cache configuration and beta limitations.

Extension builds use the Go-native TypeScript 7 compiler. The bundled FFI reflector intentionally uses the separately named TypeScript 6 compatibility API because TypeScript 7.0 has no programmatic compiler API; migrate reflection when the new API arrives in TypeScript 7.1 rather than silently falling back from tsc 7 during builds.

Language features

  • Syntax highlighting for character literals, primed identifiers, nested block comments, numeric exponents, Unicode escapes, and string gaps. Word selection includes trailing identifier primes.

  • Module-aware diagnostics and inferred-type hover, including unsaved Workman files. Annotated bindings also show unannotated: when removing their annotations infers a different type.

  • Go to Definition/Ctrl+Click for local bindings, types, constructors, and named, wildcard, or namespace imports.

  • Find All References across the active module graph and other open Workman documents.

  • Document symbols for the Outline and Go to Symbol views.

  • Automatic cleanup and dependent revalidation when .wm files are deleted, renamed, or moved.

The wm lsp server runs under deno run -A via the wm launcher. Environment access is needed because the language server uses TypeScript's compiler API for JS FFI type reflection. Run access is needed when reflecting the Deno global namespace, which mounts deno types as the source of Deno's own declarations.

Development

npm install
npm run compile

Open this folder as a VS Code extension development host, or package it later as a VSIX. The included Run Workman Extension launch config opens the repository root as the test workspace.

Marketplace package

Create the universal VSIX from this directory:

npm run package

This bundles the extension client and language server with esbuild and writes dist/goodpuppies.workman-<version>.vsix. The package contains no native runtime or platform-specific binary; the current bundle is about 1.8 MiB including TypeScript's standard-library declarations for FFI reflection. Upload that file through the Visual Studio Marketplace publisher portal.

By default the extension probes wm lsp from PATH and falls back to the bundled server. To force a specific server, set workman.serverPath to a wm launcher executable/script (launched as wm lsp; usually just a script running deno run -A main.ts) or a compiled JavaScript server bundle:

{
  "workman.serverPath": "/absolute/path/to/wm"
}

There is no source-checkout mode: on development machines wm runs the checkout, so point workman.serverPath at wm itself when the launcher is not on PATH. Then updates to the Workman checkout usually only need Workman: Restart Language Server.

Generated frontend

The language server always uses the generated frontend-v2 runtime included in the repository and extension package. To reproduce it from the Workman sources:

deno task frontend-v2:build

By default the server loads src/generated/frontend_v2_parser.js from the checkout or package that provides the running server. To point at another generated artifact, set:

{
  "workman.frontendV2ModulePath": "/absolute/path/to/frontend-v2.generated.mjs"
}

This is a real semantic frontend mode, not a structural sidecar: frontend v2 is the parser feeding module loading, typechecking diagnostics, and hover. Generated Surface-to-compiler lowering matches Peggy semantic fields and source spans across every valid .wm file under std, examples, and tooling.

Frontend v2 renders committed missing ;, {, and } marks as structural inlay hints. Other malformed input receives the generated parser's farthest-failure diagnostic; the retired transitional _/? hole projection is not part of this mode. Disable structural hints independently with workman.structuralInlayHints.enabled and restart the language server.

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