Skip to content
CAI
Software that uses CAICheck a score

Ranchero-Software/NetNewsWire

32.0

Weak · 29 July 2026

72.9k

lines of production code

Swift

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

How this codebase got here

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.

Score

  • CAI 25 → 32 (+7.1)
  • Rubric changed (rubric-2026.08.17 → rubric-2026.08.18) — scores are not directly comparable.

Lenses

  • Code Health 66 → 67 (+1.3)
  • Architecture 98 → 100 (+1.5)
  • Maturity 58 → 60 (+2.7)
  • Readiness 43 → 43 (+0.0)
  • Security 0 → 15 (+15.0)
  • Domain Modelling 95 → 95 (+0.0)
  • Accessibility 34 → 34 (+0.0)

Resolved (44)

  • Boundary-crossing change coupling: ArticlesDatabase.swift ↔ Database.swift (Modules/ArticlesDatabase/Sources/ArticlesDatabase/ArticlesDatabase.swift)
  • Boundary-crossing change coupling: ArticlesTable.swift ↔ Database.swift (Modules/ArticlesDatabase/Sources/ArticlesDatabase/ArticlesTable.swift)
  • Boundary-crossing change coupling: StatusesTable.swift ↔ Database.swift (Modules/ArticlesDatabase/Sources/ArticlesDatabase/StatusesTable.swift)
  • Boundary-crossing change coupling: TimelineViewController.swift ↔ SmartFeedDelegate.swift (Mac/MainWindow/Timeline/TimelineViewController.swift)
  • Change coupling: CloudKitAccountDelegate.swift ↔ LocalAccountDelegate.swift (Modules/Account/Sources/Account/CloudKit/CloudKitAccountDelegate.swift)
  • Change coupling: FeedbinAccountDelegate.swift ↔ NewsBlurAccountDelegate.swift (Modules/Account/Sources/Account/Feedbin/FeedbinAccountDelegate.swift)
  • Change coupling: FeedbinAccountViewController.swift ↔ LocalAccountViewController.swift (iOS/Account/FeedbinAccountViewController.swift)
  • Change coupling: StarredWidget.swift ↔ TodayWidget.swift (Widget/Widget Views/StarredWidget.swift)
  • Change coupling: StarredWidget.swift ↔ UnreadWidget.swift (Widget/Widget Views/StarredWidget.swift)
  • Change coupling: TodayWidget.swift ↔ UnreadWidget.swift (Widget/Widget Views/TodayWidget.swift)
  • Dependency hygiene not measured — no supported dependency manifest was read
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • Off-boarding risk: anonymized user #1
  • Secret: aws-access-token (Resources/Themes/NewsFax.nnwtheme/stylesheet.css)
  • Secret: aws-access-token (Shared/Resources/NewsFax.nnwtheme/stylesheet.css)
  • Secret: aws-access-token (Themes/NewsFax.nnwtheme/stylesheet.css)
  • …and 24 more

New (12)

  • Boundary-crossing change coupling: Package.swift ↔ Package.swift (Modules/Articles/Package.swift)
  • Boundary-crossing change coupling: Package.swift ↔ Package.swift (Modules/ArticlesDatabase/Package.swift)
  • Change coupling: AtomParser.swift ↔ RSSParser.swift (Modules/RSParser/Sources/RSParser/Feeds/XML/AtomParser.swift)
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • Off-boarding risk: anonymized user #1
  • Scanner failed to run — not a clean result
  • The 'Community' section mentions the code of conduct and a forum, but there is no link to the CONTRIBUTING.md that covers PR process or how to join the community. (README.md)

Changes since last survey

  • 29 commits — 19 feature/other, 10 fixes

By area

  • Technotes/Status.md — 4 commits
  • xcconfig/common — 4 commits
  • Mac/Preferences — 3 commits
  • Technotes/ReleaseNotes-iOS.markdown — 3 commits
  • Appcasts/netnewswire-beta.xml — 2 commits
  • Technotes/ReleaseNotes-Mac.markdown — 2 commits
  • iOS/MainFeed — 2 commits
  • iOS/SceneDelegate.swift — 2 commits
  • (repo) — 1 commit
  • Mac/MainWindow — 1 commit
  • Modules/Account — 1 commit
  • Modules/ActivityLog — 1 commit
  • Modules/RSCore — 1 commit
  • iOS/KeyboardManager.swift — 1 commit
  • iOS/MainTimeline — 1 commit

Notable commits

  • fix: Capture the articles to mark before showing the Mark All as Read confirmation, so switching folders during the alert doesn’t mark the wrong folder. Fixes #5359.
  • fix: Coalesce Folder unread-count recalculation using CoalescingQueue. Run pending unread count updates before going to next unread. Fixes #5373.
  • fix: Constrain timeline scrolling to legal range to top row isn’t under the toolbar. Fixes #5358.
  • fix: Fix double-separator cosmetic bug in Accounts pane. Save and restore (when possible) selection in accounts pane when it reloads. Fixes #5348.
  • fix: Fix warnings in xib.
  • fix: Fix warnings.
  • fix: Make the toggle-reader-view shortcut available no matter what view is first responder. Fixes #3943.
  • fix: Remove the work-around for the iOS 27 beta split view crash that was fixed in iOS 27 beta 4.
  • fix: Stop updating scroll position on updating timeline on iPad — it was fighting with user’s scrolling. Fixes #5330.
  • fix: Use NetNewsWire’s feed-finding code when Feedly’s fails. Fixes #5306.
  • change: Bump version. Write release notes.
  • change: Disallow split view controller on large iPhones — works around crashed added by iOS 27 beta.
  • change: Fix typo.
  • change: Merge branch 'main' of https://github.com/Ranchero-Software/NetNewsWire
  • change: Select new account in accounts list on adding an account.
  • change: Update appcasts.
  • change: Update appcasts.
  • change: Update build number.
  • change: Update status.
  • change: Update status.
  • …and 9 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

Ranchero-Software/NetNewsWire 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 29 July 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 52030006b5a3a45d865bd03a455f85d3f1327077 — the exact code this score is about.
  • Scored under rubric-2026.08.18 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer latest.