Pinion 1.3.0

dotnet tool install --global Pinion --version 1.3.0
                    
This package contains a .NET tool you can call from the shell/command line.
dotnet new tool-manifest
                    
if you are setting up this repo
dotnet tool install --local Pinion --version 1.3.0
                    
This package contains a .NET tool you can call from the shell/command line.
#tool dotnet:?package=Pinion&version=1.3.0
                    
nuke :add-package Pinion --version 1.3.0
                    

Pinion

Migrate with AI. Prove it didn't break anything.

Pinion locks what your legacy .NET code does today into runnable tests, then tells you exactly what a migration changed. It runs entirely on your machine.

AI migration tools will happily rewrite your .NET Framework app. They validate the result by checking that your build and tests pass, which proves almost nothing on the codebases that most need migrating, because those are the ones without tests.

Pinion closes that gap in three commands:

dotnet tool install -g Pinion

pinion analyze  ./MyApp                  # where am I exposed? (free, offline, no AI)
pinion generate ./MyApp -p ./MyApp.Tests # lock what the code does TODAY as golden masters
#          … now migrate: Copilot, a contractor, or by hand …
pinion verify   ./MyApp                  # identical, or exactly what changed and where

Pinion never decides what your code should do. It records what it actually does, bugs included, and freezes that. Because it measures rather than judges, it is safe to point at code nobody on the team understands any more. The practice is Michael Feathers' characterization testing (pinning tests), automated for .NET, in C# and VB.NET.

Nothing leaves your machine

The analyze path and the default deterministic generate path make zero network calls. There is no HTTP client in them at all. No telemetry, no analytics, no license activation, no update check. AI is opt-in (--provider anthropic, openai, or azure-openai, including local OpenAI-compatible servers via --base-url), off by default, and never required.

That matters in regulated finance, defense, healthcare, and anywhere air-gapped: the places still running the oldest .NET, and the ones cloud-only migration tooling cannot serve.

Commands

analyze migration-readiness audit: risk ranking, blast radius, seams, landmines, HTML dashboard
generate synthesize characterization tests and capture golden masters
verify re-run the locked suite after a migration; report identical vs. changed
accept re-baseline intended behavior changes
prove mutation-test the generated suite (Stryker.NET)
seam introduce Feathers seams for ambient values so untestable methods become lockable
ci scaffold a GitHub Actions / Azure DevOps behavior gate
quickstart analyze → scaffold → lock your riskiest behaviors, in one command

License — free for everyone

Pinion is free, for everyone, permanently. No paid version, no tier, no seat count, no key, no account, nothing phones home. Commercial and internal use on proprietary code included, and consultants may use it on paid client engagements.

Licensed under the Functional Source License 1.1, Apache-2.0 future grant (FSL-1.1-ALv2). The only right withheld is Competing Use — selling Pinion, hosting it as a paid service, or shipping it inside a product that substitutes for it. That restricts vendors, not users. Each released version becomes Apache-2.0, unrestricted, two years after release.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

This package has no dependencies.

Version Downloads Last Updated
1.3.0 118 8/26/2026
1.2.1 111 8/26/2026
1.2.0 122 8/25/2026
1.1.0 112 8/24/2026
1.0.0 115 8/24/2026