# The VS Code Go extension joins the Go project
09 Jun 2020
Summary: Announcement of VS Code Go's move to 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.
