fslaborg/flips
61.0
Adequate · 24 September 2026
4.1k
lines of production code
F#
primary language
2
measurements over time
What this system is
Flips is a functional-first F\# library designed for modeling and solving Linear Programming (LP) and Mixed-Integer Programming (MIP) problems. It provides a domain-specific language for defining optimization models, including decision variables, constraints, and objectives, alongside utilities for multi-dimensional data indexing and type-safe physical quantities. The system interfaces with various open-source and commercial solvers, such as Google OR-Tools, Gurobi, and IBM CPLEX, to compute solutions for diverse scenarios ranging from basic algebra to complex logistics.
Features
Initial release of Flips F\# Linear Programming System
Introduces Flips, a functional-first F\# library for modeling and solving Linear Programming (LP) and Mixed-Integer Programming (MIP) problems. The release includes the core library, test suite, and example projects, built with .NET 8 and FAKE. It supports open-source solvers (CBC, Google GLOP) and commercial solvers (Gurobi, IBM CPLEX) via the OPTANO library, and provides utilities for pretty-printing expressions and exporting LP/MPS files.
(repo-wide) · high confidence
Initial release of Flips.Examples with diverse optimization demos and CSV export
This change introduces the Flips.Examples project, providing a comprehensive suite of sample models demonstrating the Flips library's capabilities. The examples cover basic linear programming, binary programming, multi-objective optimization, and complex logistics scenarios like coffee roasting and food truck distribution. Key features showcased include the use of DecisionBuilder and ConstraintBuilder for concise model definition, SliceMap for efficient multi-dimensional indexing, and Units of Measure for type-safe physical quantities. Additionally, a new CsvExport utility has been added to allow users to easily export decision variable results to TSV files, and the main Program.fs demonstrates how to configure the solver to write LP and MPS files for debugging.
Flips.Examples · high confidence
Initial release of the Flips optimization modeling library
This change introduces the Flips library, providing a domain-specific language for defining linear optimization models in F\#. It includes core modeling constructs such as Decision (Boolean, Integer, Continuous), Constraint, Objective, and Model types in Domain.fs, along with a Solver module that interfaces with Google OR-Tools (CBC, GLOP) to solve these models. The library also features a comprehensive SliceMap system (SMap through SMap5) for handling multi-dimensional indexed data and constraints, supporting slicing and element-wise operations.
Flips · high confidence
Behavioural changes
Migrate build system to FAKE and .NET 8
The build process has been replaced with a new FAKE-based script (Build.fs) and updated to target .NET 8, removing previous x64 limitations. This change introduces new build targets for cleaning, restoring, building, testing, and publishing NuGet packages, along with a new 'Publish' target that pushes version tags and performs sanity checks before release.
build · high confidence
Test coverage
Initial test suite for Flips algebraic modeling library
Added a new test project (Flips.Tests) that introduces property-based tests using FsCheck and xUnit to validate the mathematical correctness of the library's core types. The suite covers Decision, LinearExpression, Constraint, and Model objects, verifying properties such as commutativity, associativity, and distributivity for arithmetic operations. It also includes specific tests for the Units of Measure feature, ensuring that algebraic rules hold for typed values (e.g., decisions with 'Item' units).
Flips.Tests · high confidence
Dependencies
Upgrade to .NET 8 and update core dependencies
The project has been upgraded to target .NET 8, enabling the use of the latest OrTools and removing previous x64 limitations. This change updates the core library, examples, and test projects to .NET 8, while the main library continues to support .NET Framework 4.6.2. Additionally, key dependencies have been updated, including OPTANO.Modeling to version 3.9.2.537, FSharp.Core to version 8, and Google.OrTools to version 9.14.6206.
(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 62 → 61 (-0.9)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 89 → 88 (-0.2)
- Architecture 100 → 100 (+0.0)
- Maturity 53 → 49 (-4.2)
- Readiness 56 → 58 (+2.5)
- Security 75 → 78 (+3.0)
Resolved (64)
- Dependency hygiene not measured — no packages were read
- Duplicated block (10 lines × 3) (Flips.Examples/FoodTruckDecisionBuilder/FoodTruckDecisionBuilder.fs)
- Duplicated block (10 lines × 5) (Flips/SMap.fs)
- Duplicated block (11 lines × 5) (Flips/SMap.fs)
- Duplicated block (12 lines × 4) (Flips/SMap2.fs)
- Duplicated block (15 lines × 2) (Flips.Examples/FoodTruckMapExample/FoodTruckMapExample.fs)
- Duplicated block (17 lines × 4) (Flips/SMap.fs)
- Duplicated block (20 lines × 4) (Flips.Examples/FoodTruckDecisionBuilder/FoodTruckDecisionBuilder.fs)
- Duplicated block (22 lines × 2) (Flips.Examples/MultipleFoodTrackExample/MultipleFoodTruckExample.fs)
- Duplicated block (5 lines × 2) (Flips.Examples/MapSlicingExample/MapSlicingExample.fs)
- Duplicated block (5 lines × 2) (Flips/Domain.fs)
- Duplicated block (5 lines × 2) (Flips/Domain.fs)
- Duplicated block (5 lines × 2) (Flips/Domain.fs)
- Duplicated block (5 lines × 2) (Flips/Domain.fs)
- Duplicated block (5 lines × 2) (Flips/Domain.fs)
- Duplicated block (5 lines × 2) (Flips/Domain.fs)
- Duplicated block (5 lines × 2) (Flips/SMap3.fs)
- Duplicated block (5 lines × 2) (Flips/SMap4.fs)
- Duplicated block (5 lines × 2) (Flips/SMap4.fs)
- Duplicated block (5 lines × 2) (Flips/SMap4.fs)
- …and 44 more
New (51)
- Coverage not measured — no coverage collector is wired up
- Documentation: no installation or build instructions (packages/Google.OrTools.runtime.osx-x64/content/README.md)
- Documentation: no installation or build instructions (packages/xunit.runner.visualstudio/_content/README.md)
- Duplicated block (12 lines × 2) (Flips/SMap2.fs)
- Duplicated block (12 lines × 2) (Flips/SMap4.fs)
- Duplicated block (13 lines × 2) (Flips/SliceSet.fs)
- Duplicated block (13 lines × 5) (Flips/SMap.fs)
- Duplicated block (14 lines × 2) (Flips.Examples/CoffeeRoastingExample/CoffeeRoastingExample.fs)
- Duplicated block (14 lines × 2) (Flips.Examples/FoodTruckConstraintBuilderExample/FoodTruckConstraintBuilderExample.fs)
- Duplicated block (15 lines × 2) (Flips.Examples/BinaryProgrammingExample/BinaryProgrammingExample.fs)
- Duplicated block (15 lines × 3) (Flips.Examples/FoodTruckConstraintBuilderExample/FoodTruckConstraintBuilderExample.fs)
- Duplicated block (15 lines × 5) (Flips/SMap.fs)
- Duplicated block (16–17 lines × 5) (Flips/SMap.fs)
- Duplicated block (16–20 lines × 5) (Flips/SMap.fs)
- Duplicated block (18 lines × 2) (Flips.Examples/FoodTruckExample/FoodTruckExample.fs)
- Duplicated block (19 lines × 3) (Flips.Examples/MultipleFoodTrackExample/MultipleFoodTruckExample.fs)
- Duplicated block (20 lines × 2) (Flips.Examples/MultipleFoodTrackExample/MultipleFoodTruckExample.fs)
- Duplicated block (20–22 lines × 2) (Flips.Examples/FoodTruckConstraintBuilderExample/FoodTruckConstraintBuilderExample.fs)
- Duplicated block (23–26 lines × 4) (Flips/SMap.fs)
- Duplicated block (24 lines × 4) (Flips.Examples/FoodTruckConstraintBuilderExample/FoodTruckConstraintBuilderExample.fs)
- …and 31 more
Changes since last survey
- 24 commits — 24 feature/other, 0 fixes
By area
- (repo) — 11 commits
- docs/package-lock.json — 8 commits
- .github/workflows — 3 commits
- (root) — 2 commits
Notable commits
- change: Adapt to use Trusted Publishing
- change: Add entry for a pre-release to check trusted publishing
- change: Also allow to publiush pre-release versions
- change: Bump brace-expansion from 1.1.12 to 1.1.21 in /docs
- change: Bump engine.io from 6.6.4 to 6.6.10 in /docs
- change: Bump follow-redirects from 1.15.9 to 1.16.0 in /docs
- change: Bump immutable from 3.8.2 to 3.8.4 in /docs
- change: Bump lodash from 4.17.21 to 4.18.1 in /docs
- change: Bump minimatch from 3.1.2 to 3.1.5 in /docs
- change: Bump picomatch from 2.3.1 to 2.3.2 in /docs
- change: Bump socket.io-parser from 4.2.4 to 4.2.7 in /docs
- change: Fix formatting
- change: Merge branch 'main' into 229-nuget-update-how-we-handle-the-api-key
- change: Merge branch 'main' into dependabot/npm_and_yarn/docs/socket.io-parser-4.2.7
- change: Merge pull request #224 from fslaborg/dependabot/npm_and_yarn/docs/minimatch-3.1.5
- change: Merge pull request #226 from fslaborg/dependabot/npm_and_yarn/docs/lodash-4.18.1
- change: Merge pull request #227 from fslaborg/dependabot/npm_and_yarn/docs/follow-redirects-1.16.0
- change: Merge pull request #230 from fslaborg/dependabot/npm_and_yarn/docs/immutable-3.8.4
- change: Merge pull request #232 from fslaborg/dependabot/npm_and_yarn/docs/brace-expansion-1.1.21
- change: Merge pull request #233 from fslaborg/dependabot/npm_and_yarn/docs/picomatch-2.3.2
- …and 4 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
fslaborg/flips 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 cf828b8b5772a275a2b429e71b41bf46a74d6e68 — 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.