Editor setup

Type-checked JavaScript in Zed

  • Zed
  • Built in

Zed supports JavaScript out of the box, and per its documentation it uses vtsls as the language server for JavaScript and TypeScript, with typescript-language-server as the alternative. Both run TypeScript's own server, which reads the nearest jsconfig.json, so with checkJs on the errors in a .js file are tsc's errors.

The setting worth adding is the TypeScript version: per the vtsls README, vtsls runs the TypeScript it bundles by default, which can be newer or older than the one in your project.

At a glance

EditorZed
What to installBuilt in
What checks the codevtsls by default (a language server built on VS Code's TypeScript support); typescript-language-server as the alternative
Where its TypeScript comes fromThe default server, vtsls, uses the TypeScript it bundles unless its autoUseWorkspaceTsdk setting is on
Readsjsconfig.json, tsconfig.json
How this page was checkedNot run in Zed for this page. The settings are from Zed's JavaScript and TypeScript documentation and the vtsls README linked below; what the server reports comes from TypeScript's language service, which the site's tests run.

Use the project's TypeScript

Language server settings go under lsp in Zed's settings.json, keyed by server name, and the server's own settings under settings, the same nesting Zed's TypeScript page uses for vtsls's memory limit. vtsls's switch for the workspace TypeScript is vtsls.autoUseWorkspaceTsdk:

settings.json
{
  "lsp": {
    "vtsls": {
      "settings": {
        // run node_modules/typescript, the version npm run lint uses
        "vtsls": { "autoUseWorkspaceTsdk": true }
      }
    }
  }
}

Switching to typescript-language-server

Zed's documentation shows the language_servers list for this: put typescript-language-server first and !vtsls to turn vtsls off, keeping ... for the other defaults, in the languages section for JavaScript (and for TypeScript and TSX if you use them).

settings.json
{
  "languages": {
    "JavaScript": {
      "language_servers": ["typescript-language-server", "!vtsls", "..."]
    }
  }
}

What differs from tsc

Zed shows diagnostics for the files the server has open. TypeScript's suggestions (unused names when noUnusedLocals is off, @deprecated names) come through the server too, though tsc never prints them. Quick fixes appear as code actions.

Make sure it matches tsc

Run npm run lint in Zed's terminal, open a file it reports, and compare the codes. A file that shows no errors in Zed but fails tsc usually means a different TypeScript version or a file outside the config's include.

Gotchas

  • Zed's documentation covers JSDoc highlighting but does not describe jsconfig.json handling; the server, not Zed, reads it.
  • The ESLint integration described on Zed's JavaScript page runs through code actions; it is separate from type checking and reports different problems.

Sources

Last reviewed 20 October 2026.