dwww Home | Manual pages | Find package

TSSERVER(1)                 General Commands Manual                 TSSERVER(1)

NAME
       tsserver - TypeScript standalone server

       The  TypeScript  standalone  server  (aka tsserver) is a node executable
       that encapsulates the TypeScript compiler and language services, and ex-
       poses them through a JSON protocol. tsserver is well suited for  editors
       and IDE support.

                                  October 2023                      TSSERVER(1)
────────────────────────────────────────────────────────────────────────────────
TSSERVER(1)                 General Commands Manual                 TSSERVER(1)

NAME
       Protocol

Definition
       The  server  communication protocol is defined in the ts.server.protocol
       namespace, declared in ]8;;https://github.com/microsoft/TypeScript/blob/main/lib/tsserverlibrary.d.ts\`tsserverlibrary.d.ts`]8;;\.

       The executable can be found in lib folder under the typescript package.
         npm install --save typescript
         ls node_modules\typescript\lib\tsserver.js

Message format
       tsserver listens on stdin and writes messages back to stdout.

       Requests are JSON following the protocol definition. Here is an  example
       request to open a file c:/DefinitelyTyped/gregorian-calendar/index.d.ts:
         {"seq":1,"type":"request","command":"open","arguments":{"file":"c:/DefinitelyTyped/gregorian-calendar/index.d.ts"}}

       Responses  are  augmented  JSON format. The Message starts with a header
       with the content length followed by a line separator (\r\n) followed  by
       the response body as a JSON string:

       Here is an example of a response for a quickinfo command:
         Content-Length: 116

         {"seq":0,"type":"response","command":"quickinfo","request_seq":2,"success":false,"message":"No content available."}

       Similarly events have the same format as a response.

       Here is an example event for error message:
         Content-Length: 261

         {"seq":0,"type":"event","event":"semanticDiag","body":{"file":"c:/DefinitelyTyped/gregorian-calendar/index.d.ts","diagnostics":[{"start":{"line":264,"offset":44},"end":{"line":264,"offset":50},"text":"Binding element 'Object'
         implicitly has an 'any' type."}]}}

Commands
       tsserver supports a set of commands. The full list of commands supported
       by the server can be found under ]8;;https://github.com/microsoft/TypeScript/blob/main/src/server/protocol.ts\ts.server.protocol.CommandTypes]8;;\.

       Each  command is associated with a request and a response interface. For
       instance command "completions" corresponds to request interface  Comple-
       tionsRequest, and response interface defined in CompletionsResponse.

                                  October 2023                      TSSERVER(1)
────────────────────────────────────────────────────────────────────────────────
TSSERVER(1)                 General Commands Manual                 TSSERVER(1)

NAME
       Sample implementations

Sublime text plugin
       ]8;;https://github.com/Microsoft/TypeScript-Sublime-Plugin\TypeScript-Sublime-Plugin]8;;\  is  a  Sublime  text plugin written in Python
       that uses tsserver.

Visual Studio Code
       ]8;;https://code.visualstudio.com/\VS Code]8;;\'  s  ]8;;https://github.com/microsoft/vscode/tree/master/extensions/typescript-language-features\TypeScript support]8;;\  is  implemented  in  TypeScript   using
       tsserver.

Tide
       ]8;;https://github.com/ananthakumaran/tide\Tide]8;;\ is an elisp implementation for emacs plugin using tsserver

Neovim
       ]8;;https://github.com/mhartington/nvim-typescript\nvim-typescript]8;;\ is a neovim plugin using tsserver

                                  October 2023                      TSSERVER(1)
────────────────────────────────────────────────────────────────────────────────
TSSERVER(1)                 General Commands Manual                 TSSERVER(1)

NAME
       Advanced topics

Logging
       tsserver logging is configured through the TSS_LOG environment variable.

       TSS_LOG can have the following format:
         [-level <terse | normal | requestTime | verbose>]
         [-traceToConsole <true | false>]
         [-logToFile <true | false>]
         [-file <log file path>]

       Note: file defaults to __dirname\.log<PID> if not specified

       Example: set TSS_LOG=-level verbose -file c:\tmp\tsserver.log

Cancellation
       tsserver on startup will try to load module ./cancellationToken from the
       containing  directory. This module should export a factory function that
       accepts a list of command line arguments and returns ]8;;https://github.com/Microsoft/TypeScript/blob/master/src/services/types.ts#L119-L121\HostCancellationTo-
       ken]8;;\.  tsserver will use this  token  to  check  if  in-flight  operation
       should be cancelled.

       NOTE:  This token will be used for all operations so if one operation is
       cancelled and cancellation was reported through the token then when  an-
       other  operation  is  started  - token should be reset into the non-can-
       celled state.

       Default implementation of the cancellation token uses  the  presence  of
       named pipes as a way to signal cancellation.

        • Before  spawning the server, the client generates a unique name. This
          name is passed to the server as a cancellationPipeName  command  line
          argument.

        • If  some  operation  on  the client side should be cancelled - client
          opens a named pipe with a name generated on step 1. Nothing needs  to
          be  written  in  the pipe - default cancellation token will interpret
          the presence of named pipe as a cancellation request.

        • After receiving acknowledgment from the server, the client closes the
          pipe so it can use the same pipe name for the next operation.

       Server can split execution of some commands (like geterr) in a few steps
       that will be executed with a delay. This allows it to react on user  ac-
       tions more promptly and not run heavy computations if their results will
       not  be  used. However, it introduces a tricky moment in support of can-
       cellations. By allowing request to be suspended  and  resumed  later  we
       break  the invariant that was the cornerstone for default implementation
       of cancellation. Namely now requests can overlap so one pipe name can no
       longer be used because client have no reason what request  is  currently
       executing and will be cancelled. To deal with this issue tsserver allows
       pipe name to be computed dynamically based on current request id. To en-
       able  this  the  client  need to provide a value that ends with * as the
       --cancellationPipeName argument. If provided cancellation pipe name ends
       with * then default implementation of cancellation token will build  ex-
       pected pipe name as <cancellationPipeName argument without *><currentRe-
       questId>.  This  will allow client to signal any request it thinks is in
       flight by creating a named pipe with a proper  name.  Note  that  server
       will  always  send  requestCompleted message to denote that asynchronous
       request was completed (either by running to completion or via  cancella-
       tion) so the client can close named pipe once this message is received.

Commandline options
       --cancellationPipeName
              Name of the pipe used as a request cancellation semaphore. See Cancellation for more information.

       --syntaxOnly
              A streamlined mode for when the server will only be answering syntactic queries.

       --suppressDiagnosticEvents
              Opt out of receiving events when new diagnostics are discovered (i.e. must request them explicitly).

       --eventPort
              Port used for receiving events. If non is specified events are sent to stdout.

       --useSingleInferredProject
              Put all open .ts and .js files that do not have a .tsconfig file in a common project

       --noGetErrOnBackgroundUpdate
              Opt out of starting getErr on projectsUpdatedInBackground event

       --locale
              The locale to use to show error messages, e.g. en-us.
              Possible values are: English (US): en, Czech: cs, German: de, Spanish: es, French: fr, Italian: it, Japanese: ja, Korean: ko, Polish: pl,
              Portuguese(Brazil): pt-BR, Russian: ru, Turkish: tr, Simplified Chinese: zh-CN, Traditional Chinese: zh-TW

                                  October 2023                      TSSERVER(1)
────────────────────────────────────────────────────────────────────────────────
TSSERVER(1)                 General Commands Manual                 TSSERVER(1)

NAME
       Project System
       There are three kinds of projects:
Configured Project
       Configured  projects  are  defined by a configuration file, which can be
       Thateconfigurationofilelmarksathecprojectsrootilpath  and  defines  what
       Theesconfiguration file also provide the compiler options to be used for
       this project.
       ]8;;http://www.typescriptlang.org/docs/handbook/tsconfig-json.html\tsconfig.jsonmdocumentation]8;;\.n in the

External Project
       An external project represents host-specific project formats that TS  is
       The ahost is.responsible for supplying the list of files in this project
       and compiler options to use.
       Currently VS is the only consumer of this type of project, to model  the
       TS/JS files in a .csproj project.
Inferred Project
       Iffearefileojdoes not have asconfigurationefile (tsconfig.jsonforejscon-
       fig.json) in the current directory or any parent directories, the server
       will create an inferred project for it.
       The server will include the loose file, then includes  all  other  files
       included by triple slash references and module imports from the original
       file transitively.
       Thephosticanosetothewdefaultstof anfinferrediproject.inferred projects.
Relationship Among These Projects
       In  general, the relationship can be summarized as configured projects >
       external projects > inferred projects.
       For example, if file1.ts belongs to an inferred project, but later a new
       Thennafterstheatsconfig.jsontfilefisefound, file1.ts will no longer  be-
       long  to  the previous inferred project but the newly created configured
       Ifofile1.tstused to be the root file of the inferred project,  that  in-
       ferred  project will now be destroyed; otherwise it will remain with one
       fewer file.
       For another example, if a tsconfig.json file is created to include  some
       files used to belong to an external project (let's call it EP1), then in
       the  current  implementation EP1 will be destroyed, all its files either
       go to the new configured project  or  will  belong  to  a  new  inferred
       project the next time it is opened.
       One  thing to notice is that one file can belong to multiple projects of
       the same kind at the same time. E.g., a file can be included by multiple
       configured projects / inferred projects / external projects.
                                  October 2023                      TSSERVER(1)

Generated by dwww version 1.16 on Tue Dec 16 06:31:49 CET 2025.