Skip to content
CAI
Software that uses CAICheck a score

fable-compiler/fable-react

39.8

Weak · 24 September 2026

3.6k

lines of production code

F#

primary language

5

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

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.