Skip to content
CAI
Software that uses CAICheck a score

fsprojects/Fleece

48.5

Weak · 24 September 2026

3.7k

lines of production code

F#

primary language

5

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Fleece is an F\# library that provides a unified, composable system for JSON serialization and deserialization. It abstracts over multiple underlying JSON libraries—including System.Text.Json, Newtonsoft.Json, and FSharp.Data—allowing users to switch backends while using a consistent API. The system supports complex F\# types, offers performance benchmarks, and includes comprehensive integration tests to ensure correctness across all supported backends.

How it got here

2014–2018 — multi-backend codec support

3 changes.

The project introduced a unified codec system that allows users to switch between different JSON implementations, including System.Text.Json, Newtonsoft.Json, and FSharp.Data. This period focused on modernizing the library with performance benchmarks and centralized build configurations to support multiple serialization backends.

2020–2022 — JSON serialization and documentation

9 changes.

This period focused on expanding Fleece's JSON serialization capabilities by adding support for multiple JSON libraries, including Newtonsoft.Json, System.Text.Json, and FSharp.Data. The work also included creating a compatibility layer to unify these backends and generating comprehensive documentation and integration tests to validate the new functionality.

Features

Add JSON parsing benchmarks for multiple libraries

The benchmark suite now includes performance tests for parsing JSON using System.Text.Json, Newtonsoft.Json, and FSharp.Data, alongside the existing System.Json implementation. This allows for comparative analysis of parsing speed and memory usage across different JSON libraries.

Benchmarks · high confidence

Add JSON serialization and deserialization support for F\# and System.Json types

New modules for Fleece.FSharpData and Fleece.SystemJson provide encoders and decoders for primitive types (int, float, bool, string, char), complex types (bigint, Guid), and F\#-specific types (vtuple, voption, enums). The changes introduce a unified \Encoding\ wrapper around \JsonValue\ and expose decoder helpers like \resultD\, \choiceD\, \optionD\, and \arrayD\ to handle JSON parsing and serialization for both FSharp.Data and System.Json backends.

src/Fleece.FSharpData, src/Fleece.SystemJson · medium confidence

Add Newtonsoft.Json serialization and deserialization support

The library now supports serializing and deserializing data to and from JSON using the Newtonsoft.Json library. This adds a new \Encoding\ type that wraps \JToken\ objects, enabling users to parse JSON strings into strongly typed F\# values and convert F\# values back into JSON strings. The implementation includes decoders for common types such as integers, floats, booleans, strings, and enums, as well as support for optionals, arrays, and nested objects.

src/Fleece.NewtonsoftJson · high confidence

Add documentation for Fleece JSON mapping and web framework integrations

Added new documentation files in docsrc/content to explain Fleece's JSON mapping capabilities, including ToJson/OfJson, Codecs, and Combinators. The update also introduces integration guides for the Giraffe and Suave web frameworks, demonstrating how to use Fleece for parsing and crafting JSON in web API contexts.

docsrc/content · high confidence

Added documentation assets for F\# code snippets and tooltips

Added new static assets to the documentation source: a color logo SVG, a CSS stylesheet defining syntax highlighting for F\# code snippets (strings, keywords, types, etc.), and a JavaScript file implementing tooltip display and hiding logic. These files provide the visual styling and interactive behavior for the documentation site.

docsrc/files · high confidence

Fleece 0.11.0-RC1 release with multi-backend codec support

This release introduces a unified codec system that allows users to switch between different JSON implementations (System.Json, System.Text.Json, FSharp.Data, and Newtonsoft.Json) simultaneously or independently. The library now features an applicative computation expression for concise codec definitions, internal caching for performance, and native support for .NET 6 types like DateOnly and TimeOnly. The project has been modernized with a Directory.Build.props file for centralized MSBuild configuration, a global.json pinning the .NET SDK to 6.0.0, and updated CI/CD pipelines via appveyor.yml and build.bat scripts.

(repo-wide) · high confidence

Introduce System.Text.Json-based JSON encoding and decoding

The library now supports serialization and deserialization of JSON using the .NET System.Text.Json API. This adds an \Encoding\ type that wraps \JsonElement\ and \Utf8JsonWriter\, enabling users to parse JSON strings into a structured representation and serialize F\# values to JSON strings. The implementation includes decoders for handling JSON objects, arrays, and primitive types, as well as support for Result and Choice types in JSON format.

src/Fleece.SystemTextJson · high confidence

Introduce compatibility layer for multiple JSON libraries

Added a new \Compatibility.fs\ file that provides a unified \JsonValue\ type and \Operators\ module for \FSharp.Data\, \Newtonsoft.Json\, \System.Text.Json\, and \System.Json\. This allows users to work with different JSON backends using a consistent API, while the core \Fleece.fs\ file defines the underlying \Codec\ and \DecodeError\ types that power these adapters.

src/Fleece · high confidence

Introduced new documentation generation tooling and templates

Added a new F\#-based tooling suite in the \docsrc/tool\ directory to generate and publish the project's documentation. This includes \Program.fs\ and \doclib.fs\ to handle the build process, along with a set of new Razor templates (\template.cshtml\, \module.cshtml\, \type.cshtml\, etc.) that define the visual structure of the generated API reference pages. The tooling also provides a shell script (\manually\_build\_docs.sh\) to automate the build and deployment steps.

docsrc/tool · high confidence

Test coverage

Added comprehensive test coverage for JSON lens and codec functionality; Added integration tests for JSON serialization across multiple libraries.

Dependencies

Add JSON serialization backends for System.Text.Json, Newtonsoft.Json, and FSharp.Data

The library now supports multiple JSON serialization providers. Users can choose between System.Text.Json, Newtonsoft.Json, or FSharp.Data for serialization, each available as a separate package (Fleece.SystemTextJson, Fleece.NewtonsoftJson, Fleece.FSharpData). This allows users to select the JSON library that best fits their project's dependencies and performance requirements.

(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

Score

  • CAI 55 → 48 (-6.9)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 75 → 58 (-17.1)
  • Architecture 100 → 100 (+0.0)
  • Maturity 35 → 35 (+0.0)
  • Readiness 67 → 67 (+0.0)
  • Security 100 → 85 (-14.7)
  • Accessibility 68 → 51 (-17.7)

Resolved (23)

  • Dependency hygiene not measured — no packages were read
  • Duplicated block (10 lines × 2) (src/Fleece.FSharpData/Fleece.FSharpData.fs)
  • Duplicated block (11 lines × 3) (src/Fleece.FSharpData/Fleece.FSharpData.fs)
  • Duplicated block (11 lines × 3) (src/Fleece.FSharpData/Fleece.FSharpData.fs)
  • Duplicated block (12 lines × 3) (src/Fleece.FSharpData/Fleece.FSharpData.fs)
  • Duplicated block (5 lines × 2) (src/Fleece/Fleece.fs)
  • Duplicated block (5 lines × 4) (src/Fleece.FSharpData/Fleece.FSharpData.fs)
  • Duplicated block (6 lines × 2) (src/Fleece.NewtonsoftJson/Fleece.NewtonsoftJson.fs)
  • Duplicated block (6 lines × 2) (src/Fleece/Fleece.fs)
  • Duplicated block (6 lines × 3) (src/Fleece.FSharpData/Fleece.FSharpData.fs)
  • Duplicated block (6 lines × 3) (src/Fleece.FSharpData/Fleece.FSharpData.fs)
  • Duplicated block (6 lines × 3) (src/Fleece.NewtonsoftJson/Fleece.NewtonsoftJson.fs)
  • Duplicated block (6 lines × 4) (src/Fleece/Fleece.fs)
  • Duplicated block (7 lines × 2) (src/Fleece/Fleece.fs)
  • Duplicated block (8 lines × 3) (src/Fleece.FSharpData/Fleece.FSharpData.fs)
  • Duplicated block (9 lines × 3) (src/Fleece.FSharpData/Fleece.FSharpData.fs)
  • Duplicated block (9 lines × 4) (src/Fleece.FSharpData/Fleece.FSharpData.fs)
  • No exposed public API
  • Test reliability not included
  • The README mentions a companion FSharpPlus package but does not link to it or explain its role in the design (e.g. To/OfJson typeclasses). (README.md)
  • …and 3 more

New (44)

  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • Duplicated block (11 lines × 3) (src/Fleece.FSharpData/Fleece.FSharpData.fs)
  • Duplicated block (15 lines × 4) (src/Fleece.FSharpData/Fleece.FSharpData.fs)
  • Duplicated block (19–21 lines × 3) (src/Fleece.FSharpData/Fleece.FSharpData.fs)
  • Duplicated block (27–29 lines × 3) (src/Fleece.FSharpData/Fleece.FSharpData.fs)
  • Duplicated block (2–8 lines × 4) (src/Fleece.FSharpData/Fleece.FSharpData.fs)
  • Duplicated block (35 lines × 2) (src/Fleece.FSharpData/Fleece.FSharpData.fs)
  • Duplicated block (3–5 lines × 4) (src/Fleece.FSharpData/Fleece.FSharpData.fs)
  • Duplicated block (4–13 lines × 4) (src/Fleece.FSharpData/Fleece.FSharpData.fs)
  • Duplicated block (4–5 lines × 4) (src/Fleece.FSharpData/Fleece.FSharpData.fs)
  • Duplicated block (5 lines × 2) (src/Fleece.NewtonsoftJson/Fleece.NewtonsoftJson.fs)
  • Duplicated block (5 lines × 2) (src/Fleece/Fleece.fs)
  • Duplicated block (5 lines × 3) (src/Fleece.FSharpData/Fleece.FSharpData.fs)
  • Duplicated block (5 lines × 3) (src/Fleece.FSharpData/Fleece.FSharpData.fs)
  • Duplicated block (5 lines × 4) (src/Fleece.FSharpData/Fleece.FSharpData.fs)
  • Duplicated block (5 lines × 4) (src/Fleece/Fleece.fs)
  • Duplicated block (5–6 lines × 3) (src/Fleece.FSharpData/Fleece.FSharpData.fs)
  • Duplicated block (6 lines × 2) (src/Fleece.FSharpData/Fleece.FSharpData.fs)
  • Duplicated block (6 lines × 2) (src/Fleece/Compatibility.fs)
  • …and 24 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

fsprojects/Fleece 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 9e1adf600f2ac01ade12fdb87e64c5eb3c32c296 — 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.