Lock the whole toolchain
Node.js, Python, Rust, and more share one project configuration. Keep version intent separate from exact artifacts, then install from the lockfile.
pinset install↗Pinset manages project toolchains, locks exact versions, and records actual execution evidence. Lock the toolchain, inspect execution evidence, and run project commands with the selected versions.
Release details have not loaded. The installer fetches the latest stable release by default; you can also view releases on GitHub.
curl -fsSL https://raw.githubusercontent.com/Future-Element/pinset/main/install.sh | shprotocol = "pinset/3"schema = 3project_id = "example-project" [tools]node = "24"pnpm = "11"python = "3.14"Configuration excerpt · Exact artifacts live in .pinset/lock.toml.
pinset initpinset use node@24 pnpm@11 python@3.14 --no-installpinset install node --versionpython --versionpinset which --explainRun these commands in a project after setting up your shell.
- uses: actions/checkout@v4- uses: Future-Element/pinset@main with: version: latest- run: node --versionGitHub Actions snippet using the lockfile committed to your project.
THE TOOLS YOU KNOW. ONE PROJECT ENVIRONMENT.
From a local checkout to an automated build, make the environment reproducible, explainable, and verifiable.
Node.js, Python, Rust, and more share one project configuration. Keep version intent separate from exact artifacts, then install from the lockfile.
pinset install↗Each project has independent selections and exact installations. Inspect the source, routing, and diagnostics behind every selection.
pinset which --explain↗Upgrade or switch versions with use, then build and test with your project commands. exec and shims use the same locked environment.
pinset exec -- ./mvnw verify↗Install Pinset and set up your shell, then choose the tools for your project.
Shell setup guide →Run inside your project to create its configuration and exact lockfile.
pinset init
pinset use node@24 pnpm@11 python@3.14 --no-install
pinset installWith your shell configured, commands route to the project's locked tools.
node --version
python --version
pinset which node --explainCommit .pinset/config.toml and .pinset/lock.toml, then install the locked toolchain on the next machine.
pinset installImport version declarations, manage more CLI tools, and bring the same toolchain to CI.
Scan .tool-versions, package.json, and other version files. Review the plan before importing, while keeping your existing Pinset selections.
pinset import↗Describe an HTTPS download for tools such as Terraform. Lock the version and SHA-256, then use the same installation and command routing.
Custom CLI guide↗setup-pinset installs Pinset, caches tools, restores the lockfile, and checks the result. Save check's JSON report for scripts and build artifacts.
GitHub Action and JSON reports↗Manage eight toolchains, including the complete OpenJDK. Each tool keeps its commands. Pinset puts them in the right place.
node · npm · npxpnpmbun · bunxgo · gofmtpython · pipTemurin JDKcargo · rustcflutter · dartAvailable on Windows, macOS, and Linux. Architecture support depends on each tool's upstream releases. View the support matrix ↗ · Manage other CLI tools →
Integrity checks, explicit project policy, and diagnostics make “why this version?” a question you can answer.
Pinset manages project toolchains, locks exact versions, and records actual execution evidence. It uses .pinset/config.toml to declare project tools and policy, and .pinset/lock.toml to record exact versions, platform artifacts, and integrity metadata.
Yes. Pinset does not edit shell profiles automatically. Follow the self shell command reference for Bash, Zsh, Fish, or PowerShell so project commands route to Pinset-managed versions.
Commit .pinset/config.toml and .pinset/lock.toml, then run pinset install on another machine or in CI. Each required platform must have a supported runtime artifact.
Pinset supports Windows, macOS, and Linux. Architecture support depends on each tool's upstream releases. For example, Flutter does not provide a Linux ARM64 SDK compatible with the current installation model, so Pinset reports an unsupported target.
Commands prefer project selections, then Pinset global defaults for omitted tools, while enforcing project policy. Enable require_project_tools for strict project routing. There is no silent fallback to system PATH. which --explain shows how a command was resolved.
Free and open source. A development environment that belongs to your project.
Install Pinset ↑Read the docs →