---
title: pin
---

import VersionLabel from '@site/src/components/Docs/VersionLabel';

<VersionLabel version="0.19.0" header />

The `proto pin <tool> <version>` command will pin a version (or alias) of a tool. This version will
be used when attempting to [detect a version](../detection).

```shell
$ proto pin go 1.20
$ proto pin python 3.14 --to=global
$ proto pin node lts --resolve
$ proto pin npm latest --resolve --tool-native
```

By default this will update the local [`./.prototools`](../config) file. Pass `--to` to customize
the location, or use the `--tool-native` option to use a location unique to the tool.

When a [lockfile](../lockfile) is in use, matching records will be migrated to the
newly pinned specification. <VersionLabel version="0.60.0" />

### Arguments

- `<tool>` - Type of tool.
- `<version>` - Version of tool.

### Options

- `--resolve` - Resolve the version to a fully-qualified semantic version before pinning.
- `--to` <VersionLabel version="0.41.0" /> - [Location of `.prototools`](../config#locations) to
  update. Supports `global`, `local`, and `user`.
- `--tool-native` <VersionLabel version="0.55.0" /> - Pins the version in a tool specific location.
  Examples:
  - JavaScript tooling (Node, Bun, Deno, npm, pnpm, Yarn, etc) - Pins version in the `devEngines`
    field in the `package.json` file.
