fsprojects/FsHttp
48.5
Weak · 23 September 2026
4.6k
lines of production code
F#
primary language
5
measurements over time
What this system is
FsHttp is an HTTP client library for F\# that provides a fluent, composable domain-specific language for constructing and sending HTTP requests. It supports multiple JSON parsing backends (FSharp.Data, Newtonsoft.Json, and System.Text.Json) and handles common web client concerns like headers, cookies, proxies, and response decompression. The system is designed for both functional and imperative usage patterns, with extensive test coverage and interactive examples demonstrating its capabilities across .NET versions.
How it got here
2018 — Modernization and DSL refactoring
4 changes.
This period focused on modernizing the project's infrastructure by upgrading to .NET 6 and standardizing the build system, while simultaneously refactoring the core library to introduce a new pipe-style DSL and restructure internal domain types. These changes enhanced composability and configuration flexibility, accompanied by dependency updates and license standardization.
2020–2022 — HTTP client and JSON parsing expansion
9 changes.
This period focused on expanding the library's HTTP client capabilities and JSON handling, introducing new integration packages for Newtonsoft.Json and FSharp.Data. The team also built out comprehensive test coverage for HTTP features and created extensive F\# Fiddle examples to demonstrate usage across .NET 5, 6, and 7 environments.
Features
Add .NET 7 FSI fiddle with FsHttp 10.0.0-preview2
A new .NET 7 F\# interactive script environment is introduced, configured via global.json to use SDK 7.0.0. It includes two F\# script files for testing the FsHttp library: one targeting version 10.0.0-preview2 (success case) and another for version 9.0.0 (failure case), enabling users to experiment with these specific library versions in a .NET 7 context.
_fiddle/dotnet\_fsi\net7 · medium confidence
Add JSON parsing and comparison utilities to FsHttp.FSharpData
The FsHttp.FSharpData library now includes new modules for working with JSON data. Response.fs adds helper functions (toJson, toJsonArray, toJsonList) to parse HTTP responses into FSharp.Data JsonValue objects. JsonExtensions.fs adds a HasProperty method to JsonValue for easier property checks. JsonComparison.fs introduces new types (ArrayComparison, StructuralComparison) and functions (expectJson, assertJson, etc.) to compare JSON structures, supporting both subset and exact matching with configurable array ordering.
src/FsHttp.FSharpData · high confidence
Add Newtonsoft.Json integration for JSON parsing
The FsHttp library now includes a new integration package for Newtonsoft.Json. This adds support for parsing HTTP responses into JSON objects, arrays, and lists using the Newtonsoft.Json library, including functions like \toJson\, \toJsonSeq\, \toJsonArray\, \toJsonList\, and \deserializeJson\ which allow users to easily convert HTTP responses into strongly-typed F\# types or dynamic JSON structures.
src/FsHttp.NewtonsoftJson · high confidence
Added TestWebServer with streaming file download support
Introduced a new TestWebServer application that includes a custom FileCallbackResult for streaming file downloads, a TestController exposing a /test/lines endpoint that generates a 1000-line text file as a zip download, and the standard ASP.NET Core hosting infrastructure (Program, Startup, and configuration files) to run the server.
src/TestWebServer · high confidence
Expanded F\# Fiddle examples for FsHttp usage
The fiddle directory now includes a comprehensive set of new F\# script files (e.g., \issue-101.fsx\, \issue-103.fsx\, \issue-106.fsx\, \issue-109.fsx\, \issue-113.fsx\, \issue-121.fsx\, \issue-126.fsx\, \issue-129.fsx\, \issue-178.fsx\, \pr-110-parsing-MediaTypeHeader.fsx\, \prettyFsiIntegration.fsx\, \pxlClockFsiMessage.fsx\, \readme\_and\_index\_md.fsx\, \scratch.fsx\, \utf8StreamStuff.fsx\, \vscode\_restclient.fsx\, \builderPlayground.fsx\, \co-maintainer.fsx\, \debugBuildFiddle.fsx\, \discuss-119-Testing.fsx\, \giraffe-issue.fsx\, \issue-101.fsx\, \issue-103.fsx\, \issue-106-AllowFileNameMetadata.fsx\, \issue-109-HeaderFormatException.fsx\, \issue-113.fsx\, \issue-121.fsx\, \issue-126.fsx\, \issue-129.fsx\, \issue-178.fsx\, \pr-110-parsing-MediaTypeHeader.fsx\, \prettyFsiIntegration.fsx\, \pxlClockFsiMessage.fsx\, \readme\_and\_index\_md.fsx\, \scratch.fsx\, \utf8StreamStuff.fsx\, \vscode\_restclient.fsx\) that demonstrate various aspects of the FsHttp library, including header manipulation, timeout configuration, multipart forms, and JSON serialization. These scripts serve as interactive examples for users to understand and test different features of the library.
fiddle · high confidence
Behavioural changes
FsHttp compatibility examples for .NET 5 and 6
Added F\# script examples for .NET 5 and .NET 6 that demonstrate the behavior of the FsHttp library. The .NET 5 example highlights a known issue where version 8.0.0 of FsHttp causes the request to hang, while the .NET 6 example confirms that version 8.0.1 resolves the issue and works correctly.
_fiddle/dotnet\_fsi\_net5, fiddle/dotnet\_fsi\net6 · medium confidence
Major DSL and HTTP client refactoring
The FsHttp library has been refactored to introduce a new pipe-style Domain Specific Language (DSL) alongside the existing continuation-passing style, allowing users to construct HTTP requests using a more fluent, composable syntax. The internal architecture has been restructured with new modules for defaults, helpers, and domain extensions, and the HTTP client is now configured via a factory pattern that supports proxy settings, timeout, and SSL error strategies. Additionally, the library now supports automatic GZip response decompression, allows injecting a custom HttpClient instance, and provides improved JSON serialization options.
src/FsHttp · medium confidence
Refactored internal domain types and request context structure
The internal domain model for FsHttp has been restructured. New types such as Config, PrintHint, and Request are defined in the Domain module, replacing previous implementations. The request context hierarchy has been updated, introducing HeaderContext, BodyContext, and MultipartContext to manage headers, body content, and multipart data separately. This change alters the internal representation of HTTP requests and configuration, which may affect custom middleware or extensions that relied on the previous context types.
FsHttp · high confidence
Release FsHttp 15.0.3 with Apache 2.0 license
The project has been updated to version 15.0.3, which includes the removal of the PXL Clock promotional message. The repository license has been changed from MIT to Apache 2.0. Additionally, the build system has been standardized around the .NET SDK, introducing a new \build.fsx\ script and associated shell scripts (\build.sh\, \test.sh\, \publish.sh\) to manage build, test, and publish tasks, while also adding an \.editorconfig\ for code formatting.
(repo-wide) · high confidence
Test coverage
Added C\# unit tests for HTTP client operations; Added test helper utilities for HTTP server and request handling; Expanded test coverage for HTTP client features.
Dependencies
Upgrade to .NET 6 and update key dependencies
The project has been upgraded to target .NET 6 (net6.0) across all library and test projects. Key dependencies have been updated: NUnit has been upgraded from version 3.13.3 to 4.0.1, FsUnit from 5.6.1 to 6.0.1, and Microsoft.NET.Test.Sdk from 17.8.0 to 17.12.0. Additionally, the project now includes new integration packages for FSharp.Data (version 6.3.0) and Newtonsoft.Json (version 13.0.3), while FSharp.Core is explicitly pinned to version 5.0.2.
(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 47 → 49 (+1.6)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 74 → 74 (+0.0)
- Architecture 78 → 75 (-2.3)
- Maturity 57 → 59 (+1.8)
- Readiness 73 → 73 (+0.0)
- Security 26 → 29 (+2.5)
Resolved (18)
- Duplicated block (13 lines × 2) (src/FsHttp/Response.fs)
- Duplicated block (14 lines × 2) (src/FsHttp/Response.fs)
- Duplicated block (8 lines × 2) (src/FsHttp/Response.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)
- No ADRs found
- No exposed public API
- Off-boarding risk: anonymized user #1
- The README is a single banner with no FsHttp Studio installation or usage documentation and no syntax examples for either F# or C#. The FsHttp Studio extension is named in the outline but not shown. (README.md)
- XML-doc coverage: TestWebServer (src/TestWebServer/TestWebServer.csproj)
- redundant comment (src/TestWebServer/Startup.cs)
- redundant comment (src/TestWebServer/Startup.cs)
- redundant comment (src/TestWebServer/Startup.cs)
- redundant comment (src/TestWebServer/Startup.cs)
New (26)
- Documentation: no installation or build instructions (README.md)
- Duplicated block (10 lines × 2) (src/FsHttp.NewtonsoftJson/Response.fs)
- Duplicated block (14–15 lines × 2) (src/FsHttp.NewtonsoftJson/Response.fs)
- Duplicated block (45 lines × 2) (src/FsHttp.NewtonsoftJson/Response.fs)
- End-of-life runtime: .NET net6.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)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- Low XML-doc coverage: TestWebServer (src/TestWebServer/TestWebServer.csproj)
- …and 6 more
API surface
- Unchanged — 1 HTTP endpoints
Architecture
- Unchanged — 1 containers · 1 contexts · 0 edges
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/FsHttp 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 cfcd6c978728b227010c2d6cb4f440525e144bba — 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.