At this year's F8, Facebook's developer conference, our infrastructure team talked about Nuclide, a project designed to provide a unified developer experience for engineers throughout the company — whether they work on native iOS apps, on React and React Native code, or on Hack to run on our HHVM web servers.
In addition to being an important part of our own production stack, Hack, HHVM, and React are, of course, amongst our most popular open source projects, and we realized that it would be helpful to those communities if we shared Nuclide as well. So over the last few months, we've been preparing to bring the project to the broader engineering community, and we're proud to announce that we're starting that journey today by making the source code available on GitHub.
When we were looking at ways to bring this idea of a new internal developer experience to life, we realized we didn't want to build a new editor from scratch. At about the same time, we first saw (and quickly fell in love with) GitHub's Atom project. Over the last few years, we've worked closely with GitHub on our open source program as a whole — as well as on industry initiatives like the TODO Group — so we knew it would be an interesting option from the start.
But our key factor in deciding how to build Nuclide was that the result needed to be hackable. Of course, the Nuclide team itself needed an extensible platform to build the project upon. But just as important, the Facebook culture encourages broad collaboration — the motto "Nothing at Facebook is someone else's problem" hangs as posters on our walls — and so we also knew that we needed an approach that would allow people throughout the company to customize the project to the needs of their own teams and projects.
Atom provides exactly this sort of platform. It is built with contemporary web technology that allows us to use our own React and ES7 expertise. It provides a powerful native shell for integrating well with local mobile compilers and build tools. It already has a rich ecosystem of community packages for every language and keybinding imaginable. It has a rich and extensible API that allows us to quickly develop Nuclide-specific functionality. Above all, by making the source available itself, it allows us to upstream the changes we make to the core in order to benefit others.
Nuclide is, therefore, simply a suite of packages for Atom. We've been able to avoid forking the editor's core, so Nuclide will install on a recent, regular version of Atom and users can continue to benefit from other community packages alongside Nuclide's.
Making the source available in this initial release, the suite includes some of the significant packages we've developed for engineers at Facebook. The functionality includes:
While we're pleased to share these initial packages with the community, we want to emphasize that this is just an early start to the project. For one thing, there is still plenty we can do to improve these packages themselves, and we are very excited to work with the community to collaborate and iterate on them. Pull requests are welcome!
But we also have a lot more planned, and our vision of a unified cross-platform developer experience is far from complete. Support for the iOS, React, and React Native use cases are all on the upcoming roadmap of packages to share. We know debugging is important on both the server and mobile sides, and this is also coming soon. Nuclide grows in functionality as underlying projects like Buck and Infer do. And finally, we are also excited (as many of you in the community probably are!) to start supporting forthcoming patterns like Relay and GraphQL as important first-class citizens in the suite.
Every one of these technologies is used in production at Facebook, and in some way we hope Nuclide showcases how naturally they integrate together. What's more, just as we want our own engineers to be able to write and debug code throughout our whole stack with consistent tools, we hope that we can help mobile, web, and back-end developers outside the company be as efficient and as innovative as ever too.
Finally, a project like Nuclide would never have been possible without the support and work of GitHub and the amazing community in general. So, thank you! We hope you enjoy trying Nuclide out and getting involved with the project.