Skip to content
CAI
Software that uses CAICheck a score

fable-compiler/vite-plugin-fable

61.3

Adequate · 3 October 2026

3.5k

lines of production code

F#

with TypeScript

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a F\# to JavaScript compiler toolchain, centered around a Vite plugin and a background F\# daemon, designed to integrate F\# code into modern web development workflows. It handles background compilation, hot module replacement for React components, and strict configuration validation to ensure reliable builds. The architecture emphasizes developer experience through design-time caching, debug interfaces, and automated release pipelines.

Features

Added .NET 8 F\# development container configuration

Developers can now use a pre-configured dev container environment to work on the project. The setup uses the .NET 8 SDK image and installs VS Code extensions for F\# (Ionide) and C\#. It includes features for common utilities, Git, GitHub CLI, .NET, Bun, Node.js 22, and PowerShell. An initialization script runs on container creation to restore .NET tools and packages, and install JavaScript dependencies via Bun, with port 4000 forwarded for local access.

.devcontainer · high confidence

Automated changelog-driven release pipeline with OIDC publishing

Added scripts to automate the release process for the vite-plugin-fable package. The system reads the latest dated version from CHANGELOG.md, checks if it is already published on npm, and if not, dispatches a GitHub Actions workflow. This workflow publishes the package to npm using trusted publishing (OIDC) with provenance enabled and creates a corresponding GitHub release, ensuring the release is tied to the specific commit that generated the changelog entry.

scripts · high confidence

Sample project now supports React components with Hot Module Replacement

The sample project has been updated to demonstrate a modern F\# + React development workflow. It now includes a new \Component.fs\ file that renders a React component using the Fable React bindings, replacing the previous simple DOM manipulation approach. The Vite configuration has been enhanced to integrate \vite-plugin-fable\ for F\# compilation and \@vitejs/plugin-react\ configured to include \.fs\ files, enabling Fast Refresh (Hot Module Replacement) for F\#-written React components. Additionally, the project now uses Bun as the runtime, includes a \bunfig.toml\ for configuration, and adds development tooling like \@vitejs/devtools\ and \vite-plugin-inspect\ to aid in debugging and inspection of the build pipeline.

sample-project · high confidence

Behavioural changes

Daemon now ships prebuilt and exposes a debug interface with design-time build caching

The Fable.Daemon is now distributed as a precompiled binary rather than being built on install, and includes a new debug server (Debug.fs) that exposes a WebSocket endpoint and an HTML debug tool (debug/index.html) for monitoring daemon state and logs. Additionally, the daemon introduces a robust design-time build cache (Caching.fs, ProjectCracking.fs) that validates cache integrity against file hashes, compiler versions, and project options to avoid unnecessary MSBuild invocations.

packages/vite-plugin-fable/Fable.Daemon · high confidence

Fable.Daemon redesign with caching, debug endpoints, and modernized toolchain

The Fable.Daemon has been significantly refactored to improve build performance and developer experience. It now implements a design-time build cache (serialized via Protocol Buffers) to avoid redundant MSBuild evaluations, and introduces a debug web server with WebSocket logging and JSON-RPC endpoints for inspecting project state and diagnostics. The daemon's internal architecture has been modernized to use System.Text.Json for serialization, and the project has been upgraded to the .NET 10 SDK, Fable 5.14, and Vite 8. Additionally, the legacy 'CoolCatCracking' module has been removed in favor of the standard Fable.Compiler.ProjectCracker.

Fable.Daemon · high confidence

Introduce Fable daemon for background compilation and improved build reliability

The Vite plugin now uses a prebuilt F\# daemon process to handle compilation, replacing the previous inline approach. This change ensures that F\# compilation errors are reported as build failures rather than silent successes, and diagnostics from third-party packages in \fable\_modules\ are hidden by default to reduce noise. The plugin also validates configuration options strictly, preventing silent failures from typos, and supports a new \temporal\ option to compile .NET date/time types to the JavaScript Temporal API. Additionally, the HMR pipeline has been migrated to Vite's \hotUpdate\ hook, and the plugin now explicitly handles JSX and Fast Refresh handoffs.

packages/vite-plugin-fable/src · high confidence

Modernized toolchain and repository structure

The project has been modernized to target .NET 10 and Vite 8, with the plugin source rewritten in TypeScript and the repository converted to a Bun workspace. The F\# daemon is now shipped prebuilt, eliminating the need for a post-install build step, and the build system now uses oxfmt and oxlint for formatting and linting. Additionally, the repository now includes an Apache-2.0 license and standardized line endings for source files.

(repo-wide) · high confidence

Vite plugin converted to TypeScript with strict mode and new tooling

The Fable Vite plugin source has been migrated from F\# to TypeScript, enabling strict type checking and adding dedicated TypeScript configuration files for the main source, tests, and documentation scripts. This change introduces a scratch script for testing project cracking logic independently and establishes the build infrastructure for the new language target, ensuring type safety and better tooling support for the plugin's core functionality.

packages/vite-plugin-fable · high confidence

Test coverage

Added comprehensive test suite for the Vite plugin; Added integration tests for the Fable Daemon.

Dependencies

Upgrade to .NET 10, Vite 8, and Fable 5.16.2 with centralized dependency management

The project has modernized its toolchain by upgrading the .NET target framework from .NET 8 to .NET 10, updating the Fable compiler to version 5.16.2, and requiring Vite 8. To streamline maintenance, the repository now uses centralized package version management via \Directory.Packages.props\ for .NET packages and a \catalog\ in the root \package.json\ for npm dependencies. This change also introduces a prebuilt Fable Daemon binary, replacing the previous on-install build process, and updates the sample project to use React 19 and the new \@fable-org/fable-library-js\ package.

(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 61 → 61 (+0.3)
  • Rubric changed (rubric-2026.09.15 → rubric-2026.10.1) — scores are not directly comparable.

Lenses

  • Code Health 84 → 83 (-1.1)
  • Architecture 97 → 99 (+1.7)
  • Maturity 73 → 71 (-2.1)
  • Readiness 68 → 69 (+0.5)
  • Security 84 → 84 (+0.0)
  • Accessibility 46 → 46 (+0.0)
  • Performance 100 (new)

Resolved (4)

  • Duplicated block (11 lines × 2) (packages/vite-plugin-fable/Fable.Daemon/Caching.fs)
  • Off-boarding risk: anonymized user #1
  • Outdated: Microsoft.NET.Test.Sdk
  • Outdated: protobuf-net

New (7)

  • Duplicated block (11 lines × 2) (packages/vite-plugin-fable/Fable.Daemon/Caching.fs)
  • Hotspot: packages/vite-plugin-fable/src/options.ts (packages/vite-plugin-fable/src/options.ts)
  • Off-boarding risk: anonymized user #1
  • Outdated: Fable.Core
  • Outdated: NUnit
  • options.resolveOptions (cognitive 35) (packages/vite-plugin-fable/src/options.ts)
  • options.resolveOptions (cyclomatic 35) (packages/vite-plugin-fable/src/options.ts)

Changes since last survey

  • 1 commits — 1 feature/other, 0 fixes

By area

  • (root) — 1 commit

Notable commits

  • change: Update Fable.Compiler to 5.16.2 and fable-library-js to 2.7.1 (#73)

Architecture

  • Unchanged — 0 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

fable-compiler/vite-plugin-fable 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 3 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 4ed8a1234c7e7c11769b870187ba31c2f88f9261 — the exact code this score is about.
  • Scored under rubric-2026.10.1 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-4f4226d619ea.