Tarmil/FSharp.SystemTextJson
62.1
Adequate · 23 September 2026
2.5k
lines of production code
F#
primary language
5
measurements over time
What this system is
This system is an F\# library for JSON serialization built on System.Text.Json, providing support for F\#-specific types such as records, unions, lists, sets, maps, and tuples. It includes a comprehensive test suite covering edge cases and regression fixes, alongside benchmarking tools to evaluate performance. The project also features an automated build and formatting pipeline managed by FAKE and Git hooks.
Features
Add F\# System.Text.Json benchmarks
A new benchmarking project has been added to evaluate the performance of F\# types with System.Text.Json. The suite includes comparisons between records and classes, reflection-based type checks, and serialization of tuples versus generic types, using BenchmarkDotNet with memory diagnostics.
benchmarks · high confidence
Add serialization support for F\# collections, tuples, and maps
The library now supports serializing and deserializing F\# lists, sets, maps, and tuples. This includes dedicated converters for each type, with maps supporting both object and array-of-pairs formats. Tuples are handled with null-checking for reference types. The \JsonFSharpConverter\ and its attribute have been updated to recognize and process these new types, and the \JsonFSharpTypes\ enum now includes flags for Lists, Sets, Maps, and Tuples.
src/FSharp.SystemTextJson · high confidence
Architecture
Repository structure and build configuration updates
The repository received new configuration files to standardize formatting and build behavior: an .editorconfig enforces CRLF line endings and specific F\# formatting rules for .fs and .fsx files; .gitattributes sets line endings for source and YAML files; .gitignore excludes IDE and build artifacts; and new Directory.Build.props/targets and global.json configure MSBuild artifacts paths, .NET SDK version (10.0.100), and dotnet tool restoration. The solution file was updated to include new projects (benchmarks, trim test, build) and updated Visual Studio version references.
(repo-wide) · high confidence
Behavioural changes
Automated code formatting enforced via Git hooks
The repository now enforces code formatting automatically before each commit. A new pre-commit hook is installed via a PowerShell script that runs 'dotnet fantomas' to check code style, ensuring all changes adhere to the project's formatting standards.
.githooks · high confidence
Migrate build system to FAKE with .NET 8 and .NET 7 support
The build system has been replaced with a new FAKE-based build script (build/build.fs) that defines targets for Clean, Build, Pack, Test, TestTrim, and Benchmark. The build now runs on .NET 8 and .NET 7, replacing the previous fake-cli approach. The TestTrim target now uses the current RTI (Runtime Identifier) and publishes self-contained binaries for trimming tests. The build also groups FAKE target output in GitHub Actions and uses artifacts directory for outputs.
build · high confidence
Removed obsolete Paket bootstrapper files and simplified restore logic
The \.paket\ directory's \paket.bootstrapper.proj\ and \paket.bootstrapper.props\ files have been deleted, removing the legacy bootstrapper mechanism that previously downloaded and managed the Paket executable. The \Paket.Restore.targets\ file has been updated to streamline the restore process, removing complex hash-based caching logic and replacing it with a simplified approach that checks for the presence of the \dotnet-tools.json\ configuration to determine how to invoke Paket, reflecting a shift from the deprecated bootstrapper to a more direct tool-based or global-path-based resolution.
.paket · high confidence
Test coverage
Add comprehensive test coverage for F\# collection, record, and union serialization; Added F\# System.Text.Json trim test suite.
Dependencies
Upgrade to .NET 10 and System.Text.Json 8.0
The project has been upgraded to target .NET 10.0, replacing the previous .NET Core 3.0 and .NET Standard 2.0 targets. This includes updating the core library and test projects to use System.Text.Json 8.0.6, alongside other dependency updates such as FSharp.Core 5.0 and the addition of a new benchmarking project. These changes improve compatibility with modern .NET versions and leverage the latest features and performance improvements in the JSON serialization library.
(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 56 → 62 (+5.6)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 88 (new)
- Architecture 100 → 100 (+0.0)
- Maturity 55 → 57 (+2.0)
- Readiness 51 → 54 (+2.5)
- Security 54 → 72 (+18.6)
Resolved (15)
- 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
- Off-boarding risk: anonymized user #1
- Test reliability not included
- complexity unreadable for .fs — churn × complexity hotspots could not be measured
New (40)
- CaseModule.casesByName (cognitive 16) (src/FSharp.SystemTextJson/Union.fs)
- CaseModule.get (cognitive 31) (src/FSharp.SystemTextJson/Union.fs)
- CaseModule.get (cyclomatic 26) (src/FSharp.SystemTextJson/Union.fs)
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- Duplicated block (12 lines × 2) (src/FSharp.SystemTextJson/Record.fs)
- Duplicated block (13 lines × 2) (src/FSharp.SystemTextJson/Tuple.fs)
- Duplicated block (13 lines × 2) (src/FSharp.SystemTextJson/Union.fs)
- Duplicated block (14 lines × 2) (src/FSharp.SystemTextJson/Tuple.fs)
- Duplicated block (5 lines × 2) (src/FSharp.SystemTextJson/Union.fs)
- Duplicated block (6 lines × 2) (src/FSharp.SystemTextJson/Tuple.fs)
- Duplicated block (8 lines × 2) (src/FSharp.SystemTextJson/Record.fs)
- FileTooLong: FSharp.SystemTextJson/Union.fs (src/FSharp.SystemTextJson/Union.fs)
- 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)
- …and 20 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
Tarmil/FSharp.SystemTextJson 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 23 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 4283f782fdd9f9b1afbb172cf5bf1ccd112417c2 — 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-955b9cee9818.