fsprojects/Fleece
48.5
Weak · 24 September 2026
3.7k
lines of production code
F#
primary language
5
measurements over time
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.