Tech stack

This document lists the technologies that we prefer to use by default.

If you would like to build something that does not conform to our standard tech stack:

  1. Write an RFC that explains why you want to use a different technology.
  2. Open a PR that adds a description for the new exception to this document.

If there are enough exceptions of the same kind (i.e. at least 3), we can consider updating our policy so that these cases are no longer considered exceptions.

Web environments

We use TypeScript and React in web environments (e.g. web apps, browser extensions).




We use Go to write backend services.



syntect-server is a minimal HTTP server written in Rust that wraps the Syntect syntax highlighting library (also written in Rust) to expose a JSON API. This service does not require a lot of maintenance, but when it does, it is a pain.

Why do we put up with this pain? As of October 2019, Syntect continues to be the best option for us to deliver high quality syntax highlighting to our users across a wide variety of languages. References:

LSIF generators and language servers

LSIF generators and language servers should usually be written in the language that they are designed to analyze for two reasons:

  1. This aligns the incentive to maintain the LSIF generator or language server with the community that benefits from it.
  2. Existing language analysis libraries that would be useful to leverage are usually written in the target language being analyzed.