sindresorhus/Settings
50.2
Weak · 1 October 2026
1.2k
lines of production code
Swift
primary language
2
measurements over time
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.