Skip to content
CAI
Software that uses CAICheck a score

davedawkins/sutil-oxide

37.9

Weak · 3 October 2026

10.2k

lines of production code

F#

with JavaScript

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Sutil Oxide is a UI toolkit for building IDE-style web applications using the Sutil framework. It provides a docking system for managing resizable, draggable panes, alongside components for file exploration, code editing, and flowchart visualization. The system also includes a virtual file system layer with byte-budgeted caching to handle large files efficiently.

Features

Initial release of Sutil Oxide docking toolkit

This change introduces Sutil Oxide, a new toolkit for building IDE-style web applications using Sutil. It provides a DockContainer component supporting 9 docking locations, resizable panes, drag-and-drop tab relocation, minimization, theming, and basic UI elements like toolbars and status bars. The project structure has been reorganized to support this library, including the addition of a solution file, build scripts, and an MIT license.

(repo-wide) · high confidence

Initial release of Sutil Oxide documentation and styling

This change introduces the public documentation and base styling for the Sutil Oxide toolkit. It adds a comprehensive README explaining the IDE-style docking system, pane management, and integration with Sutil, along with a new HELP.md file detailing the demo application's features (such as the file explorer, editor, and theming). Additionally, the global CSS reset in main.css is scoped to html and body elements instead of the universal selector.

public · high confidence

Introduce SutilOxide UI framework with dock, file explorer, and code editor

Adds the SutilOxide library, providing a complete UI layer for the application. This includes a Dock system for managing resizable, draggable panes, a File Explorer with support for file operations and drag-and-drop uploads, and a Text Editor component powered by Ace. The package also includes a Flow chart editor for visual graph manipulation, a CellEditor for data entry, and CSS theming utilities. The demo application (App.fs) integrates these components to provide a functional file management and editing interface.

src/SutilOxide · high confidence

New byte-budgeted LRU caching and virtual filesystem mounting

The file system layer now includes a byte-budgeted LRU cache (Layer 1 in-memory, Layer 2 IndexedDB) that enforces per-entry size ceilings and runtime-settable byte budgets to prevent memory bloat from large files, while also introducing a VirtualFileSystem that allows mounting multiple underlying file systems under a single root namespace with component-based path containment.

src/SutilOxide/FileSystem · high confidence

Removals

Removal of initial docking and pane management implementation

The initial implementation of the application's docking system has been removed from the source code. This change deletes the \App.fs\ module, which previously handled the layout of the main container, ribbon, and docked panes, as well as the \Dock.fs\ module, which contained the core logic for the \DockContainer\, \DockLocation\ types, pane management, and drag-and-drop resizing functionality. Users will no longer have access to the dockable, resizable panes (such as Explorer, Database, Console, etc.) that were defined in this initial commit.

src · high confidence

Dependencies

Migrate build tooling to Vite and rename project to Sutil Oxide

The project has been renamed from 'sutil-dock' to 'sutil-oxide' and its build system has shifted from Webpack to Vite. This change updates the npm scripts to use Vite for development and introduces new targets for building the library and publishing. Additionally, the .NET project structure has been reorganized into two new projects: 'SutilOxide' (a .NET Standard 2.0 library containing core components like the file system, UI, and reactive modules) and 'App' (a .NET 8 application referencing SutilOxide and Fable packages).

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

Lenses

  • Code Health 87 → 86 (-0.4)
  • Architecture 100 → 88 (-12.4)
  • Maturity 51 → 49 (-1.8)
  • Readiness 26 → 26 (+0.0)
  • Security 72 → 72 (+0.0)
  • Accessibility 28 (new)
  • Performance 100 (new)

Resolved (5)

  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • High CVE: [GHSA redacted] (package-lock.json)
  • High CVE: [GHSA redacted] (package-lock.json)
  • High CVE: [GHSA redacted] (package-lock.json)

New (6)

  • Documentation: no installation or build instructions (public/README.md)
  • Documentation: no usage examples (public/README.md)
  • High CVE: [GHSA redacted] (package-lock.json)
  • High CVE: [GHSA redacted] (package-lock.json)
  • High CVE: [GHSA redacted] (package-lock.json)
  • Projects may be oversized for their cohesion

Changes since last survey

  • 22 commits — 20 feature/other, 2 fixes

By area

  • src/SutilOxide — 12 commits
  • (repo) — 10 commits

Notable commits

  • fix: Conformance fixes: Path.canonical seam, root's name in the virtual fs (fsimgo#998)
  • fix: Red-team fixes: selection identity, mount-rename leak, "" read parity (fsimgo#998)
  • change: Add AppendFileBytes/AppendFileText and clear the commented-out remnants
  • change: Add ISignal Sample. Field.Attrs. Clean up commented code
  • change: Compare path containment by component, not string prefix (fsimgo#996)
  • change: Delete the JsHelpers path triple and the dead KeyedStorageFileSystem (fsimgo#999)
  • change: Drop two redundant canonicalise calls and a stale rooting claim
  • change: Follow the POSIX component rule in validateFileName, settle the backslash
  • change: Give FieldElement its error store and a text-editable flag
  • change: Give canonicalParts a worked table of what it accepts and refuses
  • change: Make every path absolute and give the root one spelling (fsimgo#998)
  • change: Merge branch 'main' into feat/fsimgo-896-comment-anchors
  • change: Merge origin/main: the fsimgo#996/#997/#998 path work
  • change: Merge pull request #17 from davedawkins/feat/fsimgo-896-comment-anchors
  • change: Merge pull request #18 from davedawkins/feat/sample-off-isignal
  • change: Merge pull request #19 from davedawkins/feat/field-element-errors
  • change: Merge pull request #20 from davedawkins/feat/fsimgo-997-filename-validation
  • change: Merge pull request #21 from davedawkins/feat/fsimgo-996-relative-to
  • change: Merge pull request #22 from davedawkins/feat/fsimgo-998-absolute-paths
  • change: Merge pull request #23 from davedawkins/feat/fsimgo-999-path-dedup
  • …and 2 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

davedawkins/sutil-oxide 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 9963cd6101b2932d9d91ca4b60fb8683ce292771 — 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.