Zaid-Ajaj/Fable.Remoting
53.1
Adequate · 24 September 2026
10.8k
lines of production code
F#
with JavaScript
5
measurements over time
What this system is
Fable.Remoting is a cross-platform remoting library that enables type-safe communication between F\#-compiled JavaScript clients and .NET server backends. It provides a unified client and server architecture that supports multiple web frameworks, including ASP.NET Core, Giraffe, Suave, and Falco, as well as serverless environments like AWS Lambda and Azure Functions. The system handles data serialization via JSON and MsgPack, offering both browser-based and .NET-native client implementations with support for binary data and multipart forms.
How it got here
2017 — Adapter expansion and test coverage
16 changes.
The project expanded its ecosystem by introducing new adapters for Giraffe and Suave, alongside a dedicated JSON serialization module. This period also focused on comprehensive test coverage, adding unit and integration tests for all server adapters and establishing a headless browser-based UI test suite.
2018–2020 — Dotnet client and MsgPack serialization
8 changes.
This period focused on expanding the Fable.Remoting ecosystem by introducing a .NET client for API interaction and adding MsgPack serialization support for Fable. The work included building the DotnetClient package, creating corresponding integration tests, and establishing performance benchmarks to compare serialization strategies.
2021–2025 — Multi-platform adapter expansion
7 changes.
This period focused on expanding the library's reach by introducing new adapters for Azure Functions Isolated Worker, AWS Lambda, and the Falco web framework. The team also established a comprehensive automated build and test orchestration system to manage these diverse components and their respective integration tests.
Features
Add AWS Lambda adapter for API Gateway and HTTP API
Added a new adapter for AWS Lambda, supporting API Gateway proxy integrations for REST API, WebSocket API, and HTTP API formats. The implementation includes handlers for standard HTTP requests, error handling, and documentation endpoints, enabling F\# Remoting applications to run on AWS Lambda.
Fable.Remoting.AwsLambda · high confidence
Add Azure Functions (Isolated) worker adapter
Introduces a new adapter for the Azure Functions Isolated Worker model, enabling the library to handle HTTP requests and responses within that environment. This includes the core adapter implementation and the necessary package references for the Azure Functions Worker SDK and HTTP extensions.
Fable.Remoting.AzureFunctions.Worker · high confidence
Add Fable adapter for the Falco framework
Users can now integrate with the Falco web framework via a new adapter in the Fable.Remoting.Falco module. This adds support for building HTTP endpoints and handling requests using Falco's pipeline, enabling F\# Web applications to leverage Falco's routing and middleware capabilities alongside Remoting's proxy generation.
Fable.Remoting.Falco · high confidence
Add MsgPack serialization support for Fable
The Fable.Remoting.MsgPack library now includes a complete MsgPack serialization implementation for Fable, enabling F\#-compiled JavaScript clients to serialize and deserialize MsgPack data. This new feature introduces dedicated modules (Format, Read, Write, TypeShape, and TypeShapeUtils) that handle MsgPack encoding/decoding for basic types, collections, and F\#-specific types like discriminated unions and records. This allows Fable-based frontends to communicate with backends using MsgPack, previously a .NET-only capability.
Fable.Remoting.MsgPack · high confidence
Add UI-based integration tests using PuppeteerSharp
A new UITests project has been added to the repository, providing end-to-end integration tests that run in a headless Chromium browser via PuppeteerSharp. The test runner starts a .NET web server hosting the Remoting API and navigates to the test page to execute and report results. This enables verifying the full client-server interaction, including complex scenarios like HttpOnly cookies and authorization headers, in a real browser environment rather than just unit or server-side integration tests.
UITests · high confidence
Add serialization benchmarks for JSON and MsgPack
A new benchmarking project has been introduced to evaluate the performance of serialization and deserialization for various data structures, including simple records, arrays of floats, recursive records, and maps. The benchmarks compare the output of Fable.Remoting's JSON serialization against MsgPack serialization, including both standard library and manual implementations, allowing users to assess the performance characteristics of different serialization strategies.
Fable.Remoting.Benchmarks · high confidence
Initial documentation structure and site configuration
The documentation site is now structured with a README, a SUMMARY navigation tree, and configuration files (book.json, publish.js) that define the site's layout, plugins, and publishing process. This establishes the foundational organization for all subsequent documentation pages.
documentation · medium confidence
Initial project scaffolding and CI configuration
The repository was initialized with the core project structure, including the \Fable.Remoting.sln\ solution file defining the library and test projects, alongside essential configuration files such as \.gitattributes\, \.gitignore\, \Nuget.Config\, and \README.md\. Additionally, the entry includes the \appveyor.yml\ and build scripts (\build.cmd\, \build.sh\) that configure the continuous integration environment to use .NET SDK 10.0.100 and Node.js 20.5.1.
(repo-wide) · high confidence
Introduce Fable.Remoting.AspNetCore middleware
Adds a new AspNetCore middleware for Fable.Remoting, enabling server-side handling of Remoting requests within an ASP.NET Core pipeline. The implementation includes dependency references to FSharp.Core, Microsoft.AspNetCore.Http.Abstractions, and Microsoft.IO.RecyclableMemoryStream, and exposes an extension method to register the remoting handler.
Fable.Remoting.AspNetCore · high confidence
Introduce Fable.Remoting.Client library with binary file handling and multipart support
The Fable.Remoting.Client library is introduced, providing a new client-side HTTP proxy for F\# applications. The library adds support for handling binary data in the browser, including reading files as byte arrays, data URLs, and text. It also introduces a \withMultipartOptimization\ configuration option to efficiently send top-level byte array parameters using \multipart/form-data\. The client now supports custom headers, base URLs, authorization headers, and credentials for CORS scenarios.
Fable.Remoting.Client · high confidence
Introduce Fable.Remoting.DotnetClient with HTTP client and proxy generation
The Fable.Remoting.DotnetClient package is introduced, providing a .NET client for Remoting APIs. It includes an HTTP module for handling POST requests and binary responses, a patterns module for processing quotation expressions, and a proxy module that generates client-side API wrappers. The implementation supports multipart requests, binary serialization, and custom HTTP clients, replacing the previous reflection-based approach with a more robust, type-safe proxy generation system.
Fable.Remoting.DotnetClient · high confidence
Introduce Fable.Remoting.Giraffe adapter for .NET 8.0
Adds a new Giraffe HTTP adapter for Fable.Remoting, enabling Remoting clients to communicate with servers built on the Giraffe web framework. The implementation targets .NET 8.0 and integrates with Microsoft.AspNetCore.Http to handle request routing, JSON serialization, and error handling. Dependencies include Giraffe and Microsoft.IO.RecyclableMemoryStream.
Fable.Remoting.Giraffe · high confidence
Introduce Fable.Remoting.Suave adapter
Adds the Fable.Remoting.Suave adapter, enabling F\# clients to communicate with Suave-based servers. The new module provides utilities for serializing responses to JSON or binary formats, handling HTTP status codes, and routing requests through a proxy. It also supports serving embedded documentation and schema endpoints for the API.
Fable.Remoting.Suave · high confidence
Introduce automated build and test orchestration for Fable.Remoting components
The build system now includes a comprehensive automation script (build/Program.fs) that manages the build, test, and publish workflows for all Fable.Remoting libraries, including Client, Server, Suave, Giraffe, Falco, AspNetCore, MsgPack, AzureFunctionsWorker, and AwsLambda. This script defines specific targets to restore, build, and run integration tests for each component, as well as downstream publish targets that handle the full release pipeline for the respective packages.
build · high confidence
New server-side modules for diagnostics, documentation, and request proxying
The Fable.Remoting.Server project introduces several new internal modules to support the server's core functionality. Diagnostics.fs adds a logging module that simplifies type names and logs JSON input, output, and deserialization phases. Documentation.fs and DocsApp.fs provide the infrastructure for automatic API documentation, including a type-safe builder for route metadata and an embedded HTML/JS application for the docs UI. Patterns.fs and Proxy.fs implement the request proxying logic, handling JSON and multipart form data, and using TypeShape to dynamically invoke server methods. Remoting.fs exposes the fluent API for configuring the remoting pipeline (routes, error handling, serialization). Types.fs defines the core data structures like RouteInfo, InvocationProps, and RemotingOptions. ThreadSafeCell.fs provides a thread-safe async cell for caching expensive computations. These files collectively enable the server to route requests, serialize/deserialize data, and generate documentation.
Fable.Remoting.Server · high confidence
Architecture
Introduce Fable.Remoting.Json as a dedicated project for JSON serialization
The JSON serialization logic has been extracted into a new, separate project named Fable.Remoting.Json. This change isolates the FableConverter and related reflection utilities from the main remoting library, providing a dedicated package for handling JSON serialization and deserialization of F\# types such as unions, maps, and records.
Fable.Remoting.Json · high confidence
Behavioural changes
Customized scrollbar styling for the documentation site
The documentation site now features a custom scrollbar style. The scrollbar width is set to 6px, with a light gray track and a darker gray thumb that darkens on hover, providing a more polished visual experience for users navigating the documentation.
documentation/styles · medium confidence
Test coverage
Add Giraffe server implementation for integration tests; Add client-side integration tests for Fable.Remoting; Add tests for the Fable Remoting Falco adapter; Add unit tests for JSON serialization and deserialization; Added DotnetClient integration tests; Added Expecto-based test suite for server dynamic invocation; Added MsgPack serialization tests for Fable; Added Suave server integration test project; Added initial test suite for the Fable.Remoting.Giraffe adapter; Added server implementation for integration tests; Added tests for the Azure Functions (Isolated) worker; Added unit tests for the Suave adapter; Restored the test runner HTML page.
Dependencies
Update .NET target frameworks to .NET 8 LTS and .NET 9 for tests
The project's .NET project files have been updated to target .NET 8 LTS for the main libraries and adapters (including AspNetCore, Giraffe, Suave, and the core server/client components). Additionally, test projects and benchmarks have been updated to target .NET 9. This ensures compatibility with the latest long-term support .NET releases while maintaining support for the previous LTS version.
(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 59 → 53 (-5.8)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 87 → 80 (-6.8)
- Architecture 100 → 99 (-1.2)
- Maturity 56 → 57 (+0.7)
- Readiness 46 → 46 (-0.1)
- Security 80 → 49 (-31.2)
Resolved (87)
- Critical CVE: [GHSA redacted] (documentation/package-lock.json)
- Critical CVE: [GHSA redacted] (documentation/package-lock.json)
- Critical CVE: [GHSA redacted] (documentation/yarn.lock)
- Critical CVE: [GHSA redacted] (documentation/yarn.lock)
- Critical CVE: [GHSA redacted] (documentation/package-lock.json)
- Critical CVE: [GHSA redacted] (documentation/package-lock.json)
- Critical CVE: [GHSA redacted] (documentation/package-lock.json)
- Critical CVE: [GHSA redacted] (documentation/package-lock.json)
- Critical CVE: [GHSA redacted] (documentation/yarn.lock)
- Critical CVE: [GHSA redacted] (documentation/package-lock.json)
- Critical CVE: [GHSA redacted] (documentation/package-lock.json)
- Critical CVE: [GHSA redacted] (documentation/yarn.lock)
- Critical CVE: [GHSA redacted] (documentation/yarn.lock)
- Critical CVE: [GHSA redacted] (documentation/package-lock.json)
- Critical CVE: [GHSA redacted] (documentation/package-lock.json)
- Critical CVE: [GHSA redacted] (documentation/package-lock.json)
- Critical CVE: [GHSA redacted] (ClientTests/package-lock.json)
- Critical CVE: [GHSA redacted] (ClientTests/package-lock.json)
- Critical CVE: [GHSA redacted] (documentation/package-lock.json)
- Critical CVE: [GHSA redacted] (documentation/package-lock.json)
- …and 67 more
New (184)
- Critical CVE: [GHSA redacted] (documentation/package-lock.json)
- Critical CVE: [GHSA redacted] (documentation/package-lock.json)
- Critical CVE: [GHSA redacted] (documentation/yarn.lock)
- Critical CVE: [GHSA redacted] (documentation/yarn.lock)
- Critical CVE: [GHSA redacted] (documentation/package-lock.json)
- Critical CVE: [GHSA redacted] (documentation/package-lock.json)
- Critical CVE: [GHSA redacted] (documentation/package-lock.json)
- Critical CVE: [GHSA redacted] (documentation/package-lock.json)
- Critical CVE: [GHSA redacted] (documentation/yarn.lock)
- Critical CVE: [GHSA redacted] (documentation/package-lock.json)
- Critical CVE: [GHSA redacted] (documentation/package-lock.json)
- Critical CVE: [GHSA redacted] (documentation/yarn.lock)
- Critical CVE: [GHSA redacted] (documentation/yarn.lock)
- Critical CVE: [GHSA redacted] (documentation/package-lock.json)
- Critical CVE: [GHSA redacted] (documentation/package-lock.json)
- Critical CVE: [GHSA redacted] (documentation/package-lock.json)
- Critical CVE: [GHSA redacted] (documentation/package-lock.json)
- Critical CVE: [GHSA redacted] (documentation/package-lock.json)
- Critical CVE: [GHSA redacted] (documentation/package-lock.json)
- Critical CVE: [GHSA redacted] (documentation/package-lock.json)
- …and 164 more
Architecture
- Containers 0 added · 0 removed · contexts 6 added · 0 removed · edges 11 added · 0 removed
Added bounded contexts (6)
- Fable.Remoting.Benchmarks
- Fable.Remoting.Client
- Fable.Remoting.DotnetClient
- Fable.Remoting.Falco.Tests
- Fable.Remoting.Giraffe.Tests
- Fable.Remoting.Json
Added dependency edges (11)
- Fable.Remoting.Benchmarks → Fable.Remoting.Json
- Fable.Remoting.DotnetClient → Fable.Remoting.Json
- Fable.Remoting.Falco.Tests → Fable.Remoting.DotnetClient
- Fable.Remoting.Giraffe.Tests → Fable.Remoting.DotnetClient
- Fable.Remoting.Giraffe.Tests → Fable.Remoting.Json
- Fable.Remoting.Giraffe.Tests → Fable.Remoting.Server (coupling)
- Fable.Remoting.Json.Tests → Fable.Remoting.Json
- Fable.Remoting.Server → Fable.Remoting.MsgPack
- Fable.Remoting.Server.Tests → Fable.Remoting.Json
- Fable.Remoting.Server.Tests → Fable.Remoting.Server
- Fable.Remoting.Suave.Tests → Fable.Remoting.Server (coupling)
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
Zaid-Ajaj/Fable.Remoting 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 a60eff3ff8d5b688aaf01c999072479e4f8094a1 — 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.