Skip to content
CAI
Software that uses CAICheck a score

sindresorhus/Settings

50.2

Weak · 1 October 2026

1.2k

lines of production code

Swift

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a macOS library, now named Settings, that provides SwiftUI-based components for building settings interfaces. It allows developers to create settings panes and sections using modern SwiftUI views while integrating them into existing AppKit-based window controllers. The library has migrated from a legacy Cocoa-based implementation to support Swift Package Manager and requires macOS 10.13 or later.

Features

Introduce SwiftUI-based Settings pane and section components

The Settings library now provides SwiftUI-native building blocks for constructing settings interfaces. Developers can use the new \Settings.Pane\ type to wrap SwiftUI views as settings tabs, and the \Settings.Section\ type to create labeled setting rows with optional dividers. These components are integrated into the existing \SettingsWindowController\ via the \SettingsPaneConvertible\ protocol, allowing SwiftUI content to be displayed alongside traditional AppKit panes without requiring a full migration of the window management logic.

Sources/Settings · high confidence

Removals

Removal of Xcode project file

The Xcode project file (project.pbxproj) for the Preferences example application has been deleted. This removes the legacy Xcode workspace configuration that previously managed the build settings, file references, and target dependencies for the example app and the Preferences framework.

Preferences.xcodeproj · high confidence

Removal of legacy tab-based preferences implementation

The \Preferenceable\ protocol, \PreferencesTabViewController\, \PreferencesWindowController\, and \util.swift\ helper files have been removed from the Sources/Preferences directory. This deletes the previous Cocoa-based implementation that managed preferences via an \NSTabViewController\ with custom transition animations and toolbar item configuration, indicating a shift away from this specific architectural approach in favor of newer patterns (such as the SwiftUI support mentioned in commit history).

Sources/Preferences · high confidence

Behavioural changes

Added Xcode workspace and scheme for the Preferences module

The project now includes an Xcode workspace configuration and a build scheme for the 'Preferences' module. This allows developers to open, build, test, and debug the module directly within Xcode, facilitating local development and integration with the Swift Package Manager tooling.

.swiftpm · high confidence

Example app updated to use SwiftUI and the Settings framework

The Example application has been migrated from the legacy Preferences framework to the Settings framework, introducing a new SwiftUI-based 'Accounts' pane alongside the existing Cocoa-based General and Advanced panes. This change updates the project structure to use the 'Settings' module, renames the example app to 'SettingsExample', and adds support for persisting the UI style (toolbar vs. segmented control) via UserDefaults.

Example · high confidence

Dependencies

Drop CocoaPods support and rename library to Settings

The CocoaPods integration has been removed (Preferences.podspec deleted), shifting the project to Swift Package Manager only. The library has been renamed from 'Preferences' to 'Settings', and the minimum deployment target has been raised to macOS 10.13. Additionally, the Swift tools version is updated to 5.8, and localization resources are now explicitly processed.

(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 49 → 50 (+1.6)
  • Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.

Lenses

  • Code Health 99 → 99 (+0.0)
  • Architecture 100 → 100 (+0.0)
  • Maturity 49 → 49 (+0.0)
  • Readiness 17 → 23 (+6.0)
  • Security 100 → 100 (+0.0)

Resolved (1)

  • Dependency hygiene PARTLY measured — SwiftPM pinning read, dependency currency NOT established

New (2)

  • The existence of both SettingsPane and SettingsPaneConvertible suggests a protocol/class hierarchy, but the API surface exposes initializers for both specific and convertible types. If SettingsPane conforms to SettingsPaneConvertible, the specific initializer for [SettingsPane] is redundant and confusingly named compared to the generic one.
  • Three distinct initializers accept essentially the same data structure (a collection of panes) but use different parameter names ('panes' vs 'preferencePanes') and different types ([SettingsPane], [PreferencePane], [SettingsPaneConvertible]). This creates confusion about which type to use and why the naming convention changes.

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

Survey your own repository

sindresorhus/Settings 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 1 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 f41475771f65379ca10852c95119a7f53f0de5a5 — the exact code this score is about.
  • Scored under rubric-2026.09.18 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-e569280dd5e2.