Repository navigation
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,.propsand.slnfiles with its own parsers (built onSystem.Xml.LinqandMicrosoft.VisualStudio.SolutionPersistence) instead of Microsoft.Build. Output for the samples and for this repository is identical to 1.1.0. - A
.slnthat lists the same project path twice now fails withFailed 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.BuildorMicrosoft.CodeAnalysis.Workspaces.MSBuild. ProjGraph.Coreand everyProjGraph.Lib*project build withIsAotCompatible, so the trim and AOT analyzers check them.ProjGraph.Lib.Corenow 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