Skip to content
CAI
Software that uses CAICheck a score

shayanhabibi/Partas.Solid

50.4

Adequate · 3 October 2026

17.1k

lines of production code

F#

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Partas.Solid is an F\# library and Fable compiler plugin that enables developers to write SolidJS applications using idiomatic F\# syntax. It transforms F\# code into native SolidJS JSX, providing comprehensive bindings for Solid 2.0 features such as reactivity primitives, control flow, and ARIA attributes. The system includes a build automation framework and an interactive workbench to facilitate plugin development and ensure correct code generation through extensive runtime and integration testing.

How it got here

2025 — Solid 2.0 migration and Fable plugin

9 changes.

The project established its foundational structure and initialized the Partas.Solid.FablePlugin to transform F\# bindings into native JSX. It upgraded dependencies to Solid.js 2.0 and .NET 8/9, introducing comprehensive ARIA, event, and polymorphism support while validating the new compiler plugin through extensive test suites.

2026 — Runtime testing and build automation

7 changes.

This period focused on establishing a robust F\# build automation pipeline and introducing a comprehensive runtime test suite for the Partas.Solid compiler. The work involved overhauling tests to align with Solid 2.0.0-rc.9, verifying DOM rendering, reactivity primitives, and integration patterns, while also adding an interactive workbench to streamline plugin development and debugging.

Features

Initial release of the Partas.Solid Fable plugin

This change introduces the Partas.Solid.FablePlugin, a new Fable compiler plugin that transforms F\# SolidJS bindings into native JSX. The plugin handles the compilation of tag builder computations, property setters, and getters into SolidJS-compatible JavaScript, including support for context providers, polymorphism, and Storybook generation.

Partas.Solid.FablePlugin · high confidence

Interactive workbench for plugin development and debugging

A new SageFs-based workbench has been added to the Partas.Solid.Workbench module, providing an interactive environment for developing and testing the Fable plugin. It keeps the F\# compiler warm for fast iteration, allows reloading the plugin DLL without restarting the session, and includes an AST printer to inspect the abstract syntax tree that the plugin receives, helping developers debug binding patterns and member matching.

Partas.Solid.Workbench · high confidence

Introduces F\# build automation and runtime test execution

Adds a new build system (Build/Program.fs) that automates project restoration, compilation, packaging, and publishing via Fake. It introduces a new 'runtime tests' stage that compiles F\# fixtures using Fable and executes them against solid-js in a jsdom environment using Vitest, alongside existing Expecto unit tests.

Build · high confidence

New Partas.Solid bindings and experimental features

This release introduces a comprehensive set of new bindings and capabilities for Partas.Solid. It adds full ARIA attribute support via the new \AriaAttributes.fs\ module and expands HTML event handling in \HtmlAttributes.fs\. New namespaces provide bindings for Solid-Meta (\SolidMetaBindings.fs\) and Solid-Start (\SolidStartBindings.fs\), including server-side functions and client mounting. The library now supports polymorphism for libraries like Kobalte through \PolymorphicSupport.fs\ and introduces experimental computation builders (effect, memo, children, etc.) in \Experimental.fs\. Additionally, it includes Storybook integration helpers in \Storybook.fs\ and a typed CSS style abstraction in \Style.fs\.

Partas.Solid · high confidence

Repository initialization and developer tooling setup

The repository has been initialized with a new solution structure (Partas.Solid.slnx), a FAKE-based build script (build.fsx), and an in-development SageFs workbench (workbench.fsx) for plugin iteration. The project now includes an .editorconfig for F\# style enforcement, a .cliffignore file, and a git-cliff configuration (cliff.toml) for automated release notes. A git submodule for the Solid 2.0 reference implementation (solid/) has been added, and the README has been updated to reflect the project's status as an opinionated fork of Oxpecker.Solid with aggressive AST transformation.

(repo-wide) · high confidence

Behavioural changes

Updated compiled test expectations for Solid 2.0 migration

The compiled test cases in this location have been updated to reflect the output of the Solid 2.0 migration. This includes new expected JavaScript outputs for attribute handling (such as \PartasImportAttr\ and \Pojo\ optimization), string interpolation transformations, and object expressions. Additionally, the test suite now covers the transformation of TanStack Table getter extensions, verifying correct compilation for features like column filtering, sorting, grouping, pagination, and row selection.

Partas.Solid.Tests.Plugin/Compiled · high confidence

Test coverage

Added Expecto-based test suite for the Solid plugin; Added Solid.js component test harness in ScratchTests; Added placeholder unit test and reorganized test project structure; Added runtime integration test suite for compiled Partas.Solid output; Added runtime test suite for DOM element rendering and behavior; Added runtime test suites for Solid primitives; Added test suite for Portal component behavior; Removed placeholder unit test; Updated test suite for Solid 2.0.0-rc.9 bindings.

Dependencies

Upgrade to Solid.js 2.0 and .NET 8/9/10 SDKs

The Partas.Solid library and its Fable plugin have been upgraded to target Solid.js 2.0.0-rc.9, bringing the framework bindings up to date with the latest Solid.js release. The project has also migrated its .NET target frameworks to .NET 8 and .NET 9 (with some tooling and workbench projects targeting .NET 10), and updated core F\# dependencies like Fable.Core to version 5.2.0 and Fable.AST to 5.0.0. This ensures compatibility with the new Solid.js runtime and modern .NET SDKs.

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

Lenses

  • Code Health 66 → 56 (-10.3)
  • Architecture 98 → 55 (-42.5)
  • Maturity 54 → 58 (+4.2)
  • Readiness 49 → 41 (-7.8)
  • Security 69 → 69 (+0.0)
  • Performance 100 (new)

Resolved (17)

  • Documentation: no installation or build instructions (README.md)
  • Duplicated block (10 lines × 2) (Partas.Solid/Svg.fs)
  • Duplicated block (10 lines × 2) (Partas.Solid/Svg.fs)
  • Duplicated block (13 lines × 3) (Partas.Solid/Tags.fs)
  • Duplicated block (13 lines × 7) (Partas.Solid/Tags.fs)
  • Duplicated block (14 lines × 5) (Partas.Solid/Tags.fs)
  • Duplicated block (16 lines × 4) (Partas.Solid/Tags.fs)
  • Duplicated block (17 lines × 2) (Partas.Solid/HtmlAttributes.fs)
  • Duplicated block (22 lines × 2) (Partas.Solid/SolidRouterBindings.fs)
  • Duplicated block (6 lines × 2) (Partas.Solid.FablePlugin/Plugin.fs)
  • Duplicated block (8 lines × 2) (Partas.Solid/SolidBindings.fs)
  • Further orphaned files (smaller)
  • Hotspot: Partas.Solid.FablePlugin/Storybook.fs (Partas.Solid.FablePlugin/Storybook.fs)
  • Orphaned knowledge (Partas.Solid.FablePlugin/Storybook.fs)
  • Prerelease dependency: Fable.AST
  • Prerelease dependency: Fable.Core
  • Workflow token permissions not restricted

New (80)

  • AST.|BuilderCollector| (cyclomatic 28) (Partas.Solid.FablePlugin/Plugin.fs)
  • AstPrinter.expr (cognitive 94) (Workbench/AstPrinter.fs)
  • AstPrinter.expr (cyclomatic 106) (Workbench/AstPrinter.fs)
  • AstPrinter.memberKind (cognitive 22) (Workbench/AstPrinter.fs)
  • AstPrinter.typ (cognitive 16) (Workbench/AstPrinter.fs)
  • AstPrinter.typ (cyclomatic 31) (Workbench/AstPrinter.fs)
  • AttributesAndProperties.|AttributeExpression|_| (cognitive 19) (Partas.Solid.FablePlugin/Plugin.fs)
  • Banned license: Partas.GitNet
  • Coverage not measured — JavaScript/TypeScript suite
  • Documentation: no installation or build instructions (docs/site/content/index.md)
  • Documentation: no project overview (docs/site/content/index.md)
  • Documentation: no usage examples (docs/site/content/index.md)
  • Duplicated block (10 lines × 2) (Partas.Solid/HtmlAttributes.fs)
  • Duplicated block (10 lines × 2) (Partas.Solid/HtmlAttributes.fs)
  • Duplicated block (10 lines × 2) (Partas.Solid/HtmlAttributes.fs)
  • Duplicated block (10 lines × 2) (Partas.Solid/HtmlAttributes.fs)
  • Duplicated block (10 lines × 2) (Partas.Solid/HtmlAttributes.fs)
  • Duplicated block (10 lines × 2) (Partas.Solid/HtmlAttributes.fs)
  • Duplicated block (10 lines × 2) (Partas.Solid/Svg.fs)
  • Duplicated block (10 lines × 3) (Partas.Solid/HtmlAttributes.fs)
  • …and 60 more

Changes since last survey

  • 36 commits — 30 feature/other, 6 fixes

By area

  • docs/site — 11 commits
  • (root) — 9 commits
  • (repo) — 4 commits
  • Partas.Solid.Tests.Runtime/Integration — 3 commits
  • Partas.Solid.Tests.Plugin/Compiled — 2 commits
  • docs/RESEARCH-async-reactive-graph-dotnet.md — 2 commits
  • docs/RESEARCH-loony-synchronization.md — 2 commits
  • .github/workflows — 1 commit
  • Partas.Solid.FablePlugin/Plugin.fs — 1 commit
  • Workbench/AstPrinter.fs — 1 commit

Notable commits

  • fix: fix(docs): map the committed feed under the key the live examples restore with
  • fix: fix(docs): pin the landing counter's animation ranges so rapid clicks reset
  • fix: fix(docs): reference FSharp.Core 11 explicitly so the site runs on the .NET 10 SDK
  • fix: fix(docs): write :::details summaries without title=
  • fix: fix(plugin): close the known runtime bugs tracked by it.fails specs
  • fix: fix(plugin): only unroll toArray/toList over a delayed sequence
  • change: Merge pull request #46 from shayanhabibi/solid2rc
  • change: Merge pull request #47 from shayanhabibi/solid2rc
  • change: Merge pull request #48 from shayanhabibi/solid2rc
  • change: build: add a docs command that builds or watches the Nacara site
  • change: chore(build): run test projects sequentially in build.fsx
  • change: chore: add AGENTS.md and ignore local agent config
  • change: chore: pin solid submodule to solid-js@2.0.0-rc.9
  • change: chore: remove dom-expressions submodule
  • change: ci: build docs/site with Nacara and publish it to GitHub Pages
  • change: docs: add live examples that import npm packages, and redesign the landing page
  • change: docs: assess Loony against the reactive graph's synchronisation seam
  • change: docs: label 3.0 as unreleased in the version switcher
  • change: docs: make AGENTS.md the single agent guide, imported by CLAUDE.md
  • change: docs: measure the graph boundary, closing suspension research D.1
  • …and 16 more

Architecture

  • Containers 0 added · 0 removed · contexts 8 added · 0 removed · edges 4 added · 0 removed

Added bounded contexts (8)

  • Partas.Solid
  • Partas.Solid.FablePlugin
  • Partas.Solid.Tests.Plugin
  • Partas.Solid.Tests.Plugin.Compiled
  • Partas.Solid.Tests.Runtime.Dom
  • Partas.Solid.Tests.Runtime.Integration
  • Partas.Solid.Tests.Runtime.Primitives
  • Partas.Solid.Workbench

Added dependency edges (4)

  • Partas.Solid.Tests.Plugin.Compiled → Partas.Solid
  • Partas.Solid.Tests.Runtime.Dom → Partas.Solid
  • Partas.Solid.Tests.Runtime.Integration → Partas.Solid
  • Partas.Solid.Tests.Runtime.Primitives → Partas.Solid

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

shayanhabibi/Partas.Solid 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 0e731293fa9f7deab1b5b61e46ea041b884391fc — 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.