Repository navigation
0.3.0 - 2026-10-14
Release Notes
C# is the third language: ASP.NET Core services, Blazor components and the libraries around
them, analysed the same way as TypeScript and Python, offline. TypeScript and Python output is
unchanged apart from the catalogue digest.
Added
- C# (
.cs) and Blazor components (.razor), ADR 0016. Names resolve against the whole
project: namespaces,usingdirectives (global, static, aliases,<Using>items in the
project file and the SDK's implicit usings fromImplicitUsings), nested and partial types,
members inherited from base classes in other files, primary constructors, records,
properties, attributes, extension methods, overloads,out/ref, patterns, LINQ query
syntax and exceptions. External types are qualified by the namespaces the catalogue spells.
Razor components are translated into C# with positions kept in the component. - C# sources: ASP.NET Core minimal API handlers (services,
[FromServices], DbContexts, the
request context and interfaces are injected;[AsParameters]binds each property;
[FromBody]and friends are input), MVC controller actions, gRPC service methods,
HttpRequestreads, the remote IP, claims (classified by the claim type:subis a
pseudonymous identifier), and Blazor@bind,[SupplyParameterFromForm],
[SupplyParameterFromQuery]and routable[Parameter]s. - C# sinks: Microsoft.Extensions.Logging (including
[LoggerMessage]methods), the console,
Debug/Trace, Serilog, NLog, log4net, OpenTelemetry activity tags, Duende IdentityServer
events,HttpClient(with the host of a request message), RestSharp, Refit, Sentry,
Application Insights, Segment, Mixpanel, PostHog, RabbitMQ, MassTransit, Azure Service Bus,
Event Hubs and Queues, Kafka, Amazon SNS, SQS and SES, SendGrid, MailKit,SmtpClient,
Twilio, Microsoft.Extensions.AI, OpenAI, Azure OpenAI and Anthropic. Sanitisers for password
hashing and predicates; propagators for the base class library, LINQ,StringBuilder,
message builders, databases (EF Core, ASP.NET Identity, Redis, Dapper …) and framework
plumbing. - Dispatchers (ADR 0017,
catalogue/dispatchers.yml): MediatR'sSendandPublishreach the
project's request and notification handlers and pipeline behaviors for the value's type. A
project can declare its own bus underdispatchersin.privacy-flow.yml. - Frameworks reported as unsupported for C#: SignalR, Azure Functions, Orleans, Razor Pages,
FastEndpoints, HotChocolate and GraphQL.NET, CoreWCF, ASP.NET on .NET Framework;.cshtml
files are anunsupported_languagegap. A C# class uses a framework when it extends one of
its types or carries its attribute. - Catalogue fields:
decoratedsinks,host.built_argandhost.wrappers,bases,
class_decorators,membersandhas_param_typefor handlers,kind: propertysources,
arg_categoryfor reads,skip_bases,skip_interfaces,skip_attrs,expand_attrs,
classify_only_typesandby_attrfor parameters, flowsfluentandcallback_result,
frameworktypes, and per-languagevalue_methods,accessor_fieldsandmetadata_types.
skip_typestakes globs. - Fixtures
cs/*for every rule and the C# features; conformance vectorscs-*; adispatch
break in the conformance CI job; fuzz inputs for C#, Razor and project files; a C# variant of
the synthetic benchmark in the performance budget; and a smoke test on dotnet/eShop at a
pinned commit (.github/scripts/smoke_eshop.py,tests/smoke/eshop.expected.json), run in CI
on changes to the analysis or the catalogue.
Changed
- Language-specific branches outside the lowerings are a table (
LangTraits); constructors are
found by a flag rather than by name.
Install privacy-flow 0.3.0
Install prebuilt binaries via Homebrew
brew install noru-tech/tap/piiflowDownload privacy-flow 0.3.0
| File | Platform | Checksum |
|---|---|---|
| privacy-flow-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| privacy-flow-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| privacy-flow-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| privacy-flow-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo noru-tech/privacy-flowYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation> --repo noru-tech/privacy-flow