Skip to content
CAI
Software that uses CAICheck a score

mattstermiller/koffee

59.8

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

Koffee is a desktop file manager application built with .NET and WPF that provides a keyboard-centric interface for navigating and manipulating the file system. It supports advanced features such as configurable external tool execution with variable substitution, comprehensive command keybinding customization, and robust undo/redo history. The system is distributed via Windows installers, Scoop, and Chocolatey, and includes a dedicated UI test environment for validating interface components.

Features

Adds Inno Setup installer and Scoop manifest templates

The distribution configuration now includes templates for Windows installation packages. An Inno Setup script (installer.iss) defines the installer behavior, configuring the application to install to %LocalAppData%\\Programs and creating desktop shortcuts. Additionally, a Scoop manifest template (koffee.json) is provided to support installation via the Scoop package manager, including version and hash placeholders for automated updates.

dist-config · high confidence

Adds configurable external tool execution with variable substitution

Users can now define and run external command-line tools directly from Koffee via the Settings window. Tool arguments support variable substitution (e.g., {selected\_files}, {cursor\_item}, {git\_root}, {env:VAR}) with optional fallbacks and custom delimiters, allowing dynamic command construction based on the current selection, cursor, or environment. Tools can be added, edited, or deleted, and each tool can be bound to a custom key combination. Executing a tool updates the path history with the paths used in the arguments and displays a status message upon completion.

Koffee · high confidence

Initial Chocolatey package configuration for Koffee

Adds the Chocolatey packaging structure for the Koffee application, including the nuspec manifest, verification text, and GUI stub. This enables distribution of Koffee via the Chocolatey package manager, with metadata pointing to the project's GitHub releases and source.

dist-config/choco · high confidence

Initial KoffeeUI WPF interface with keybinding editor and tool management

The application now features a complete WPF-based user interface, replacing the previous implementation. This includes a main window with a status bar, next undo/redo action bar, and an input panel with search options. A new Key Binding editor allows users to configure command shortcuts, while the Settings window provides options for startup paths, path formats, and recursive search exclusions. Additionally, users can now manage custom tools via a dedicated edit window, and the UI includes a 'How To Use Koffee' help link.

src/KoffeeUI · high confidence

Architecture

Repository restructured for .NET SDK format and VS 2017

The project has been migrated from the legacy Paket/NuGet build system to the modern .NET SDK format, enabling builds via the \dotnet\ CLI. The solution structure was reorganized to move source files into a \src/\ subfolder and split the codebase into distinct projects: the main application (\Koffee\), a C\# UI layer (\KoffeeUI\), tests (\Koffee.Tests\), and a FAKE-based build script (\build\). The solution file was also updated to target Visual Studio 2015 (15.0) and includes new project references for the UI and test layers.

(repo-wide) · high confidence

Behavioural changes

Installer now places Koffee in %LocalAppData%\\Programs

The installation target has been updated to install the application into the user-local directory %LocalAppData%\\Programs\\Koffee instead of a global location. This change affects the 'install' build target, which now uses robocopy to place binaries in this specific path and creates a Start Menu shortcut pointing to the executable there.

src/build · high confidence

Refactors command handling into dedicated modules

The application's command logic has been reorganized into specific modules (CommandUtil, CursorCommands, FileSystem, ItemActionCommands, ItemCreateCommands, ItemDeleteCommands, ItemPutCommands, ItemRenameCommands, MainController, NavigationCommands) to improve maintainability and separation of concerns. This change introduces a new MainCommand type that dispatches to specialized handlers for cursor movements, file system operations, and navigation, replacing the previous monolithic command structure.

src/Koffee · high confidence

Test coverage

Added comprehensive test coverage for core file system operations and UI commands; Adds UI test application for KoffeeUI.

Dependencies

Migrate to .NET SDK-style projects and update dependencies

The project has migrated from legacy .NET Framework project formats to modern .NET SDK-style projects (using the Microsoft.NET.Sdk.WindowsDesktop SDK). The main application and test projects now target .NET Framework 4.8.1 (net481), while the build automation project targets .NET 10.0 (net10.0). This change introduces several new dependencies, including VinylUI (3.0.2), Acadian.FSharp (1.2.23), Newtonsoft.Json (13.0.3), and System.Reactive (4.4.1) for the main app, and FsUnit (5.6.1), NUnit3TestAdapter (4.6.0), Microsoft.NET.Test.Sdk (17.12.0), and CompareNETObjects (4.83.0) for tests. The build system now uses Fake 6.1.4 packages and NuGet.Protocol (7.6.0). Legacy references like FSharp.Core and app.config files have been removed in favor of SDK-managed dependencies.

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

Lenses

  • Code Health 96 → 96 (+0.0)
  • Architecture 87 → 91 (+4.0)
  • Maturity 58 → 58 (+0.0)
  • Readiness 42 → 42 (+0.0)
  • Security 100 → 100 (+0.0)

Resolved (2)

  • Documentation: no usage examples (README.md)
  • Inconsistent verb usage for helper methods returning a value or performing an action. One uses 'Register' (imperative verb) while the other uses 'Get' (imperative verb). While both are verbs, 'Register' implies side-effects/registration, whereas 'Get' implies retrieval. However, looking at the broader context of the codebase, there is no clear inconsistency here as they do different things. Let's look closer. Actually, there are no true inconsistencies where the SAME concept is named differently. 'RegisterHyperlinkClick' and 'GetUnwrappedTextBlockWidth' are distinct concepts. 'Convert' and 'ConvertBack' are standard IValueConverter patterns. 'ParseParams' is distinct. There are no duplicate concepts with different names.

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

mattstermiller/koffee 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 57a938feacfe4bf1b8661a1a86c5c4e106e8872d — 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.