fsprojects/FSharp.TypeProviders.SDK
61.1
Adequate · 24 September 2026
14.4k
lines of production code
F#
primary language
5
measurements over time
What this system is
This system is the F\# Type Provider SDK, a development toolkit for creating and managing F\# type providers. It provides the core APIs for defining erased and generative types, along with templates and examples to facilitate project creation. The codebase includes comprehensive test suites and benchmarks to validate provider behavior and compilation performance.
How it got here
2013 — Build system modernization and SDK migration
4 changes.
The project modernized its build infrastructure by migrating to .NET SDK tooling, FAKE 6, and Paket for dependency management, while removing legacy NuGet and Nuspec configurations. Concurrently, the type provider SDK API was updated to support cross-targeting scenarios and new attribute capabilities, accompanied by the removal of internal debug helpers.
2016–2026 — SDK modernization and template expansion
9 changes.
The project migrated its dependency management to Paket and upgraded to .NET 8, while introducing a new dotnet template for generating F\# Type Provider projects. Comprehensive test suites and benchmarking tools were added to verify the correctness and performance of both erased and generative type providers, alongside fixes to the basic design-time and runtime templates.
Features
Add Basic and Stress Type Provider examples with tests
The examples directory now includes two new F\# type provider samples: BasicProvider, which demonstrates erased and generative type providers with static parameters and custom attributes, and StressProvider, which tests performance and edge cases like try-finally blocks in generated code. Both examples come with corresponding unit tests using xUnit to verify constructor behavior, property access, and method invocation.
examples · high confidence
Add F\# Type Provider template project targeting .NET Standard 2.1
A new project file (FSharp.TypeProviders.Templates.proj) has been added to define the \dotnet new\ template for building F\# Type Providers. This template project targets .NET Standard 2.1 and is configured to package content files while excluding build artifacts and local configuration files, enabling users to generate new F\# Type Provider projects.
templates · high confidence
Initial release of the MyProvider.Runtime template
This change introduces the foundational files for the MyProvider.Runtime template, including assembly metadata, a basic runtime type definition, and package configuration. It establishes the runtime DLL structure that references the design-time assembly via TypeProviderAssembly attributes and sets up the FSharp.Core dependency for the .NET Standard 2.0 target.
templates/content/basic/src/MyProvider.Runtime · high confidence
Behavioural changes
Build system migrated to .NET SDK tooling and FAKE 6
The repository's build process has been modernized by replacing the legacy FAKE 5 and NuGet.exe-based workflow with .NET SDK global tools and FAKE 6. The \build.fsx\ script now uses Paket for dependency resolution and the \dotnet fake\ tool to execute targets, while \build.cmd\ and \build.sh\ have been updated to restore these tools automatically. This change is supported by a new \build.fsx.lock\ file, a \global.json\ pinning the .NET SDK to version 8.0.125, and a new \Directory.Build.props\ file that centralizes package metadata such as authors and license information for the SDK.
(repo-wide) · high confidence
Migration to Paket and updated NuGet configuration
The project has migrated its package management infrastructure to Paket, replacing the legacy NuGet build targets (.nuget/NuGet.targets) that previously handled package restoration and building via MSBuild. A new .nuget/NuGet.config file has been introduced to configure package sources, explicitly adding the .NET Core MyGet feed and the OxyPlot MyGet feed alongside the official NuGet source, while removing the previous configuration that disabled source control integration.
.nuget · high confidence
Removal of legacy Nuspec file
The legacy FSharp.TypeProviders.StarterPack.nuspec file has been removed from the project. This change eliminates the manual NuSpec definition that previously handled package metadata and file inclusion, indicating a shift away from this specific packaging format.
nuget · high confidence
Type provider SDK API updates and debug tool removal
The type provider SDK API has been updated to support cross-targeting scenarios: \ProvidedConstructor\ and \ProvidedMethod\ constructors now accept an optional \invokeCode\ parameter, and \ProvidedMethod\ accepts an optional \isStatic\ parameter. New capabilities include adding custom attributes to parameters (\ProvidedParameter.AddCustomAttribute\), methods (\ProvidedMethod.AddCustomAttribute\), and properties (\ProvidedProperty.AddCustomAttribute\), as well as defining static parameters on methods (\ProvidedMethod.DefineStaticParameters\). Additionally, the internal \Debug.fs\ helper module has been removed, and \AssemblyInfo.fs\ now explicitly grants \InternalsVisibleTo\ access to the test assemblies.
src · high confidence
Updated .NET SDK version and added automated test execution
The basic template now targets .NET 8 (SDK version 8.0.124) and includes a new build configuration that automatically runs unit tests when a project is marked as a test project. This is achieved by adding \Directory.Build.targets\ and \after.MyProvider.sln.targets\ to the solution, which hook into the build process to invoke VSTest for test projects, ensuring tests are executed as part of the standard build workflow.
templates/content/basic · high confidence
Fixes
Fixes to the basic type provider design-time template
The basic type provider template has been updated to ensure correct design-time behavior. The design-time assembly now includes proper assembly metadata and references the runtime assembly via an assembly replacement map, ensuring that the design-time component correctly mirrors the runtime types. Additionally, the template now includes necessary F\# Core and ProvidedTypes references to support type provider implementation.
templates/content/basic/src/MyProvider.DesignTime · high confidence
Test coverage
Added Benchmark.NET suite for generative compilation stress scenarios; Added comprehensive test suite for generative and erased type providers; Added unit tests for the basic template provider.
Dependencies
Migration to Paket and upgrade to .NET 8
The project has migrated its dependency management from NuGet to Paket, introducing paket.dependencies and paket.lock files to manage packages. Additionally, the SDK, examples, and benchmarks have been updated to target .NET 8.0 alongside .NET Standard 2.0, and the benchmarking tooling has been upgraded to BenchmarkDotNet 0.14.0.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.
Score
- CAI 58 → 61 (+3.3)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Architecture 100 → 100 (+0.0)
- Maturity 54 → 54 (+0.0)
- Readiness 65 → 61 (-4.2)
- Security 51 → 63 (+11.9)
Resolved (19)
- Code Duplication not included (time budget)
- Dependency hygiene not measured — no packages were read
- High CVE: System.Net.Http 4.3.0
- High CVE: System.Text.RegularExpressions 4.3.0
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- No exposed public API
- Secret passed as a command-line argument
- Test reliability not included
- complexity unreadable for .fs — churn × complexity hotspots could not be measured
New (21)
- Coverage not measured — no coverage collector is wired up
- Documentation: contradicts the code
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- No dependency advisory monitoring
- …and 1 more
Changes since last survey
- 3 commits — 3 feature/other, 0 fixes
By area
- .github/workflows — 2 commits
- (root) — 1 commit
Notable commits
- change: Document agentic contribution workflow (#532)
- change: update repo assist
- change: update repo assist
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
fsprojects/FSharp.TypeProviders.SDK was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 24 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 44b57261a0207630dd72c546af97506ba1a6b225 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-923689c465cf.