# The VS Code Go extension joins the Go project
09 Jun 2020
Summary: Announcement of VS Code Go's move to the Go project.
OldURL: /the-vs-code-go-extension-joins-the-go-project

The Go & VS Code Teams

##

When the Go project began, “an overarching goal was that Go do more to help the
working programmer by enabling tooling, automating mundane tasks such as code
formatting, and removing obstacles to working on large code bases”
([Go FAQ](https://golang.org/doc/faq#What_is_the_purpose_of_the_project)).
Today, more than a decade later, we continue to be guided by that same goal,
especially as it pertains to the programmer’s most critical tool: their editor.

Throughout the past decade, Go developers have relied on a variety of editors
and dozens of independently authored tools and plugins. Much of Go’s early
success can be attributed to the fantastic development tools created by the Go
community. The
[VS Code extension for Go](https://github.com/microsoft/vscode-go), built using
many of these tools, is now used by 41 percent of Go developers
([Go developer survey](https://blog.golang.org/survey2019-results)).

As the VS Code Go extension grows in popularity and as
[the ecosystem expands](https://www.youtube.com/watch?v=EFJfdWzBHwE), it
requires
[more maintenance and support](https://twitter.com/ramyanexus/status/1154470078978486272).
Over the past few years, the Go team has collaborated with the VS Code team to
help the Go extension maintainers. The Go team also began a new initiative to
improve the tools powering all Go editor extensions, with a focus on supporting
the
[Language Server Protocol](https://microsoft.github.io/language-server-protocol/)
with [`gopls`](https://golang.org/s/gopls) and
[the Debug Adapter Protocol with Delve](https://github.com/go-delve/delve/issues/1515).

Through this collaborative work between the VS Code and Go teams, we realized
that the Go team is uniquely positioned to evolve the Go development experience
alongside the Go language.

As a result, we’re happy to announce the next phase in the Go team’s
partnership with the VS Code team: **The VS Code extension for Go is officially
joining the Go project**. With this come two critical changes:

1. The publisher of the plugin is shifting from "Microsoft" to "Golang".
2. The project's repository is moving to join the rest of the Go project at [https://github.com/golang/vscode-go](https://github.com/golang/vscode-go).

We cannot overstate our gratitude to those who have helped
build and maintain this beloved extension. We know that innovative ideas and
features come from you, our users. The Go team’s primary aim as owners of the
extension is to reduce the burden of maintenance work on the Go community.
We’ll make sure the builds stay green, the issues get triaged, and the docs get
updated. Go team members will keep contributors abreast of relevant language
changes, and we’ll smooth the rough edges between the extension’s different
dependencies.

Please continue to share your thoughts with us by filing
[issues](https://github.com/golang/vscode-go/issues) and making
[contributions](https://github.com/golang/vscode-go/blob/master/docs/contributing.md)
to the project. The process for contributing will now be the same as for the
[rest of the Go project](https://golang.org/doc/contribute.html). Go team
members will offer general help in the #vscode channel on
[Gophers Slack](https://invite.slack.golangbridge.org/), and we’ve also created
a #vscode-dev channel to discuss issues and brainstorm ideas with contributors.

We’re excited about this new step forward, and we hope you are too.
By maintaining a major Go editor extension, as well as the Go tooling and
language, the Go team will be able to provide all Go users, regardless of their
editor, a more cohesive and refined development experience.

As always, our goal remains the same: Every user should have an excellent
experience writing Go code.
