| # pkgsite-cli |
| |
| A command-line interface for querying [pkg.go.dev](https://pkg.go.dev/). |
| |
| Currently, the API is on `v1beta`, but we expect to move to `v1` soon. |
| |
| Related to issue [76718](https://go.dev/issue/76718). |
| |
| ## Quick start |
| |
| To install the `pkgsite-cli` tool, run: |
| |
| ```bash |
| go install golang.org/x/pkgsite/cmd/internal/pkgsite-cli@latest |
| ``` |
| |
| ## Motivation |
| |
| The [pkg.go.dev](https://pkg.go.dev/) service provides an API interface at |
| https://pkg.go.dev/api to allow querying information about published Go |
| packages and modules. The API uses a stateless, GET-only architecture designed |
| for stability and efficient caching. `pkgsite-cli` is a lightweight CLI that |
| uses this API. There is no official SDK for the API, but this tool serves as a |
| reference client implementation that developers can use in other projects. See |
| the [API spec](https://pkg.go.dev/api) and the |
| [OpenAPI specification](https://pkg.go.dev/v1beta/openapi.yaml). |
| |
| ## Relationship to existing tools |
| |
| - **`go doc`** renders documentation for packages available locally. |
| `pkgsite-cli` does not replace it for reading local documentation. |
| - **`cmd/pkgsite`** is a web server that serves documentation for packages |
| available locally. It does not provide full version listings, vulnerability |
| reports, reverse dependencies, licenses, or search capabilities (yet). |
| - **`pkgsite-cli`** provides access to information that `go doc` or a local |
| instance of `cmd/pkgsite` cannot reach: version listings, vulnerability |
| reports, reverse dependencies, licenses, documentation of modules/packages, |
| and search results for packages not yet downloaded. |
| |
| Rule of thumb: Use `go doc` for local code; use `pkgsite-cli` for package |
| discovery and metadata lookup. |
| |
| ## Commands |
| |
| Run `pkgsite-cli <command> -h` for details on available flags for each command. |
| |
| Available commands: |
| * `package` |
| * `module` |
| * `search` |
| |
| Additional commands will be added in the future. |
| |
| ## Usage Examples |
| |
| ### Search for packages: |
| |
| ```bash |
| pkgsite-cli search uuid |
| ``` |
| |
| ### Inspect a specific package: |
| |
| ```bash |
| pkgsite-cli package github.com/google/go-cmp/cmp |
| ``` |
| |
| ### See reverse dependencies for a package: |
| |
| ```bash |
| pkgsite-cli package -imported-by github.com/google/go-cmp/cmp |
| ``` |
| |
| ### List exported symbols declared by a package: |
| |
| ```bash |
| pkgsite-cli package -symbols github.com/google/go-cmp/cmp |
| ``` |
| |
| ### List versions of a module: |
| |
| ```bash |
| pkgsite-cli module -versions github.com/google/go-cmp |
| ``` |
| |
| ### List both versions and packages belonging to a module: |
| |
| ```bash |
| pkgsite-cli module -packages -versions github.com/google/go-cmp |
| ``` |
| |
| ## Details |
| - **Ambiguous paths**: Unlike `go mod tidy` or the |
| [pkg.go.dev](https://pkg.go.dev) web interface, which use the "longest |
| module path" rule to resolve ambiguous package paths, the API requires the |
| module to be specified unambiguously. If a package path is ambiguous |
| because it exists in multiple modules, the API returns a list of candidates |
| and reports an error. Use the `-module` flag to specify the correct |
| module path. |
| |
| |
| ## Status and Implementation |
| - **Experimental**: This tool is currently a prototype. |
| - **Minimal Dependencies**: To facilitate potential migration to other |
| repositories (e.g., `x/tools`), the tool depends only on the Go standard |
| library. |
| - **Duplicate Types**: API request and response types are duplicated in the |
| tool's source instead of imported from `pkgsite` for now. We ruled out |
| releasing a full SDK because the REST API is simple enough to consume |
| directly. This keeps the tool self-contained. However, if this tool remains |
| in this repository, we can eliminate this duplication by using the internal |
| package. |
| |