diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index 3e85b56..e54406b 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -13,8 +13,8 @@
 - [`#vscode` channel in Gophers Slack](https://invite.slack.golangbridge.org/messages/vscode)
 
 Before filing an issue, please review our troubleshooting guides
-* [Troubleshooting problems with debugging](https://github.com/golang/vscode-go/blob/master/docs/debugging.md#troubleshooting)
-* [Troubleshooting other problems](https://github.com/golang/vscode-go/tree/master/docs/troubleshooting.md)
+* [Troubleshooting problems with debugging](https://github.com/golang/vscode-go/wiki/debugging#troubleshooting)
+* [Troubleshooting other problems](https://github.com/golang/vscode-go/wiki/troubleshooting)
 
 Please answer these questions before submitting your issue. Thanks!
 -->
diff --git a/README.md b/README.md
index 7e18d2d..a96896f 100644
--- a/README.md
+++ b/README.md
@@ -9,9 +9,9 @@
 [Go programming language](https://golang.org/).
 
 📣
-[Remote attach debugging](docs/debugging.md#connecting-to-headless-delve-with-target-specified-at-server-start-up) is now available via Delve's native DAP implementation with Delve v1.7.3 or newer. It enchances remote debugging with the same
-[debugging features](docs/debugging.md) that are already in use for local debugging. It is now the default with the
-[Go Nightly](docs/nightly.md) build of the extension and will become the default for the stable releases in mid 2022.
+[Remote attach debugging](https://github.com/golang/vscode-go/wiki/debugging#connecting-to-headless-delve-with-target-specified-at-server-start-up) is now available via Delve's native DAP implementation with Delve v1.7.3 or newer. It enchances remote debugging with the same
+[debugging features](https://github.com/golang/vscode-go/wiki/debugging) that are already in use for local debugging. It is now the default with the
+[Go Nightly](https://github.com/golang/vscode-go/wiki/nightly) build of the extension and will become the default for the stable releases in mid 2022.
 We recommend switching your remote attach configurations in `launch.json` to use
 `"debugAdapter":"dlv-dap"` now to verify that this works for you.
 Please [file a new issue](https://github.com/golang/vscode-go/issues/new/choose) if you encounter any problems.
@@ -29,7 +29,7 @@
   * [Go installation guide]. This extension works best with Go 1.14+.
   * [Managing extensions in VS Code].
 * **Step 2.** To activate the extension, open any directory or workspace
-  containing Go code. Once activated, the [Go status bar](docs/ui.md) will
+  containing Go code. Once activated, the [Go status bar](https://github.com/golang/vscode-go/wiki/ui) will
   appear in the bottom left corner of the window and show the recognized Go
   version.
 * **Step 3.** The extension depends on [a set of extra command-line tools](#tools).
@@ -46,7 +46,7 @@
 
 Please be sure to learn more about the many [features](#features) of this
 extension, as well as how to [customize](#customization) them. Take a look at
-[Troubleshooting](docs/troubleshooting.md) and [Help](#ask-for-help) for further
+[Troubleshooting](https://github.com/golang/vscode-go/wiki/troubleshooting) and [Help](#ask-for-help) for further
 guidance.
 
 If you are new to Go, [this article](https://golang.org/doc/code.html) provides
@@ -72,7 +72,7 @@
 commands for working with Go files. You can access any of these by opening the
 Command Palette (`Ctrl+Shift+P` on Linux/Windows and `Cmd+Shift+P` on Mac), and
 then typing in the command name. See the
-[full list of commands](docs/commands.md#detailed-list) provided by this
+[full list of commands](https://github.com/golang/vscode-go/wiki/commands#detailed-list) provided by this
 extension.
 
 <p align=center>
@@ -85,7 +85,7 @@
 
 For better syntax highlighting, we recommend enabling
 [semantic highlighting](https://code.visualstudio.com/api/language-extensions/semantic-highlight-guide)
-by turning on [Gopls' `ui.semanticTokens` setting](https://github.com/golang/vscode-go/blob/master/docs/settings.md#uisemantictokens).
+by turning on [Gopls' `ui.semanticTokens` setting](https://github.com/golang/vscode-go/wiki/settings#uisemantictokens).
     ```
     "gopls": { "ui.semanticTokens": true }
     ```
@@ -94,7 +94,7 @@
 
 The extension uses a few command-line tools developed by the Go community. In
 particular, `go`, `gopls`, and `dlv` **must** be installed for this extension
-to work correctly. See the [tools documentation](docs/tools.md) for a complete
+to work correctly. See the [tools documentation](https://github.com/golang/vscode-go/wiki/tools) for a complete
 list of tools the extension depends on.
 
 In order to locate these command-line tools, the extension searches
@@ -128,16 +128,16 @@
 
 The extension needs no configuration and should work out of the box. However,
 you may wish to adjust settings to customize its behavior. Please see the
-[settings documentation](docs/settings.md) for a comprehensive list of settings.
-See [advanced topics](docs/advanced.md) for further customizations and unique
+[settings documentation](https://github.com/golang/vscode-go/wiki/settings) for a comprehensive list of settings.
+See [advanced topics](https://github.com/golang/vscode-go/wiki/advanced) for further customizations and unique
 use cases.
 
 ## Troubleshooting
 
 If the extension isn't working as you expect, you can take a look at our
 troubleshooting guides. There is one for [general
-troubleshooting](docs/troubleshooting.md), and another specifically for
-[troubleshooting the debugging feature](docs/debugging.md#troubleshooting).
+troubleshooting](https://github.com/golang/vscode-go/wiki/troubleshooting), and another specifically for
+[troubleshooting the debugging feature](https://github.com/golang/vscode-go/wiki/debugging#troubleshooting).
 
 ## Ask for help
 
@@ -154,13 +154,13 @@
 
 If you'd like to get early access to new features and bug fixes, you can use the
 nightly build of this extension. Learn how to install it in by reading the
-[Go Nightly documentation](docs/nightly.md).
+[Go Nightly documentation](https://github.com/golang/vscode-go/wiki/nightly).
 
 ## Contributing
 
 We welcome your contributions and thank you for working to improve the Go
 development experience in VS Code. If you would like to help work on the VS Code
-Go extension, please see our [contribution guide](docs/contributing.md). It
+Go extension, please see our [contribution guide](https://github.com/golang/vscode-go/wiki/contributing). It
 explains how to build and run the extension locally, and describes the process
 of sending a contribution.
 
@@ -181,14 +181,14 @@
 [VS Code Go extension]: https://marketplace.visualstudio.com/items?itemName=golang.go
 [Go installation guide]: https://golang.org/doc/install
 ["Getting started with VS Code Go"]: https://youtu.be/1MXIGYrMk80
-[IntelliSense]: https://github.com/golang/vscode-go/blob/master/docs/features.md#intellisense
-[code navigation]: https://github.com/golang/vscode-go/blob/master/docs/features.md#code-navigation
-[code editing]: https://github.com/golang/vscode-go/blob/master/docs/features.md#code-editing
-[diagnostics]: https://github.com/golang/vscode-go/blob/master/docs/features.md#diagnostics
-[testing]: https://github.com/golang/vscode-go/blob/master/docs/features.md##run-and-test-in-the-editor
-[debugging]: https://github.com/golang/vscode-go/blob/master/docs/debugging.md#features
-[full feature breakdown]: https://github.com/golang/vscode-go/blob/master/docs/features.md
+[IntelliSense]: https://github.com/golang/vscode-go/wiki/features#intellisense
+[code navigation]: https://github.com/golang/vscode-go/wiki/features#code-navigation
+[code editing]: https://github.com/golang/vscode-go/wiki/features#code-editing
+[diagnostics]: https://github.com/golang/vscode-go/wiki/features#diagnostics
+[testing]: https://github.com/golang/vscode-go/wiki/features#run-and-test-in-the-editor
+[debugging]: https://github.com/golang/vscode-go/wiki/debugging#features
+[full feature breakdown]: https://github.com/golang/vscode-go/wiki/features
 [workspace documentation]: https://github.com/golang/tools/blob/master/gopls/doc/workspace.md
-[`Go: Install/Update Tools` command]: https://github.com/golang/vscode-go/blob/master/docs/commands.md#go-installupdate-tools
+[`Go: Install/Update Tools` command]: https://github.com/golang/vscode-go/wiki/commands#go-installupdate-tools
 [documentation about supported workspace layouts]: https://github.com/golang/tools/blob/master/gopls/doc/workspace.md
 [Workspace Folders]: https://code.visualstudio.com/docs/editor/multi-root-workspaces
diff --git a/docs/_Footer.md b/docs/_Footer.md
deleted file mode 100644
index e8b412b..0000000
--- a/docs/_Footer.md
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-### Want to contribute to this Wiki?
-
-Update the source in the [vscode-go project's docs](https://github.com/golang/vscode-go/tree/master/docs) directory, and send a pull request.
diff --git a/docs/_Sidebar.md b/docs/_Sidebar.md
deleted file mode 100644
index d859891..0000000
--- a/docs/_Sidebar.md
+++ /dev/null
@@ -1,21 +0,0 @@
-**For Users**
-* [[features]]
-* [[commands]]
-* [[settings]]
-* [[debugging]]
-* [[tasks]]
-* [[tools]]
-* [[ui]]
-* [[faq]]
-* [[troubleshooting]]
-* [[advanced]]
-* [[nightly]]
-* [[contributing]]
-
-**For Developers**
-* [[release_plan]]
-* [[smoke test]]
-* [[test explorer]]
-* [[debug adapter]]
-* [Go Language Server](https://go.dev/s/gopls)
-* [Delve DAP](https://github.com/go-delve/delve/tree/master/Documentation/api/dap)
diff --git a/docs/debugging.md b/docs/debugging.md
index 2304d3f..bd53164 100644
--- a/docs/debugging.md
+++ b/docs/debugging.md
@@ -6,7 +6,7 @@
 The Go extension has been communicating with Delve through a custom debug adapter program (`legacy` mode).
 As the new [`Delve`'s native debug adapter implementation](https://github.com/go-delve/delve/tree/master/service/dap) has become available (since Delve v1.6.1), the Go extension is transitioning to deprecate the legacy debug adapter in favor of direct communication with Delve via [DAP](https://microsoft.github.io/debug-adapter-protocol/overview).
 
- 📣 **We are happy to announce that the new _`dlv-dap`_ mode of Delve integration is enabled for _local_ _debugging_ by default. For [_remote_ _debugging_](#remote-debugging) it is the default in [Go Nightly](docs/nightly.md) and is
+ 📣 **We are happy to announce that the new _`dlv-dap`_ mode of Delve integration is enabled for _local_ _debugging_ by default. For [_remote_ _debugging_](#remote-debugging) it is the default in [Go Nightly](nightly.md) and is
  available with stable builds on demand with `"debugAdapter": "dlv-dap"` attribute in `launch.json` or `settings.json`!**
 
 Many features and settings described in this document may be available only with the new `dlv-dap` mode.
@@ -39,7 +39,7 @@
 
 Once `dlv` is installed on your system, the extension will prompt you for update whenever installing a newer version is necessary (usually after the Go extension upgrade). You can set the `go.toolsManagement.autoUpdate` setting so the extension can update `dlv` automatically for you.
 
-If you need to install `dlv` manually outside of VS Code (for example, you are building a dev container with necessary tools preinstalled, or install `dlv` built from the tree head), follow the instruction in [Manually installing `dlv`](https://github.com/golang/vscode-go/blob/master/docs/debugging.md#manually-installing-dlv).
+If you need to install `dlv` manually outside of VS Code (for example, you are building a dev container with necessary tools preinstalled, or install `dlv` built from the tree head), follow the instruction in [Manually installing `dlv`](debugging.md#manually-installing-dlv).
 
 💡 The extension used to install a dev version of `dlv` as a separate binary (known as `dlv-dap`). As Delve DAP is stable and the transition work is near completion, from v0.31.0 (to be released in Jan 2022), the extension will switch to use `dlv`, instead of the `dlv-dap` binary. It is safe to delete `dlv-dap` installed on the system after v0.31.0 release.
  
@@ -341,7 +341,7 @@
 
 <p align="center"><img src="images/vscode-go-debug-arch.png" alt="vscode-go debug architecture"> </p>
 
-For information on debugging using the legacy debug adapter, please see the old [Debugging Documentation](https://github.com/golang/vscode-go/blob/master/docs/debugging.md). Note that many new or enhanced features discussed in this document may not be available with the legacy debug adapter.
+For information on debugging using the legacy debug adapter, please see the old [Debugging Documentation](debugging.md). Note that many new or enhanced features discussed in this document may not be available with the legacy debug adapter.
 
 ### Handling STDIN
 
@@ -489,7 +489,7 @@
 
 On rare occasions, you may want to install `dlv` by yourself instead of letting the extension handle its installation.
 
-First, find where the Go extension finds tools. Like [other tools the extension uses](https://github.com/golang/vscode-go/blob/master/docs/tools.md#tools), the Go extension searches the `dlv` executable from `${GOPATH}/bin`, `${GOBIN}` and `${PATH}`  (or `Path` in Windows). So, install `dlv` in the directory. The easiest way to check the tool installation location the Go extension uses is currently by running the `Go: Locate Configured Go Tools` command from the command palette (⇧+⌘+P or Ctrl+Shift+P).
+First, find where the Go extension finds tools. Like [other tools the extension uses](tools.md#tools), the Go extension searches the `dlv` executable from `${GOPATH}/bin`, `${GOBIN}` and `${PATH}`  (or `Path` in Windows). So, install `dlv` in the directory. The easiest way to check the tool installation location the Go extension uses is currently by running the `Go: Locate Configured Go Tools` command from the command palette (⇧+⌘+P or Ctrl+Shift+P).
 
 If your Go version is 1.16 or newer:
 
@@ -529,7 +529,7 @@
 
 The [headless dlv server](https://github.com/go-delve/delve/tree/master/Documentation/api) can now be used with both `"debugAdapter": "legacy"` (default value) and `"debugAdapter": "dlv-dap"` (with Delve v1.7.3 or newer) as well as Delve's [command-line interface](https://github.com/go-delve/delve/tree/master/Documentation/cli) via `dlv connect`. The `--accept-multiclient` flag makes this a multi-use server that persists on `Disconnect` from a client and allows repeated connections from any of the aforementioned clients. A combination of `--accept-multiclient --continue` flags can be used to resume process execution on start-up. Please see `dlv --help` and `dlv [command] --help` for dlv's command-line options.
 
-We encourage you to give the newly added `"debugAdapter": "dlv-dap"` support a try and to [let us know of any issues](https://github.com/golang/vscode-go/issues/new). If you need to use the `legacy` mode, pleasse also see the [legacy remote debugging](https://github.com/golang/vscode-go/blob/master/docs/debugging-legacy.md#remote-debugging) documentation.
+We encourage you to give the newly added `"debugAdapter": "dlv-dap"` support a try and to [let us know of any issues](https://github.com/golang/vscode-go/issues/new). If you need to use the `legacy` mode, pleasse also see the [legacy remote debugging](debugging-legacy.md#remote-debugging) documentation.
 
 For example, start external headless server:
 ```
@@ -611,9 +611,9 @@
 
 1. Read documentation and [FAQs](#faqs). Also check the [Delve FAQ](https://github.com/go-delve/delve/blob/master/Documentation/faq.md) in case the problem is mentioned there.
 1. Check your `launch.json` configuration. Often error messages appearing in the DEBUG CONSOLE panel reveal issues.
-1. Update Delve (`dlv`) to pick up most recent bug fixes. Follow [the instruction](https://github.com/golang/vscode-go/blob/master/docs/debugging.md#staying-up-to-date).
+1. Update Delve (`dlv`) to pick up most recent bug fixes. Follow [the instruction](debugging.md#staying-up-to-date).
 1. Check if you can reproduce the issue with `dlv`, the command line tool from the integrated terminal. <!-- TODO(vscode-go): add instructions https://github.com/golang/vscode-go/issues/1931 --> If it's reproducible when using `dlv`, take a look at the [Delve project issue tracker](https://github.com/go-delve/delve/issues).
-1. Capture [logs](https://github.com/golang/vscode-go/blob/master/docs/debugging.md#collecting-logs) and inspect them.
+1. Capture [logs](debugging.md#collecting-logs) and inspect them.
 1. Look at the [existing debugging issues](https://github.com/golang/vscode-go/labels/Debug) if similar issues were reported.
 1. If none of these solve your problem, please [open a new issue](#reporting-issues).
 
@@ -651,7 +651,7 @@
 
 ### Debug sessions started with the "debug test" CodeLens or the test UI does not use my `launch.json` configuration.
 
-The "debug test" CodeLens and the [test UI](https://github.com/golang/vscode-go/blob/master/docs/features.md#test-and-benchmark) do not use the `launch.json` configuration ([Issue 855](https://github.com/golang/vscode-go/issues/855)). As a workaround, use the `go.delveConfig` setting and the `go.testFlags` setting. Please note that these all apply to all debug sessions unless overwritten by a specific `launch.json` configuration.
+The "debug test" CodeLens and the [test UI](features.md#test-and-benchmark) do not use the `launch.json` configuration ([Issue 855](https://github.com/golang/vscode-go/issues/855)). As a workaround, use the `go.delveConfig` setting and the `go.testFlags` setting. Please note that these all apply to all debug sessions unless overwritten by a specific `launch.json` configuration.
 
 ### Starting a debug session fails with `decoding dwarf section info at offset 0x0: too short` or `could not open debug info` error.
 
@@ -692,7 +692,7 @@
 
 The core part of Delve DAP implementation is in the [`service/dap`](https://github.com/go-delve/delve/tree/master/service/dap) package. Follow Delve project's [contribution guideline](https://github.com/go-delve/delve/blob/master/CONTRIBUTING.md#contributing-code) to send PRs.
 
-Code for integration with the Go extension is mostly in [`src/goDebugFactory.ts`](https://github.com/golang/vscode-go/blob/master/src/goDebugFactory.ts) and tests are in [`test/integration/goDebug.test.ts`](https://github.com/golang/vscode-go/blob/master/test/integration/goDebug.test.ts). Please take a look at VS Code Go project's [contribution guideline](https://github.com/golang/vscode-go/blob/master/docs/contributing.md) to learn about how to prepare a change and send it for review.
+Code for integration with the Go extension is mostly in [`src/goDebugFactory.ts`](https://github.com/golang/vscode-go/blob/master/src/goDebugFactory.ts) and tests are in [`test/integration/goDebug.test.ts`](https://github.com/golang/vscode-go/blob/master/test/integration/goDebug.test.ts). Please take a look at VS Code Go project's [contribution guideline](contributing.md) to learn about how to prepare a change and send it for review.
 
 ### Testing
 
diff --git a/docs/dlv-dap.md b/docs/dlv-dap.md
deleted file mode 100644
index e2d2667..0000000
--- a/docs/dlv-dap.md
+++ /dev/null
@@ -1,4 +0,0 @@
-The new debug adapter integration using Delve's native DAP implementation
-is enabled by default for local debugging. See
-[Debugging Doc](https://github.com/golang/vscode-go/blob/master/docs/debugging.md)
-for more information.
diff --git a/docs/faq.md b/docs/faq.md
index fb90dfb..85bd464 100644
--- a/docs/faq.md
+++ b/docs/faq.md
@@ -1,3 +1,8 @@
+# Frequently Asked Questions
+
+**NOTE: [Debugging](debugging.md#faqs) has its own FAQ documentation.**
+
+## Syntax highlighting doesn't seem to work.
 
 The default syntax highlighting for Go files is provided by a
 [TextMate rule](https://github.com/jeff-hykin/better-go-syntax) embedded in VS Code,
@@ -5,12 +10,49 @@
 
 For better syntax highlighting (including generics support), we recommend enabling
 [semantic highlighting](https://code.visualstudio.com/api/language-extensions/semantic-highlight-guide)
-by turning on [Gopls' `ui.semanticTokens` setting](https://github.com/golang/vscode-go/blob/master/docs/settings.md#uisemantictokens).
+by turning on [Gopls' `ui.semanticTokens` setting](settings.md#uisemantictokens).
 
 ```json
 "gopls": { "ui.semanticTokens": true }
 ```
 
+## Code formatting by this extension doesn't seem to work.
+
+When you have multiple formatter extensions, be sure to set this
+extension as the default formatter for go language.
+```json5
+"[go]": {
+  "editor.defaultFormatter": "golang.go"
+}
+```
+
+## How can I stop the extension from formatting files on save?
+
+Formatting and organizing imports for Go are enabled by default. This is implemented
+by setting the [language-specific editor settings](https://code.visualstudio.com/docs/getstarted/settings#_languagespecific-editor-settings), that take precedence
+over user/workspace editor settings.
+
+You can choose to disable them by configuring the following settings.
+
+```json5
+"[go]": {
+        "editor.formatOnSave": false,
+        "editor.codeActionsOnSave": {
+            "source.organizeImports": false
+        }
+}
+```
+
+This decision was made a while ago to help users follow the best practice,
+and to detect broken code early (e.g. unused imports causes compile errors in Go).
+Unfortunately, these language-specific editor settings overriden by the
+extension is not easily visible from the settings UI, and confuses users new to Go.
+In the following issues, we are discussing and collecting ideas to improve
+the situation without interrupting existing users.
+
+  * [`editor.formatOnSave` and `editor.codeActionsOnSave`](https://github.com/golang/vscode-go/issues/1815)
+  * [`editor.suggest.snippetsPreventQuickSuggestions`](https://github.com/golang/vscode-go/issues/1805)
+
 <!-- Topics
   * The extension deletes my code on save?
   * Help! The extension does not find 'go'.
diff --git a/docs/features.md b/docs/features.md
index e658933..32601d8 100644
--- a/docs/features.md
+++ b/docs/features.md
@@ -129,9 +129,9 @@
 
 Format code and organize imports, either manually or on save.
 
-The extension formats Go code, organizes imports, and removes unused imports by default. For different behavior, please override per-language default settings following [the instruction](https://github.com/golang/vscode-go/blob/master/docs/advanced.md#formatting-code-and-organizing-imports).
+The extension formats Go code, organizes imports, and removes unused imports by default. For different behavior, please override per-language default settings following [the instruction](advanced.md#formatting-code-and-organizing-imports).
 
-When organizing imports, the imported packages are grouped in the default `goimports` style. In order to group some packages after 3rd-party packages, use [`"gopls": { "formatting.local": <comma-separated imports prefix>}`](https://github.com/golang/vscode-go/blob/master/docs/settings.md#formattinglocal).
+When organizing imports, the imported packages are grouped in the default `goimports` style. In order to group some packages after 3rd-party packages, use [`"gopls": { "formatting.local": <comma-separated imports prefix>}`](settings.md#formattinglocal).
 
 #### Add import
 
diff --git a/docs/release_plan.md b/docs/release_plan.md
deleted file mode 100644
index 013712b..0000000
--- a/docs/release_plan.md
+++ /dev/null
@@ -1,41 +0,0 @@
-Use the following template to create an issue for release.
-
-```
-# Release candidate (DATE)
--   [ ] Announce the release, leave enough time for teams to surface any last minute issues that need to get in before freeze. Make sure debugger and gopls teams are looped in as well.
--   [ ] Create a milestone with the issues that are fixed by this release
--	[ ] Update `master` for the release
-	-	[ ] Update hardcoded latest version for `dlv-dap` and `gopls`
-	-   [ ] Update [`CHANGELOG.md`](https://github.com/golang/vscode-go/blob/master/CHANGELOG.md)
-        -   [ ] Make sure the "Thanks" section is up-to-date
-        -   [ ] Check the Markdown rendering to make sure everything looks good
--   [ ] Update `release` for the release
-    -   [ ] Create a branch against `release` for a pull request
-    -   [ ] Merge changes from `master` to prepare for the release
-    -   [ ] Change the version in [`package.json`](https://github.com/golang/vscode-go/blob/master/package.json) from a `-dev` suffix
-    -   [ ] Run `npm install` to make sure [`package-lock.json`](https://github.com/golang/vscode-go/blob/master/package.json) is up-to-date
-    -   [ ] Update the license file (`$ tools/license.sh; mv LICENSE.prod LICENSE`)
--   [ ] Check the [Long Tests status](https://github.com/golang/vscode-go/actions?query=workflow%3A%22Long+Tests%22)  is green. Otherwise, fix the tests, send cls for review, submit them, and repeat. 
--   [ ] Perform manual [smoke tests]( https://github.com/golang/vscode-go/blob/master/docs/smoke-test.md)
--   [ ] Create new version tag for X.XX.X-rc.1 at gerrit’s vscode-go [repo management page](https://go-review.googlesource.com/admin/repos/vscode-go,tags)
--   [ ] Go to the release page https://github.com/golang/vscode-go/releases and check if the new release candidate is up. If necessary, you can manually edit the comment by clicking the “Edit” button. Don’t mutate uploaded vsix.
--   [ ] Ask editor team and contributors to this release to test the release candidate
-
-# Release Candidate >1 (if necessary)
-- 	[ ] Fix any bugs on `master` and cherry pick changes to `release
--   [ ] Create new version tag for X.XX.X-rc.1 at gerrit’s vscode-go [repo management page](https://go-review.googlesource.com/admin/repos/vscode-go,tags)
--   [ ] Go to the release page https://github.com/golang/vscode-go/releases and check if the new release candidate is up. If necessary, you can manually edit the comment by clicking the “Edit” button. Don’t mutate uploaded vsix.
--   [ ] Ask editor team and contributors to this release to test the release candidate
-
-
-# Final (DATE)
--	[ ] Tag the new release
--	[ ] Update the release description with CHANGELOG contents
--	[ ] Close the milestone
-
-# Prepare for the Next Release
--   [ ] Update `master` post-release
-    -   [ ] Bump the version number to the next monthly ("X.XX.X-dev") release in the `master` branch
-        -   [ ] `package.json`
-        -   [ ] `package-lock.json`
-```
\ No newline at end of file
diff --git a/docs/settings.md b/docs/settings.md
index 1370d64..cdb61ac 100644
--- a/docs/settings.md
+++ b/docs/settings.md
@@ -4,7 +4,7 @@
 
 To navigate to your settings, open the Command Palette (Ctrl+Shift+P or Cmd+Shift+P) and search for "settings". The simplest way to modify your settings is through "Preferences: Open Settings (UI)".
 
-For tuning the features provided by `gopls`, see the [section](https://github.com/golang/vscode-go/blob/master/docs/settings.md#settings-for-gopls) for `gopls` settings.
+For tuning the features provided by `gopls`, see the [section](settings.md#settings-for-gopls) for `gopls` settings.
 
 ## Latest changes
 
diff --git a/docs/tools.md b/docs/tools.md
index bbb3c35..a866e97 100644
--- a/docs/tools.md
+++ b/docs/tools.md
@@ -18,7 +18,7 @@
 ### [`gopls`]
 [`gopls`] is the official Go [language server](https://langserver.org/) developed by the Go team. It is the default backend for most of this extension's IntelliSense, code navigation, code editing, and diagnostics features. When the extension starts, it spawns a `gopls` instance in server mode for each VS Code project.
 
-`gopls` uses the `go` command to analyze your code. The extension automatically propagates necessary settings such as  `"go.buildFlags"`, `"go.buildTags"`, `"go.toolsEnvVars"` and the path to the right `go` command to `gopls`. No extra settings should be necessary, but when you need to adjust `gopls`'s behavior further (e.g., enable more advanced analysis features), please see [all the settings for `gopls`](https://github.com/golang/vscode-go/blob/master/docs/settings.md#settings-for-gopls).
+`gopls` uses the `go` command to analyze your code. The extension automatically propagates necessary settings such as  `"go.buildFlags"`, `"go.buildTags"`, `"go.toolsEnvVars"` and the path to the right `go` command to `gopls`. No extra settings should be necessary, but when you need to adjust `gopls`'s behavior further (e.g., enable more advanced analysis features), please see [all the settings for `gopls`](settings.md#settings-for-gopls).
 
 If you encounter issues with `gopls`, please read the [troubleshooting guide](troubleshooting.md#collect-gopls-information). If you want to run the extension without the language server, you can disable it by setting `"go.useLanguageServer": false`.
 
diff --git a/src/goEnvironmentStatus.ts b/src/goEnvironmentStatus.ts
index c770bb1..7902b84 100644
--- a/src/goEnvironmentStatus.ts
+++ b/src/goEnvironmentStatus.ts
@@ -374,17 +374,13 @@
 
 	// append the goroot to the beginning of the PATH so it takes precedence
 	// TODO: add support for more terminal names
-	// this assumes all non-windows shells are bash-like.
-	if (terminal.name.toLowerCase() === 'cmd') {
-		terminal.sendText(`set PATH=${gorootBin};%Path%`, true);
-		terminal.sendText('cls');
-	} else if (['powershell', 'pwsh'].includes(terminal.name.toLowerCase())) {
+	if (vscode.env.shell.search(/(powershell|pwsh)$/i) !== -1) {
 		terminal.sendText(`$env:Path="${gorootBin};$env:Path"`, true);
 		terminal.sendText('clear');
-	} else if (terminal.name.toLowerCase() === 'fish') {
+	} else if (vscode.env.shell.search(/fish$/i) !== -1) {
 		terminal.sendText(`set -gx PATH ${gorootBin} $PATH`);
 		terminal.sendText('clear');
-	} else if (['bash', 'sh', 'zsh', 'ksh'].includes(terminal.name.toLowerCase())) {
+	} else if (vscode.env.shell.search(/\/(bash|sh|zsh|ksh)$/i) !== -1) {
 		terminal.sendText(`export PATH=${gorootBin}:$PATH`, true);
 		terminal.sendText('clear');
 	}
diff --git a/docs/test-explorer.md b/src/goTest/test-explorer.md
similarity index 100%
rename from docs/test-explorer.md
rename to src/goTest/test-explorer.md
diff --git a/tools/docs2wiki/main.go b/tools/docs2wiki/main.go
index baa41e4..f49ffb4 100644
--- a/tools/docs2wiki/main.go
+++ b/tools/docs2wiki/main.go
@@ -1,3 +1,7 @@
+// Copyright 2022 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
 //go:build !windows
 // +build !windows
 
@@ -17,6 +21,7 @@
 	"path/filepath"
 	"regexp"
 	"strings"
+	"text/template"
 )
 
 var writeFlag = flag.Bool("w", false, "Overwrite new file contents to disk.")
@@ -28,13 +33,15 @@
 		errorf("Usage: %v <dir>", os.Args[0])
 		os.Exit(1)
 	}
-	if err := rewriteLinks(flag.Arg(0), *writeFlag); err != nil {
+
+	genFooter := footerGenerator("https://github.com/golang/vscode-go/edit/master/docs/")
+	if err := rewriteLinks(flag.Arg(0), genFooter, *writeFlag); err != nil {
 		errorf("failed to rewrite links: %v", err)
 		os.Exit(1)
 	}
 }
 
-func rewriteLinks(dir string, overwrite bool) error {
+func rewriteLinks(dir string, genFooter func(srcPath string) []byte, overwrite bool) error {
 	return filepath.WalkDir(dir, func(path string, d fs.DirEntry, err error) error {
 		if err != nil {
 			return err
@@ -55,6 +62,10 @@
 		}
 		converted := stripTitleInPage(data)
 		converted = markdownLink2WikiLink(converted)
+		if name != "_Footer.md" && name != "_Sidebar.md" {
+			relPath, _ := filepath.Rel(dir, path)
+			converted = append(converted, genFooter(filepath.ToSlash(relPath))...)
+		}
 		if overwrite {
 			return ioutil.WriteFile(path, converted, 0644)
 		}
@@ -128,3 +139,19 @@
 func errorf(format string, a ...interface{}) {
 	fmt.Fprintf(os.Stderr, format+"\n", a...)
 }
+
+func footerGenerator(sourceEditURL string) func(string) []byte {
+	return func(srcPath string) []byte {
+		editURL := sourceEditURL + srcPath
+		buf := new(bytes.Buffer)
+		footerTmpl.Execute(buf, editURL)
+		return buf.Bytes()
+	}
+}
+
+var footerTmpl = template.Must(template.New("footer").Parse(`
+
+---
+[*✏️ Want to contribute to this wiki?*]({{.}})
+
+Update [the source]({{.}}) and send a PR.`))
diff --git a/tools/docs2wiki/main_test.go b/tools/docs2wiki/main_test.go
index 19b5471..eabb016 100644
--- a/tools/docs2wiki/main_test.go
+++ b/tools/docs2wiki/main_test.go
@@ -8,6 +8,7 @@
 	"io/ioutil"
 	"os"
 	"path/filepath"
+	"strings"
 	"testing"
 
 	"github.com/google/go-cmp/cmp"
@@ -29,7 +30,8 @@
 			// which we will read back for comparison against tt.want.
 			// With overwrite=false, rewriteLinks just prints out the diff
 			// which will be difficult to test.
-			err := rewriteLinks(dir, true)
+			genFooter := func(string) []byte { return nil }
+			err := rewriteLinks(dir, genFooter, true)
 			if err != nil {
 				t.Fatal(err)
 			}
@@ -82,3 +84,30 @@
 
 [This doesn't change](https://go.dev/foo.md)
 [Untouchable.md](foo)`
+
+func TestGenFooter(t *testing.T) {
+	const editURLPrefix = "https://source.com/edit/docs/"
+
+	for _, tt := range []struct{ filename, wantURL string }{
+		{filename: "doc.md", wantURL: editURLPrefix + "doc.md"},
+		{filename: "sub/doc.md", wantURL: editURLPrefix + "sub/doc.md"},
+	} {
+		dir := prepareTestData(t, tt.filename, "")
+		defer os.RemoveAll(dir)
+
+		genFooter := footerGenerator(editURLPrefix)
+		err := rewriteLinks(dir, genFooter, true)
+		if err != nil {
+			t.Fatal(err)
+		}
+		// rewriteLinks overwrites the original file,
+		// so reread the content for comparison.
+		got, err := ioutil.ReadFile(filepath.Join(dir, tt.filename))
+		if err != nil {
+			t.Fatal(err)
+		}
+		if !strings.Contains(string(got), tt.wantURL) {
+			t.Errorf("missing %s, got:\n%s", tt.wantURL, got)
+		}
+	}
+}
diff --git a/tools/installtools/main.go b/tools/installtools/main.go
index f33f19e..eaf20a0 100644
--- a/tools/installtools/main.go
+++ b/tools/installtools/main.go
@@ -1,3 +1,7 @@
+// Copyright 2021 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
 // Binary installtools is a helper that installs Go tools extension tests depend on.
 package main
 
diff --git a/tools/installtools/main_test.go b/tools/installtools/main_test.go
index 99e0961..6175c23 100644
--- a/tools/installtools/main_test.go
+++ b/tools/installtools/main_test.go
@@ -1,3 +1,7 @@
+// Copyright 2021 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
 // Binary installtools is a helper that installs Go tools extension tests depend on.
 package main
 
diff --git a/tools/relnotes/relnotes.go b/tools/relnotes/relnotes.go
index 98c4450..732de08 100644
--- a/tools/relnotes/relnotes.go
+++ b/tools/relnotes/relnotes.go
@@ -9,10 +9,13 @@
 import (
 	"bytes"
 	"context"
+	"encoding/json"
 	"flag"
 	"fmt"
 	"io/ioutil"
 	"log"
+	"net/http"
+
 	"path/filepath"
 	"regexp"
 	"sort"
@@ -27,17 +30,26 @@
 )
 
 var (
-	milestone  = flag.String("milestone", "", "milestone associated with the release")
-	filterDirs = flag.String("dirs", "", "comma-separated list of directories that should be touched for a CL to be considered relevant")
-	sinceCL    = flag.Int("cl", -1, "the gerrit change number of the first CL to include in the output. Only changes submitted more recently than 'cl' will be included.")
-	project    = flag.String("project", "vscode-go", "name of the golang project")
-	mdMode     = flag.Bool("md", false, "write MD output")
-	exclFile   = flag.String("exclude-from", "", "optional path to changelog MD file. If specified, any 'CL NNNN' occurence in the content will cause that CL to be excluded from this tool's output.")
+	milestone           = flag.String("milestone", "", "milestone associated with the release")
+	filterDirs          = flag.String("dirs", "", "comma-separated list of directories that should be touched for a CL to be considered relevant")
+	sinceCL             = flag.Int("cl", -1, "the gerrit change number of the first CL to include in the output. Only changes submitted more recently than 'cl' will be included.")
+	project             = flag.String("project", "vscode-go", "name of the golang project")
+	exclFile            = flag.String("exclude-from", "", "optional path to changelog MD file. If specified, any 'CL NNNN' occurence in the content will cause that CL to be excluded from this tool's output.")
+	semanticVersion     = flag.String("semver", "", "the semantic version of the new release")
+	githubTokenFilePath = flag.String("token", "", "the absolute path to the github token file")
 )
 
 func main() {
 	flag.Parse()
 
+	if *semanticVersion == "" {
+		log.Fatal("Must provide -semver.")
+	}
+
+	if *githubTokenFilePath == "" {
+		log.Fatal("Must provide -token.")
+	}
+
 	var existingMD []byte
 	if *exclFile != "" {
 		var err error
@@ -86,7 +98,7 @@
 	})
 
 	var changes []*generic.Changelist
-	authors := map[*maintner.GitPerson]bool{}
+	cls := map[*maintner.GerritCL]bool{}
 	ger.ForeachProjectUnsorted(func(gp *maintner.GerritProject) error {
 		if gp.Server() != "go.googlesource.com" || gp.Project() != *project {
 			return nil
@@ -124,34 +136,50 @@
 					return nil
 				}
 			}
-			changes = append(changes, golang.GerritToGenericCL(cl))
-			authors[cl.Owner()] = true
+			if isGoplsChangeList(golang.GerritToGenericCL(cl)) {
+				changes = append(changes, golang.GerritToGenericCL(cl))
+				cls[cl] = true
+			}
 			return nil
 		})
 		return nil
 	})
 
-	sort.Slice(changes, func(i, j int) bool {
-		return changes[i].Number < changes[j].Number
-	})
+	fmt.Printf("# Version: %s\n\n", *semanticVersion)
+	fmt.Printf("## TODO: version - ")
+	now := time.Now()
+	fmt.Printf("%s\n\n", now.Format("2 Jan, 2006"))
+	fmt.Printf("### Changes\n\n")
+	mdPrintChanges(changes, false)
+	fmt.Printf("\n\n")
 
-	if *mdMode {
-		fmt.Printf("## TODO: version - ")
-		now := time.Now()
-		fmt.Printf("%s\n\n", now.Format("2 Jan, 2006"))
-		fmt.Printf("### Changes\n\n")
-		mdPrintChanges(changes, true)
+	fmt.Printf("### Issues\n\n")
+	mdPrintIssues(changes, *milestone)
+	fmt.Printf("\n\n")
 
-		fmt.Printf("### Issues\n\n")
-		mdPrintIssues(changes, *milestone)
+	fmt.Printf("### Release comments\n\n")
+	mdPrintReleaseComments(changes)
+	fmt.Printf("\n\n")
 
-		fmt.Printf("\n### Thanks\n\n")
-		mdPrintContributors(authors)
-	} else {
-		for _, change := range changes {
-			fmt.Printf("  %s\n", change.Subject)
+	fmt.Printf("\n### Thanks\n\n")
+	mdPrintContributors(cls)
+}
+
+func isGoplsChangeList(cl *generic.Changelist) bool {
+	if strings.Contains(cl.Subject, "internal/lsp") || strings.Contains(cl.Subject, "gopls") {
+		return true
+	}
+	for _, issue := range cl.AssociatedIssues {
+		if issue.Repo == "golang/vscode-go" {
+			return true
+		}
+		for _, label := range issue.Labels {
+			if label == "gopls" {
+				return true
+			}
 		}
 	}
+	return false
 }
 
 func mdPrintChanges(changes []*generic.Changelist, byCategory bool) {
@@ -178,7 +206,7 @@
 		}
 		fmt.Printf(" <!-- CL %d -->\n", change.Number)
 	}
-	// Group CLs by category or by number order.
+	// Group CLs by category or by first associated issue number.
 	if byCategory {
 		pkgMap := map[string][]*generic.Changelist{}
 		for _, change := range changes {
@@ -190,7 +218,29 @@
 			}
 		}
 	} else {
-		for _, change := range changes {
+		sort.Slice(changes, func(i, j int) bool {
+			// Sort first by associated issue, then by CL number.
+			var iIssue, jIssue int // first associated issues
+			if len(changes[i].AssociatedIssues) > 0 {
+				iIssue = changes[i].AssociatedIssues[0].Number
+			}
+			if len(changes[j].AssociatedIssues) > 0 {
+				jIssue = changes[j].AssociatedIssues[0].Number
+			}
+			if iIssue != 0 && jIssue != 0 {
+				return iIssue < jIssue // sort CLs with issues first
+			}
+			return iIssue != 0 || changes[i].Number < changes[j].Number
+		})
+
+		currentChange := -1
+		for i, change := range changes {
+			if len(change.AssociatedIssues) > 0 && change.AssociatedIssues[0].Number != currentChange {
+				currentChange = change.AssociatedIssues[0].Number
+				fmt.Printf("CL(s) for issue %d:\n", currentChange)
+			} else if len(change.AssociatedIssues) == 0 && (i == 0 || len(changes[i-1].AssociatedIssues) > 0) {
+				fmt.Printf("CL(s) not associated with any issue:\n")
+			}
 			printChange(change)
 		}
 	}
@@ -212,14 +262,20 @@
 	}
 }
 
-// clPackage returns the package name from the CL's commit message,
-// or "??" if it's formatted unconventionally.
-func clPackage(cl *maintner.GerritCL) string {
-	subj := cl.Subject()
-	if i := strings.Index(subj, ":"); i != -1 {
-		return subj[:i]
+func mdPrintReleaseComments(changes []*generic.Changelist) {
+	type Issue struct {
+		repo   string
+		number int
 	}
-	return "??"
+	printedIssues := make(map[Issue]bool)
+	for _, change := range changes {
+		for _, issue := range change.AssociatedIssues {
+			if _, ok := printedIssues[Issue{issue.Repo, issue.Number}]; !ok {
+				printedIssues[Issue{issue.Repo, issue.Number}] = true
+				printIssueReleaseComment(issue.Repo, issue.Number)
+			}
+		}
+	}
 }
 
 var relNoteRx = regexp.MustCompile(`RELNOTES?=(.+)`)
@@ -243,17 +299,90 @@
 	return ""
 }
 
-func mdPrintContributors(authors map[*maintner.GitPerson]bool) {
-	var names []string
-	for author := range authors {
-		// It would be great to look up the GitHub username by using:
-		// https://pkg.go.dev/golang.org/x/build/internal/gophers#GetPerson.
-		names = append(names, author.Name())
+func mdPrintContributors(cls map[*maintner.GerritCL]bool) {
+	var usernames []string
+	for changelist := range cls {
+		author, err := fetchCLAuthorName(changelist, *project)
+		if err != nil {
+			log.Fatalf("Error fetching Github information for %s: %v\n", changelist.Owner(), err)
+		}
+		usernames = append(usernames, author)
 	}
-	sort.Strings(names)
-	if len(names) > 1 {
-		names[len(names)-1] = "and " + names[len(names)-1]
+	usernames = unique(usernames)
+	if len(usernames) > 1 {
+		usernames[len(usernames)-1] = "and " + usernames[len(usernames)-1]
 	}
 
-	fmt.Printf("Thank you for your contribution, %s!\n", strings.Join(names, ", "))
+	fmt.Printf("Thank you for your contribution, %s!\n", strings.Join(usernames, ", "))
+}
+
+func getURL(url string) ([]byte, error) {
+	req, _ := http.NewRequest("GET", url, nil)
+	if token, err := ioutil.ReadFile(*githubTokenFilePath); err == nil {
+		req.Header.Set("Authorization", "token "+strings.TrimSpace(string(token)))
+	}
+	res, err := http.DefaultClient.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	body, err := ioutil.ReadAll(res.Body)
+	if err != nil {
+		log.Fatalf("Error fetching Github information at %s: %v\n", url, err)
+	}
+	return body, nil
+}
+
+func fetchCLAuthorName(changelist *maintner.GerritCL, repo string) (string, error) {
+	githubRepoMapping := map[string]string{
+		"tools":     "golang/tools",
+		"vscode-go": "golang/vscode-go",
+	}
+	body, err := getURL(fmt.Sprintf("https://api.github.com/repos/%s/commits/%s", githubRepoMapping[repo], changelist.Commit.Hash))
+	if err != nil {
+		return "", err
+	}
+	var resp map[string]interface{}
+	if err := json.Unmarshal(body, &resp); err != nil {
+		return "", err
+	}
+	if authorInfo, _ := resp["author"].(map[string]interface{}); authorInfo != nil {
+		if username, ok := authorInfo["login"].(string); ok {
+			return "@" + username, nil
+		}
+	}
+	return changelist.Owner().Name(), nil
+}
+
+// printIssueReleaseComment collects the release comments, which marked by the annotation *Release*, from the issues included in this release.
+func printIssueReleaseComment(repo string, issueNumber int) {
+	body, err := getURL(fmt.Sprintf("https://api.github.com/repos/%s/issues/%d/comments", repo, issueNumber))
+	if err != nil {
+		log.Fatal(err)
+	}
+	var issueComments []interface{}
+	if err := json.Unmarshal(body, &issueComments); err != nil {
+		log.Fatalf("Error fetching Github information for issue %d:\n", issueNumber)
+	}
+	for _, comment := range issueComments {
+		c, _ := comment.(map[string]interface{})
+		if str, ok := c["body"].(string); ok && strings.Contains(str, "*Release*") {
+			fmt.Println(str)
+			return
+		}
+	}
+}
+
+// unique returns a ascendingly sorted set of unique strings among its input
+func unique(input []string) []string {
+	m := make(map[string]bool)
+	for _, entry := range input {
+		m[entry] = true
+	}
+	var list []string
+	for key := range m {
+		list = append(list, key)
+	}
+	sort.Strings(list)
+	return list
 }
