Skip to content
CAI
Software that uses CAICheck a score

tommililja/Farse

63.4

Adequate · 3 October 2026

2.3k

lines of production code

F#

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a high-performance JSON parsing library for F\# named Farse, designed to provide robust error reporting and flexible data manipulation. It features a refactored parser that supports nested property access, parallel error collection, and seamless conversion to standard .NET collections. The project includes comprehensive benchmarks against other JSON libraries and a full test suite covering parsing, manipulation, and error handling scenarios.

Behavioural changes

Internal refactoring of JSON handling and type utilities

The internal implementation in src/Farse/Internal has been reorganized into three new modules: ActivePatterns, Builders, and Common. ActivePatterns introduces active patterns for validating JsonElement kinds and parsing property paths. Builders provides computation expressions for string building and composing Result types with multiple arguments. Common consolidates shared utilities, including default JsonSerializerOptions with relaxed encoding, helper extensions for JsonElement, and a comprehensive type-name mapping system for F\# primitives and generic collections.

src/Farse/Internal · high confidence

Major parser and error handling overhaul

The Farse JSON parsing library has been significantly refactored to improve error reporting and usability. The error model now uses structured \ParseError\ records containing path, element, and details, replacing the previous string-based error messages, and the \Parser\ type is now a struct for better performance. Property access has been unified under the \Prop\ module, allowing parsers to target nested paths (e.g., \"prop.prop2"\) and supporting escaped periods. The \ParserBuilder\ now supports combining up to five parsers simultaneously, collecting all errors rather than failing on the first one. Additionally, extension methods have been added to \Parser\ and \Parse\ for convenient array and dictionary conversions (e.g., \List()\, \HashSet()\, \Map()\), and the \Json\ module provides new utilities for sorting, converting to \JsonNode\/\JsonElement\, and formatting output.

src/Farse · high confidence

Refactor JSON benchmarks to use new Farse parser and updated data models

The benchmark suite in src/Farse.Benchmarks has been restructured to benchmark the Farse parser alongside Thoth.Json and Newtonsoft.Json using a new, more complex data model (User with nested Subscription) instead of the previous simple Base/Benchmark types. The old static JSON fixture files (Benchmarks.json, Benchmarks.100.json) were removed in favor of programmatically generated JSON data via the BenchmarkData module. New helper extensions for JToken and JsonElement were added to support the benchmarking logic, and the entry point was updated to run the new ParserBenchmarks class.

src/Farse.Benchmarks · high confidence

Updated build configuration and solution structure

The build system now enforces stricter compiler settings, including treating warnings as errors, enabling strict F\# features, and raising the warning level to 5. A new warning (104) is suppressed, and sponsorship exemption settings for verification have been added. Additionally, the solution file has been reorganized to explicitly include root-level configuration files (such as Directory.Build.props, global.json, and .editorconfig) within a dedicated solution folder.

src · high confidence

Test coverage

Comprehensive test suite for JSON parsing, manipulation, and error handling

Added a complete test suite in src/Farse.Tests covering the library's core capabilities. The new tests validate JSON parsing for various data types (integers, strings, booleans, dates, custom parsers), parser combinators (bind, map, recover, default values), and property access (Prop.get, Prop.tryGet). It also includes tests for JSON manipulation features such as sorting properties, comparing JSON objects (including handling duplicates and nulls), and generating diffs. Additionally, the suite verifies error handling and message formatting for invalid inputs and missing properties, replacing the previous fragmented test files.

src/Farse.Tests · high confidence

Dependencies

Upgrade to .NET 10 and modernize dependency management

The project has dropped support for .NET 6 and 7, upgrading the benchmark and test projects to target .NET 10 and expanding the main library's target frameworks to include .NET 8, 9, and 10. Centralized package versioning via Directory.Packages.props has been removed in favor of explicit version references in project files. Key dependencies have been updated, including BenchmarkDotNet to 0.15.8, Newtonsoft.Json to 13.0.4, and FSharp.Core to 10.1.401 in test/benchmark contexts, while the main library now references System.Text.Json 9.0.0 and FSharp.Core 8.0.100. The test suite also incorporates NodaTime 3.3.5 and updates testing frameworks like Expecto and xunit.v3.

(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 61 → 63 (+2.2)
  • Rubric changed (rubric-2026.09.13 → rubric-2026.10.1) — scores are not directly comparable.

Lenses

  • Code Health 96 → 96 (+0.1)
  • Architecture 94 → 98 (+4.1)
  • Maturity 59 → 59 (-0.1)
  • Readiness 49 → 53 (+3.7)
  • Security 77 → 74 (-2.7)
  • Performance 95 (new)

Resolved (6)

  • 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)
  • Workflow token permissions not restricted

New (10)

  • Documentation: no project overview (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)
  • Hotspot: src/Farse/Internal/Common.fs (src/Farse/Internal/Common.fs)
  • Hotspot: src/Farse/Json.fs (src/Farse/Json.fs)
  • PR-triggered workflow without a permissions block

Changes since last survey

  • 52 commits — 46 feature/other, 6 fixes

By area

  • src/Farse — 25 commits
  • src/Farse.Tests — 12 commits
  • (root) — 11 commits
  • .github/workflows — 3 commits
  • src/Farse.slnx — 1 commit

Notable commits

  • fix: Fix diff paths
  • fix: Fix example
  • fix: Fix half parsing
  • fix: Fix range check
  • fix: Fix wrong culture
  • fix: Small fixes
  • change: Add CONTRIBUTING.md
  • change: Add JNum.from
  • change: Add combine
  • change: Add missing tests
  • change: Add publish workflow
  • change: Add remarks
  • change: Add test
  • change: Change UTC parsing
  • change: Change encoder
  • change: Change order
  • change: Dont catch
  • change: Handel null values for JStr
  • change: Handle Nan and Infinity
  • change: Improve Json type
  • …and 32 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

tommililja/Farse 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 3 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit b648f7e9919b452d02b35519c113897ea86b6be4 — the exact code this score is about.
  • Scored under rubric-2026.10.1 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-4f4226d619ea.