Building a Top 50 VSCode Extension that hit over 2 Million Downloads as an Intern
Tags: github, opensource, tools, vscode
Published: 2018-09-29 05:45:49

---
title: Building a Top 50 VSCode Extension that hit over 2 Million Downloads as an Intern
published: true
description: How dumb luck and perseverance created a top 50 VSCode extension
tags: Github, Open Source, Tools, VSCode
---

It's been over a year since I started working on the [YAML language server](https://github.com/redhat-developer/yaml-language-server) and [VSCode-YAML](https://github.com/redhat-developer/vscode-yaml) and I thought it would be interesting to write about how it grew from hundreds of downloads per version to hundreds of thousands of downloads per version by sheer luck and a bit of perseverance.

### Backstory
At the start of my internship at Red Hat, I was asked to work on YAML tooling specifically for Kubernetes. I was told that the tooling would leverage the language server protocol and we would write integrations for a couple of code editors, starting with VSCode.

The initial idea was to create a Kubernetes language server that would take out some of the pain associated with writing Kubernetes YAML files. We would do this by providing features such as validation, auto-completion, document symbols, etc. As development furthered the decision was made to pivot to a general language server to support all of YAML and not just YAML for Kubernetes' specifically. As a result, we were able to introduce another new feature: validation via JSON schemas. This meant that users are able to insert their own custom JSON schemas and have their YAML be validated against it. In other words, you can use the language server to help write Ansible, Kubernetes, and Travis CI YAML files just to name a few.

Now that we've built the language server, we needed to integrate it into a code editor. We started with VSCode-YAML which is the VSCode extension that starts the YAML language server and exposes preferences to the users in VSCode.

After a few months of development, it came time for the release.

### Release
Within a few weeks of the release, there were hundreds of new developers downloading the extension and a few bugs and feature requests being submitted to the GitHub repo. As the downloads grew, so did my responsibility. I not only had to maintain the existing functionality, but I also had to create any enhancements that users have requested and create new releases.

Initially, VSCode-YAML wasn't popular because of a competing extension on the VSCode marketplace at the time. The competing extension had around ~20k installs and it seemed like we weren't going to be able to compete. Luckily through the power of open source, I ended up getting in contact with that extension creator. In short, he told me that he wanted to pursue other projects and didn't feel like maintaining his work and that if our YAML language server supported document formatting then he would shut down his extension. After we started to support document formatting he unpublished. Out of sheer luck, it gave us enough momentum to become the recommended YAML extension to install on VSCode. 

Within about a week we went from getting hundreds of downloads a day to thousands. First, our extension got on the marketplaces trending today, then the marketplaces trending this week, and eventually the marketplaces trending monthly. After that the extension took off, rounding out that version at roughly 155,000 total downloads. With sheer luck, we were able to take the extension from something that a few people used, to something that thousands use. 

Currently the YAML language server is integrated into a few different clients that support the language server protocol. It was first integrated into VSCode via an extension, then Eclipse Che, then Atom, then Neo-Vim, and more recently Theia.

[Check out VSCode-YAML on the Marketplace](https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml)

 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

VSCode-YAML and the YAML language server are still being actively developed. If you are interested in the project and would like to contribute let me know!

Also, if you're interested in this type of content please give this post a heart :)