Skip to content
CAI
Software that uses CAICheck a score

krauthaufen/Adaptify

52.6

Adequate · 3 October 2026

6.9k

lines of production code

F#

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Adaptify is an F\# compiler tool and runtime library that enables adaptive programming by automatically generating code for mutable, state-managed data structures. It integrates directly into the MSBuild pipeline to analyze F\# types and produce domain-specific code, supporting a wide range of .NET versions from .NET Framework through .NET 10. The system provides core runtime primitives for handling adaptive values, lists, and unions, along with a CLI for local or server-based compilation.

How it got here

2019 — Modernization and compiler restructuring

7 changes.

The project underwent significant modernization by upgrading to .NET 8-10 and replacing the legacy FAKE build system with direct dotnet commands. The compiler infrastructure was refactored into modular components with new IPC and caching capabilities, while obsolete F\# compiler core logic and legacy stubs were removed. Concurrently, Adaptify.Core expanded with new attributes and foundational runtime types for adaptive value handling.

2020–2024 — MSBuild integration and .NET 9 support

4 changes.

This period focused on integrating Adaptify into the MSBuild pipeline via XML-based targets for automated code generation in F\# projects. It also expanded platform coverage by adding examples for .NET 9, .NET Framework, and C\# nested static classes to demonstrate adaptive data handling capabilities.

2025 — Core compiler implementation and .NET 10 support

5 changes.

This period focused on establishing the core Adaptify.Compiler module with initial type analysis, AST handling, and IPC-based compilation logic. It also involved updating the project structure and solution files to support .NET 10, alongside adding integration tests and a new local file generation mode to the CLI tool.

Features

Add .NET 9 example project and library model definitions

This change introduces new example projects for .NET 8 and .NET 9, alongside a shared library model (\Library.fs\, \Model2.fs\) that defines \ModelType\-annotated records and unions (such as \Thing\, \MyUnion\, and \Soup\) for use with the \Adaptify\ and \FSharp.Data.Adaptive\ libraries. The .NET 9 example program is updated to execute tests against these models, demonstrating adaptive data handling with \AdaptiveSoup\ and change readers, while the .NET 8 example retains a basic setup for unpersisting models. Additionally, the \paket.references\ file for the library example is simplified to depend only on \FSharp.Core\.

src/Examples/Library · high confidence

Added .NET Framework example project for Adaptify

A new example project targeting .NET Framework has been added to demonstrate the usage of the Adaptify library with F\#. This includes model definitions using the \[\<ModelType\>\] attribute, a program entry point showing unpersisting and updating of adaptive models, and necessary package references.

src/Examples/NetFramework · high confidence

Initial implementation of the Adaptify.Compiler module

This change introduces the core logic for the Adaptify compiler, including type analysis, AST representation, and project configuration parsing. It adds support for handling adaptive data structures (such as lists, hashmaps, and adaptive values) and defines how properties are treated (e.g., as primary keys, values, or lists). The module also includes a caching system for build artifacts and an IPC-based server for handling compilation requests and messages.

Adaptify.Compiler · high confidence

Introduce core adaptive value implementations and helper utilities

The \src/Adaptify.Core\ library now includes the foundational runtime types for adaptive programming, specifically \AdaptiveOption\ and \AdaptiveChoice\ (supporting 2- and 3-way discriminated unions) which expose a \Current\ member and handle state transitions via \ShallowEquality\ checks. Additionally, \AdaptiveValue\ provides the base class for computed adaptive values, while helper types like \ChangeableList\ (for arrays and lists) and \ChangeableValueCustomEquality\ enable mutable adaptive state with custom comparison logic. The package references have been updated to include \Aardvark.Build\ alongside \FSharp.Data.Adaptive\.

src/Adaptify.Core · high confidence

Introduce local file generation mode and update CLI usage

The adaptify tool now supports a new --local command-line flag that generates generated files (\*.g.fs) adjacent to the input source files rather than in a separate output directory. This change is accompanied by an updated usage message that documents the new flag alongside existing options like --force, --verbose, and --lenses, and includes a default launch configuration that exercises this new local generation mode.

src/adaptify · high confidence

New .NET 10 example project added

A new example project located at src/Examples/Net10 has been added to demonstrate support for .NET 10. This includes a new F\# model definition (Model.fs) utilizing the Adaptify library for adaptive data structures, a corresponding entry point (Program.fs), and an updated dependency reference file (paket.references) that now explicitly lists FSharp.Core.

src/Examples/Net10 · high confidence

Removals

Removal of F\# Compiler Core implementation

The \Compiler.fs\ file within \src/Adaptify.Compiler.Core\ has been deleted. This file contained the core logic for analyzing F\# types, handling attributes (such as \Adaptify.ModelTypeAttribute\), and defining AST structures for the compiler. Its removal indicates that this specific F\# compilation and analysis capability is no longer part of the product.

src/Adaptify.Compiler.Core · high confidence

Removed obsolete stub code and legacy dependency references

The obsolete \BuildTask.fs\ stub file (containing only a sample 'Hello' module) and the \paket.references\ file listing legacy dependencies (including \FSharp.Compiler.Service\ and \Microsoft.Build\ packages) have been removed from the \src/Adaptify.MSBuild.DotNet\ project. This cleanup eliminates unused code and outdated package references that are no longer required for the current MSBuild integration.

src/Adaptify.MSBuild.DotNet · high confidence

Behavioural changes

Added .NET 10 support and updated build infrastructure

The project now targets .NET 10, enforced by a new global.json file that specifies the SDK version as 10.0.0. The build system has been modernized by removing the legacy FAKE build script (build.fsx) and solution file (Adaptify.sln), replacing them with direct dotnet commands for tool and package restoration and building. A new pack.cmd script has been introduced to handle the packaging of the MSBuild tool and the dotnet tool using aardpack.

(repo-wide) · high confidence

Added C\# example demonstrating nested static class types

A new example file (CSharpClass.cs) was added to the LibraryCSharp project to demonstrate handling of types within nested static classes, specifically including a nested public class and a nested public struct. This addresses a temporary fix for type handling in nested static classes.

src/Examples/LibraryCSharp · medium confidence

Compiler refactored into modular components with new IPC and caching infrastructure

The Adaptify.Compiler project has been restructured from a monolithic Program.fs into distinct modules (CoreTypes, Process, Runner, Scope) to improve maintainability and performance. This change introduces a robust Inter-Process Communication (IPC) layer with file-based locking and TCP support, enabling more stable server-mode operation. It also implements a new caching mechanism that utilizes project hashes and file timestamps to avoid redundant work, and adds a 'local' mode that stores generated files in a user-specific local application data directory rather than the project output folder. Additionally, the Example project and its associated paket.references have been removed.

src/Adaptify.Compiler · high confidence

Introduce pure XML-based MSBuild integration for F\# projects

Adaptify now integrates with the MSBuild pipeline via a new \Adaptify.MSBuild.targets\ file, enabling automatic generation of domain types for F\# projects (\.fsproj\) during compilation. The tool passes configuration arguments via a JSON file to avoid command-line length limits and supports a new \LocalAdaptify\ option to control execution context. It runs before \CoreCompile\, updates the compile item group with generated files, and cleans up intermediate cache files during rebuilds.

src/Adaptify.MSBuild · high confidence

New attributes and unpersisted value support in Adaptify.Core

Adaptify.Core now includes new attributes to control how fields and properties are handled by the pre-compiler: PrimaryKeyAttribute marks a field as a primary key, while DefaultEqualsAttribute and CheapEqualsAttribute customize equality comparison logic. Additionally, the TreatAsAListAttribute allows specific fields to be treated as lists. The module also introduces Unpersist, providing a mechanism to define custom initialization and update logic for adaptive values, with built-in support for common collection types like aval, aset, alist, and amap.

Adaptify.Core · high confidence

Solution structure updated for .NET 10 and renamed compiler project

The project solution files have been reorganized to include support for .NET 10, adding a new Net10 example project alongside existing Net8 and Net9 examples. The solution also reflects the renaming of the core compiler project from Adaptify.Compiler.Core to Adaptify.Compiler and the CLI tool to adaptify, ensuring the build configuration correctly targets these updated project paths.

src · high confidence

Test coverage

Added integration tests for .NET 8, 9, 10, and .NET Framework support

Added new test files in src/Tests to verify the Adaptify tool's compatibility across multiple .NET versions. The new ToolTests.fs module includes tests for .NET 8, .NET 9, .NET 10, and .NET Framework, ensuring the tool correctly generates files for each target. Supporting utilities in Utilities.fs provide process execution helpers for running the tool against example projects.

src/Tests · high confidence

Dependencies

Upgrade to .NET 8, 9, and 10 with updated MSBuild and F\# dependencies

Adaptify now targets .NET 8, 9, and 10, replacing the previous .NET Core 2.2 and .NET Standard 2.0 constraints. The .NET tool and MSBuild integration have been updated to use Microsoft.Build 17.11 for .NET 8, 17.14 for .NET 9, and 18.0 for .NET 10, while FSharp.Data.Adaptive has been upgraded to version 1.2.26. The project structure has been reorganized to remove the old Adaptify.Compiler.Core project, and example projects have been updated to demonstrate compatibility with the new .NET versions.

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

Lenses

  • Code Health 90 → 90 (-0.1)
  • Architecture 96 → 100 (+3.8)
  • Maturity 34 → 34 (-0.0)
  • Readiness 58 → 58 (+0.0)
  • Security 75 → 70 (-5.1)

Resolved (3)

  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • Off-boarding risk: anonymized user #1

New (3)

  • Duplicated block (26 lines × 3) (src/Examples/Net10/Model.fs)
  • Duplicated block (83 lines × 2) (src/Examples/Net10/Program.fs)
  • Off-boarding risk: anonymized user #1

Architecture

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

krauthaufen/Adaptify 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 ca055e8080fe0149910b272408c3869ef0615f41 — 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.