fable-compiler/vite-plugin-fable
61.3
Adequate · 3 October 2026
3.5k
lines of production code
F#
with TypeScript
2
measurements over time
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.