fable-compiler/fable-react
39.8
Weak · 24 September 2026
3.6k
lines of production code
F#
primary language
5
measurements over time
What this system is
This system is a F\# library and tooling ecosystem for building React applications, specifically designed to support server-side rendering and modern .NET development practices. It provides Fable bindings for React 18, including DOM and server-side rendering APIs, alongside a FunctionComponent abstraction that supports hooks, lazy loading, and performance optimizations. The repository also includes a complete SSR sample application and benchmarking tools to demonstrate and measure rendering performance.
Features
Add React 18 DOM and Client APIs for F\#
New type definitions for React 18 are now available, exposing the ReactDOM, ReactDOMClient (createRoot, hydrateRoot), and ReactDOMServer (renderToString, renderToStaticMarkup) APIs. This enables Fable developers to utilize React 18 features such as concurrent rendering and server-side rendering directly in F\# code.
src/Fable.ReactDom.Types · high confidence
Added SSR Sample application with server-side rendering and benchmarking tools
The SSRSample project has been introduced, providing a complete server-side rendering (SSR) demonstration using Fable, Elmish, and Giraffe. The sample includes a shared model and view layer, a .NET server that renders the initial HTML, and a client-side Elmish application for interactivity. Additionally, the change adds benchmarking scripts (dotnet.fs, node.js, Bench.fs) and build automation (FAKE, Paket) to measure rendering performance across different environments.
SSRSample · high confidence
Introduce FunctionComponent with caching, memoization, and lazy loading
The library now provides a \FunctionComponent\ type that supports React hooks, lazy loading via \FunctionComponent.Lazy\, and performance optimization through \React.memo\ with a custom \memoizeWith\ comparison function. The implementation includes a render function cache that uses the source file, line number, and generic type name as keys to prevent recreating components, and it supports Hot Module Replacement (HMR) by clearing the cache during hot reloads.
src/Fable.React · high confidence
Architecture
Repository restructured with new build and configuration files
The repository has been restructured to support modern .NET build practices and improved developer experience. A new \Directory.Build.props\ file standardizes NuGet metadata, source link, and FSharp.Core versioning across all projects. A \build.fsx\ script and \global.json\ (targeting .NET SDK 9.0.200) have been added to streamline the build and publish process. Additionally, a \.gitpod.yml\ configuration and VS Code extensions have been introduced to enable immediate cloud-based development in Gitpod, while \.gitignore\ and \Settings.FSharpLint\ have been updated to reflect the new project structure.
(repo-wide) · high confidence
Behavioural changes
Upgrade to F\# 9.0.100 and support F\# nullness
The Fable.React.Types package has been upgraded to FSharp.Core 9.0.100, enabling support for F\# nullness. As a result, the \createElement\ function now accepts \objnull\ for props instead of \obj\, and the library is compiled with nullable reference types enabled.
src/Fable.React.Types · high confidence
Dependencies
Add .NET project files and dependency manifests for the SSR sample and Fable.React packages
This change introduces the build and dependency configuration files for the SSR sample (dotnet.fsproj, Client.fsproj, Server.fsproj, Shared.fsproj, paket.dependencies, paket.lock) and the Fable.React, Fable.React.Types, and Fable.ReactDom.Types packages (fsproj files). These files define the .NET target frameworks, project references, and NuGet/npm dependencies required to build and run the sample application and the associated Fable.React libraries.
(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 41 → 40 (-0.7)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 82 → 87 (+4.5)
- Architecture 100 → 99 (-1.1)
- Maturity 22 → 22 (+0.0)
- Readiness 23 → 23 (+0.0)
- Security 100 → 85 (-15.0)
Resolved (6)
- Dependency hygiene not measured — no packages were read
- FileTooLong: Fable.React/Fable.ReactServer.fs (src/Fable.React/Fable.ReactServer.fs)
- No exposed public API
- Scanner failed to run — not a clean result
- complexity unreadable for .fs — churn × complexity hotspots could not be measured
- dormant codebase — no living knowledge left to concentrate
New (5)
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- End-of-life runtime: .NET netcoreapp2.0
- End-of-life runtime: .NET netcoreapp2.1
- No ADRs found
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
fable-compiler/fable-react 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 b3dc782001c6db4d24c526ff401a99ab571f1d8d — 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.