cmd/pkgsite: add multi-module support, invalidation, and search

This change adds a new goPackagesModuleGetter, which uses
x/tools/go/packages to query package information for modules requested
by the pkgsite command.

Additionally, add new extension interfaces that allow getters to add
support for search and content invalidation. The go/packages getter uses
these extensions to implement search (via a simple fuzzy-matching
algorithm copied from x/tools), and invalidation via statting package

Along the way, refactor slightly for testing ergonomics.

Updates golang/go#40371
Updates golang/go#50229
Fixes golang/go#54479

Change-Id: Iea91a4d6327707733cbbc4f74a9d93052f33e295
TryBot-Result: kokoro <>
Run-TryBot: Robert Findley <>
Reviewed-by: Jamal Carvalho <>
12 files changed
tree: cf08f31d5388c8688fae47dcd6c27b8c51674f6a
  1. cmd/
  2. deploy/
  3. devtools/
  4. doc/
  5. internal/
  6. migrations/
  7. static/
  8. tests/
  9. third_party/
  10. .dockerignore
  11. .eslintignore
  12. .eslintrc.yaml
  13. .gitignore
  14. .prettierignore
  15. .prettierrc.yaml
  16. .stylelintignore
  17. .stylelintrc.yaml
  18. all.bash
  20. go.mod
  21. go.sum
  22. jest.config.js
  24. package-lock.json
  25. package.json
  28. tsconfig.json

Go Reference

A site for discovering Go packages is a website for discovering and evaluating Go packages and modules.

You can check it out at


Pkgsite requires Go 1.19 to run. The last commit that works with Go 1.18 is 9ffe8b928e4fbd3ff7dcf984254629a47f8b6e63. The last commit that works with Go 1.17 is 4d836c6a652cde92f433967680dfd6171a91ec12.


If you want to report a bug or have a feature suggestion, please first check the known issues to see if your issue is already being discussed. If an issue does not already exist, feel free to file an issue.

For answers to frequently asked questions, see

You can also chat with us on the #pkgsite Slack channel on the Gophers Slack.


We would love your help!

Our canonical Git repository is located at There is a mirror of the repository at

To contribute, please read our contributing guide.


Unless otherwise noted, the Go source files are distributed under the BSD-style license found in the LICENSE file.