December 20 2019
Facebook engineers have written millions of lines of code. There is no mandated development environment. Some developers use vim. Some use Emacs. And even more engineers use our internal, unified development environment called Nuclide.
Nuclide began as a set of open-source packages built on top of the Atom editor. We provided our engineers a set of functionality supporting its development workflow and the numerous programming languages used at the company. In 2018, we retired the open source version of Nuclide, but continued to use Nuclide internally.
In late 2018, we announced to our engineers that we would be moving Nuclide to Visual Studio Code. Plenty of development work has been done to migrate the current Nuclide functionality, along with some new features, as internal-facing extensions for Visual Studio Code. Visual Studio Code is now used extensively across the company in beta.
Visual Studio Code is a very popular development tool, with great investment and support from Microsoft and the open source community. It runs on macOS, Windows, and Linux, and has a robust and well-defined extension API that enables us to continue building the important capabilities required for the large-scale development that is done at the company. Visual Studio Code is a platform on which we can safely bet our development platform future.
While engineers at Facebook have Visual Studio Code installed locally on laptops, most development is done directly on individually-reserved development servers that live within our data centers. Being able to access code on these servers in a seamless, performant way is critical for productivity.
As Microsoft’s Visual Studio Code team stated when they first released the remote extensions, remote development is an emerging trend. While our use cases may be more advanced than most development teams given our scale, any developer can gain the benefits of remote development:
These benefits should be available to any developer, and we at Facebook believe that we can apply our unique expertise in this problem space to help. That’s why today we are excited to share not just our usage of their remote development extensions, but our involvement in helping Microsoft further improve remote development extensions, with a lens on enabling engineers to do remote development at scale with Visual Studio Code.
To help Microsoft enhance its product offering, we have provided input through our experience and expertise supporting remote development for Nuclide. And Microsoft has now created such a robust remoting experience, it has allowed us to move off our own custom solution.
We’re also excited that the remote development capabilities added by Microsoft are available as extensions for anyone using Visual Studio Code.
Given the scale of development at Facebook, supporting the efficiency and productivity of our engineers is key. Constant work is being done to enable Visual Studio Code to be the IDE of choice inside the company, whether by building extensions or enhancing our current technologies to better support it.
For example, when it comes to code, Facebook is a polyglot. Code is written in Python, C++, Java and in some of our own created languages like Flow, Hack and Reason. Extensions exist to support these languages, which include syntax highlighting, formatters, linters, etc. Flow, for example, has had a Facebook-developed public Visual Studio Code extension since 2015. With Facebook’s internal move to Visual Studio Code, Flow has been in active development, through areas like Language Service Protocol (LSP) improvements, to better ensure the language works great with Visual Studio Code.
Another example is around source control. Facebook uses Mercurial internally as its source control infrastructure. Development work continues on an extension to allow for source control manipulation directly within Visual Studio Code, enabling all of the workflows Facebook developers are comfortable with in order to get their code reviewed and landed.
Visual Studio Code is now an established part of Facebook’s development future. In teaming with Microsoft, we’re looking forward to being part of the community that helps Visual Studio Code continue to be a world class development tool.