Plat 0.2.0

dotnet tool install --global Plat --version 0.2.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 Plat --version 0.2.0
                    
This package contains a .NET tool you can call from the shell/command line.
#tool dotnet:?package=Plat&version=0.2.0
                    
nuke :add-package Plat --version 0.2.0
                    

Plat

CI NuGet License: MIT

Plat is a .NET 8 global tool that scans a git repository for .NET projects and Angular applications and libraries and writes a deterministic Markdown catalog documenting each project's location, kind, ownership, and boundaries.

Facts that can be inferred from disk (project kind, path, target framework, Angular version) are scanned automatically. The things only a human knows — who owns a project and where its responsibilities begin and end — are author-declared in a small plat.json file committed next to each project and merged into the catalog.

The catalog is meant to be committed and kept honest in CI with plat check.

Install

Plat ships as a .NET global tool on NuGet. Requires the .NET 8 runtime.

dotnet tool install --global Plat

Or into a project-scoped tool manifest:

dotnet new tool-manifest       # once per repo
dotnet tool install Plat

Usage

# Scan the enclosing git repository and write CATALOG.md at its root
plat catalog

# Scan a specific repository and choose the output path
plat catalog --repo /path/to/repo --output docs/PROJECTS.md

# Fail CI if the committed catalog is out of date (exit 1 on drift)
plat check

# Show what changed since the catalog was generated (exit 1 if it differs)
plat diff
Command Purpose Exit codes
catalog Scan and write the catalog Markdown 0 ok, 2 error
check Verify the on-disk catalog matches a fresh scan 0 match, 1 drift/missing, 2 error
diff Print a unified diff between on-disk and a fresh scan 0 match, 1 differ, 2 error

All commands accept --repo <path> (defaults to the enclosing git repository, else the current directory), --output <path> (relative to the repository root, default CATALOG.md), and --verbosity <level>.

What it discovers

  • .NET projects — every .csproj, .fsproj, and .vbproj, with its target framework and kind (Library, Console, or Web). Test projects (xunit/NUnit/MSTest or <IsTestProject>true</IsTestProject>) and build output (bin, obj, node_modules) are skipped.
  • Angular applications and libraries — every angular.json workspace entry whose projectType is application or library, plus standalone ng-package.json libraries. Non-Angular workspace entries (e.g. a Playwright/e2e project), node_modules, and dist are skipped.

Declaring ownership and boundaries

Drop a plat.json into any project's directory:

{
  "team": "Platform",
  "owner": "Jane Doe",
  "contact": "platform@acme.com",
  "boundary": "Authentication and authorization services.",
  "dependsOn": ["Acme.Core"],
  "tags": ["backend", "security"]
}

Every field is optional. Scanning never overwrites these values, and they never override scanned facts — the two are kept strictly separate. A malformed plat.json fails the run with exit code 2 so mistakes are caught, not silently ignored.

CI

- run: dotnet tool install --global Plat
- run: plat check        # exits 1 if CATALOG.md is stale

Development

Requires the .NET 8 SDK (pinned in global.json).

dotnet build
dotnet test

See CONTRIBUTING.md for the ATDD development loop and code style, and docs/specs for the L1/L2 requirements.

Contributing

Contributions are welcome. Please read CONTRIBUTING.md and follow our Code of Conduct.

Security

To report a security vulnerability, follow the process in SECURITY.md. Do not open public issues for security reports.

License

MIT — see LICENSE.

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 was computed.  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
0.2.0 50 5/29/2026
0.1.0 58 5/29/2026