Skip to content

v1.2.0

Latest

Choose a tag to compare

@github-actions github-actions released this 15 Sep 15:05
· 7 commits to develop since this release
v1.2.0
5f63979

The ProjGraph CLI and MCP server now ship as Native AOT executables. You install them the same way, and a typical command now finishes in tens of milliseconds instead of most of a second.

Highlights

Native AOT tool packages

ProjGraph.Cli and ProjGraph.Mcp are now RID-specific .NET tool packages. The .NET SDK picks the right package for your machine, so installing or updating works as before:

dotnet tool update -g ProjGraph.Cli
"command": "dnx",
"args": ["ProjGraph.Mcp@1.2.0", "--yes"]
Platform What you get
Windows x64 Native AOT
Linux x64 and Arm64 (glibc) Native AOT
Linux x64 and Arm64 (musl, e.g. Alpine) Native AOT
macOS Arm64 Native AOT
Other platforms (e.g. macOS x64, Windows Arm64) Framework-dependent build on the .NET 10 runtime

You still need the .NET 10 SDK to install the tools, but the native executables start without loading the .NET runtime.

These timings compare the published 1.1.0 and 1.2.0 CLI packages on linux-x64 (Ryzen 5 3600), averaged over 10 runs:

Command 1.1.0 1.2.0
projgraph erd on the e-commerce sample DbContext 751 ms 38 ms
projgraph classdiagram on a single file 576 ms 27 ms
projgraph stats ProjGraph.slnx 282 ms 27 ms
projgraph visualize ProjGraph.slnx 235 ms 27 ms
projgraph classdiagram src --inheritance --dependencies 2,885 ms 1,338 ms

Short commands gain the most, because startup was most of their time. Large analyses still speed up, but less. The MCP server also starts faster when your client launches it.

Output is unchanged. Before anything was published, every native package was installed on its own platform and passed a 30-test suite that compares its output with the JIT build.

projgraph --version

projgraph --version (or -v) now prints the installed version. It didn't work in earlier releases.

Documentation site

The documentation site has a new theme and landing page. It also has a Showcase section with the sample diagrams and three new guides:

Behavior changes

  • ProjGraph now reads .csproj, .props and .sln files with its own parsers (built on System.Xml.Linq and Microsoft.VisualStudio.SolutionPersistence) instead of Microsoft.Build. Output for the samples and for this repository is identical to 1.1.0.
  • A .sln that lists the same project path twice now fails with Failed to read or parse .sln file. 1.1.0 rendered a graph for it.

For library users

  • The public API of the ProjGraph.* libraries is unchanged.
  • The libraries no longer depend on Microsoft.Build or Microsoft.CodeAnalysis.Workspaces.MSBuild.
  • ProjGraph.Core and every ProjGraph.Lib* project build with IsAotCompatible, so the trim and AOT analyzers check them.
  • ProjGraph.Lib.Core now embeds the .NET 10 reference assemblies that Roslyn compiles against, instead of reading them from the runtime directory. As a result, the package grows from about 72 KB to about 730 KB.

Release assets

The attached files are the same 22 packages published to NuGet.org: 6 libraries (with .snupkg symbols), 2 pointer packages, 12 native tool packages and 2 any fallbacks. dotnet tool install and dnx download them from NuGet.org, so you don't need to use these files directly.

What's Changed

  • Bump the nuget group with 5 updates by @dependabot[bot] in #185
  • Bump the nuget group with 10 updates by @dependabot[bot] in #187
  • chore(deps): Bump actions/setup-java from 5 to 6 in the github-actions group by @dependabot[bot] in #189
  • Bump the nuget group with 2 updates by @dependabot[bot] in #188
  • docs: add a custom DocFX theme, landing page, and guides by @HandyS11 in #190
  • feat: prepare libraries for Native AOT (PR 1 of 3) by @HandyS11 in #191
  • feat: Native AOT build and PR smoke test (PR 2 of 3) by @HandyS11 in #192
  • feat: Native AOT tool packages and release pipeline (PR 3 of 3) by @HandyS11 in #193
  • ci: skip the MCP Registry for pre-release tags by @HandyS11 in #194
  • feat(cli): add --version by @HandyS11 in #195
  • refactor(lib-core): use a collection expression in SlnParser by @HandyS11 in #196

Full Changelog: v1.1.0...v1.2.0