Skip to content
CAI
Software that uses CAICheck a score

Clipy/Clipy

66.4

Adequate · 27 September 2026

5.9k

lines of production code

Swift

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Clipy is a macOS clipboard manager that monitors the pasteboard to store and search history, supporting text, images, and HTML content. It provides a snippet editor for organizing reusable text blocks and features on-device OCR for image-based clips. The application manages global hotkeys, handles system accessibility permissions, and offers a modernized SwiftUI interface for configuration and viewing.

How it got here

2015–2016 — SwiftUI migration and modernization

10 changes.

The project underwent a significant architectural shift by migrating the application entry point to SwiftUI and updating the test suite to the native Swift Testing framework. This period also focused on modernizing the codebase with Swift 3 compatibility, improving accessibility permission handling, and enhancing the snippets editor with new UI elements and whitespace preservation fixes.

2017–2026 — Swift concurrency and SQLite migration

21 changes.

The project modernized its architecture by rewriting core services with Swift Concurrency and Dependency Injection, while migrating data persistence from Realm to SQLite. This period also included a comprehensive overhaul of the settings interface to SwiftUI, expanded internationalization support, and significant additions to test coverage for the new storage and migration logic.

Features

Add Ukrainian localization for the Snippets Editor

The Snippets Editor window now supports Ukrainian, allowing users to see interface labels such as 'Add Snippet', 'Add Folder', 'Delete', and 'Import' in their native language. This change adds the \uk.lproj\ localization bundle alongside the existing Japanese (\ja.lproj\) translations, ensuring the editor's UI is accessible to Ukrainian-speaking users.

Clipy/Sources/Snippets/Base.lproj · high confidence

Add snippets editor cell with folder icon support

A new table view cell class (CPYSnippetsEditorCell) is introduced to render snippet items in the editor, featuring a 16x13 folder icon that changes color based on selection state and an enabled/disabled toggle that grays out the text when disabled.

Clipy/Sources/Views/TableViewCell · high confidence

Added German localization for the Snippets Editor

Users with German language settings will now see the Snippets Editor interface translated into German. This change adds a new localization file for the snippets editor window, covering UI elements such as buttons for importing, exporting, and deleting snippets, as well as labels for text fields, shortcuts, and folder management.

Clipy/Sources/Snippets/de.lproj · high confidence

Added Italian localization for the Snippets Editor

Users with Italian language settings will now see the Snippets Editor interface translated, including labels for actions like Import, Export, Delete, and Add Snippet, as well as window titles and folder prompts.

Clipy/Sources/Snippets/it.lproj · high confidence

Added Portuguese (Brazil) localization for the Snippets Editor

Users with their system language set to Portuguese (Brazil) will now see the Snippets Editor interface translated, including labels for actions such as Import, Export, Delete, and Add Snippet, as well as window titles and folder management options.

Clipy/Sources/Snippets/pt-BR.lproj · high confidence

Added Simplified Chinese localization for Snippets Editor

Users with Simplified Chinese system settings will now see the Snippets Editor interface translated, including labels for actions such as Import, Export, Delete, and Add Snippet, as well as window titles and folder management options.

Clipy/Sources/Snippets/zh-Hans.lproj · high confidence

Initial project configuration and file structure

The Clipy project is initialized with a new Xcode project file (project.pbxproj) that defines the build targets, source files, and framework dependencies (including RealmSwift, Sparkle, and Firebase). A workspace configuration is added to link the project, and IDE template macros are configured to standardize file headers with repository and product URLs.

Clipy.xcodeproj · high confidence

New app icon, UI assets, and localized strings for settings and snippet editor

This update adds the complete asset catalog for the new app icon (16px to 512px) and introduces a new set of images for the snippet editor (add, delete, enable, export, import) and status bar menu icons, along with donation logos for GitHub and Open Collective. It also includes the initial localization files (Localizable.xcstrings and Settings.xcstrings) providing translated strings for accessibility permissions, history management, and the new settings interface in German, Italian, Japanese, Portuguese (Brazil), Ukrainian, and Chinese (Simplified).

Clipy/Resources · high confidence

Behavioural changes

Added Xcode scheme configuration for Clipy

The project now includes a shared Xcode scheme file that defines build, test, launch, profile, analyze, and archive actions. This configuration ensures that running, testing, and archiving the Clipy.app target is handled consistently within the IDE, while the ClipyTests target is included in the build and test actions but excluded from running and profiling.

Clipy.xcodeproj/xcshareddata/xcschemes · high confidence

Improved accessibility permission handling and SwiftUI app entry point

The app now uses a dedicated Accessibility module to verify and request macOS accessibility permissions with a more robust check that distinguishes between actual trust denial and transient UI states, guiding users to System Settings if needed. The application entry point has been migrated to SwiftUI (ClipyApp.swift), which initializes the dependency container and handles migration from legacy Realm data to SQLiteData before launching the legacy AppDelegate for core services like hotkeys, pasteboard monitoring, and screenshot observation.

Clipy/Sources · high confidence

Improved menu item numbering alignment and immediate preference updates

Menu items now use monospaced digits for their numbering, ensuring that numbers align vertically and do not shift as the count increases. Additionally, changes to preference settings are reflected in the main menu immediately, rather than requiring a restart or manual refresh to see the updated layout.

Clipy/Sources/Managers · high confidence

Introduce dependency-injection wrappers for core services

The application now uses the Swift Dependencies library to manage access to critical system and third-party services, including Sparkle (update checks), Firebase (analytics and crash reporting), Realm (database configuration and migration), and device identification. This change replaces direct static or singleton calls with injectable clients, allowing the app to provide mock implementations for previews and tests while maintaining the same external behavior for users.

Clipy/Sources/Dependencies · high confidence

Migrate history and snippets to SQLite with on-device OCR

Clipboard history and snippet storage has moved from UserDefaults to a local SQLite database (via SQLiteData), enabling more robust persistence and complex queries. This change introduces on-device text recognition for image-based clipboard items using Apple's Vision framework, automatically extracting and storing readable text. Additionally, history entries now track a creation timestamp (createdAt) alongside the update time, and the system filters out whitespace-only clipboard entries to reduce clutter.

Clipy/Sources/Repositories · high confidence

Migrate pasteboard history and snippets from Realm to SQLite

Clipy now stores pasteboard histories and snippets in a new SQLite database instead of the previous Realm storage. Existing data is automatically migrated during startup, preserving all clip content, assets, thumbnails, and snippet folders. The new schema includes a dedicated \createdAt\ timestamp for history entries and integrates FTS5 search indexes for both histories and snippets, enabling faster and more flexible text-based searches across your clipboard history.

Clipy/Sources/Database · high confidence

Migrate settings storage and introduce Universal Clipboard exclusion

The application now migrates legacy user defaults (such as key combos and excluded applications) to the new Swift Sharing-based storage system via a dedicated migration path, ensuring settings persist correctly after the update. Additionally, a new setting allows users to exclude Universal Clipboard items from history, preventing the app from saving clipboard content copied from other Apple devices.

Clipy/Sources/Models · high confidence

Migrate settings storage to SwiftUI AppStorage

The application's settings persistence has been refactored from raw UserDefaults to SwiftUI's AppStorage via the Sharing library. This change introduces a new \AppStorageKeys\ enum to centralize key definitions and \AppStorageValues\ to provide typed, default-backed accessors for all configuration options (such as history size, menu display preferences, and keyboard shortcuts). For users, this ensures that settings changes are automatically synchronized with the UI and persisted reliably without manual save logic, while maintaining backward compatibility with existing preference keys.

Clipy/Sources/AppStorage · high confidence

New code signing configuration files for Clipy

The project now includes dedicated Xcode configuration files to manage code signing. A new Clipy.xcconfig file includes the signing settings, which are defined in CodeSigning.xcconfig for standard development and distribution (using team BBCHAJ584H and specific provisioning profiles) and in CodeSigning-AdHoc.xcconfig for ad-hoc builds (disabling signing identities).

Configurations · high confidence

Refactor extension utilities and add HTML clipboard support

This change consolidates various utility extensions in the Clipy/Sources/Extensions directory, introducing new helpers for bundle information, file management, image resizing, and menu highlighting. It adds support for HTML clipboard content by including it in pasteboard history titles and provides deprecated pasteboard type constants for Swift 3 compatibility. Additionally, it migrates settings to Swift Sharing, adds tooltip support for menu items, and implements string trimming for menu titles.

Clipy/Sources/Extensions · high confidence

Rewrite of core services to use Swift Concurrency and Dependency Injection

The clipboard, hotkey, and paste services in Clipy have been rewritten to replace the previous ReactiveCocoa-based architecture with modern Swift Concurrency (async/await, Tasks) and the Swift Dependency Injection system. This change introduces a new \ClipService\ that manages clipboard monitoring and history trimming using continuous clocks, a \HotKeyService\ that handles global shortcut registration and unregistration via the \Magnet\ library, and a \PasteService\ that executes paste actions using \Sauce\ for keyboard event simulation. Settings are now accessed via the \Sharing\ library's \@Shared\ property wrappers, and data persistence is handled through repositories injected via \SQLiteData\. This refactoring modernizes the codebase, improves thread safety, and centralizes service configuration.

Clipy/Sources/Services · high confidence

Settings interface migrated to SwiftUI

The application's settings interface has been rebuilt using SwiftUI, replacing the previous implementation. This change introduces a modernized UI with new reusable components (such as SettingsGrid, SettingsNumberField, and ShortcutRecorder) and reorganizes the settings into distinct panes including General, Menu, Clipboard Type, Excluded Applications, Shortcuts, Updates, Beta, and a new Donation tab. While the underlying configuration keys remain the same, users will see a refreshed layout and styling in the preferences window.

Clipy/Sources/Settings · high confidence

Update app version to 1.3.0 and refresh Sparkle update keys

The app bundle version has been bumped to 1.3.0, and the Sparkle update framework configuration has been updated with new cryptographic keys (SUPublicEDKey) to support the new update mechanism.

Clipy/Supporting Files · high confidence

Updated documentation, licensing, and privacy disclosures

The project documentation has been significantly expanded and modernized. The README now includes build badges, explicit system requirements (macOS 13 Ventura), and detailed instructions for ad-hoc code signing and Firebase integration. A new PRIVACY.md file clarifies that clipboard data is stored locally and not transmitted, while disclosing the use of Firebase Analytics and Crashlytics for diagnostics and update checks via Sparkle. The LICENSE file has been updated to reflect the 2015-2018 copyright period, and a separate LICENSE\_CLIPMENU file preserves the original ClipMenu attribution. Additionally, .gitignore has been updated to exclude Firebase configuration files and align with modern Swift/Xcode standards.

(repo-wide) · high confidence

Fixes

Snippet editor now preserves whitespace during import

The Snippets Editor window controller has been updated to fix an issue where whitespace was inadvertently removed when importing snippets. The import logic now configures the XML parser with \shouldTrimWhitespace = false\, ensuring that the content of imported snippets is preserved exactly as written, including leading and trailing spaces.

Clipy/Sources/Snippets · high confidence

Test coverage

Added test coverage for clipboard migration, pasteboard type handling, and content storage; Added test coverage for extension utilities and OCR recognition; Added tests for PasteboardHistory and Snippet repositories; Added tests for database migration and search index triggers; Added tests for default AppStorage settings; Added tests for monospaced digit formatting in menu titles; Migrate test suite to Swift Testing framework.

Dependencies

Resolved dependency versions for Swift Package Manager

The project now includes a Package.resolved file that pins the specific versions of all Swift Package Manager dependencies, ensuring reproducible builds. This manifest records the exact versions for libraries such as Firebase (12.18.0), Realm (10.7.2), GRDB.swift (7.10.0), and Screeen, locking the dependency graph to these stable releases.

(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 45 → 66 (+21.5)
  • Rubric changed (rubric-2026.08.15 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 100 → 98 (-1.7)
  • Architecture 87 (new)
  • Maturity 47 → 54 (+6.5)
  • Readiness 33 → 75 (+42.4)
  • Security 50 → 85 (+35.0)
  • Domain Modelling 73 (new)

Resolved (5)

  • Dimension evaluation failed
  • No automated tests
  • No exposed public API
  • No tests found
  • Test reliability not included

New (50)

  • CPYSnippetsEditorWindowController.outlineView (cognitive 24) (Clipy/Sources/Snippets/CPYSnippetsEditorWindowController.swift)
  • Change coupling: AppDelegate.swift ↔ HotKeyService.swift (Clipy/Sources/AppDelegate.swift)
  • Duplicated block (18 lines × 2) (Clipy/Sources/Database/DatabaseMigration.swift)
  • Duplicated block (42 lines × 3) (Clipy/Sources/Database/Migrations/SQLiteDataMigrator+V2.swift)
  • Duplicated block (46 lines × 2) (Clipy/Sources/Database/Migrations/SQLiteDataMigrator+V2.swift)
  • Duplicated block (5 lines × 3) (Clipy/Sources/AppDelegate.swift)
  • Duplicated block (6–7 lines × 2) (Clipy/Sources/AppDelegate.swift)
  • Duplicated block (7 lines × 2) (Clipy/Sources/Repositories/PasteboardHistoryRepository.swift)
  • Duplicated block (8 lines × 2) (Clipy/Sources/Extensions/PasteboardHistoryExtensions.swift)
  • Hotspot: Clipy/Sources/Models/PasteboardAvailableType.swift (Clipy/Sources/Models/PasteboardAvailableType.swift)
  • Low cohesion: AppDelegate (LCOM4 6) (Clipy/Sources/AppDelegate.swift)
  • Low cohesion: CPYSnippetsEditorWindowController (LCOM4 7) (Clipy/Sources/Snippets/CPYSnippetsEditorWindowController.swift)
  • Low cohesion: PasteboardHistoryRepository (LCOM4 10) (Clipy/Sources/Repositories/PasteboardHistoryRepository.swift)
  • Low cohesion: SnippetRepository (LCOM4 17) (Clipy/Sources/Repositories/SnippetRepository.swift)
  • No ADRs found
  • No assertions: changesCanIncludeInitialValue (ClipyTests/Extensions/SharedExtensionsTests.swift)
  • No assertions: changesExcludesInitialValueAndDuplicatesByDefault (ClipyTests/Extensions/SharedExtensionsTests.swift)
  • No assertions: migrationV2 (ClipyTests/Database/Migrations/SQLiteDataMigratorTests.swift)
  • No assertions: migrationV3 (ClipyTests/Database/Migrations/SQLiteDataMigratorTests.swift)
  • No assertions: migrationV4 (ClipyTests/Database/Migrations/SQLiteDataMigratorTests.swift)
  • …and 30 more

Changes since last survey

  • 27 commits — 26 feature/other, 1 fixes

By area

  • Clipy/Sources — 13 commits
  • .github/workflows — 10 commits
  • Clipy.xcodeproj/project.pbxproj — 3 commits
  • Clipy/Resources — 1 commit

Notable commits

  • fix: Fix folder drop reordering (#694)
  • change: Add Ukrainian localization (#719)
  • change: Add Universal Clipboard exclusion setting (#727)
  • change: Add automatic history deletion settings (#726)
  • change: Add donation tab to settings (#721)
  • change: Add global shortcut for editing snippets (#709)
  • change: Bump reviewdog/action-actionlint from 1.73.0 to 1.73.1 (#695)
  • change: Bump reviewdog/action-actionlint from 1.73.1 to 1.73.2 (#701)
  • change: Bump reviewdog/action-actionlint from 1.73.2 to 1.74.0 (#733)
  • change: Bump the codeql-actions group across 1 directory with 2 updates (#690)
  • change: Bump the codeql-actions group across 1 directory with 2 updates (#717)
  • change: Bump the codeql-actions group with 2 updates (#700)
  • change: Bump the codeql-actions group with 2 updates (#731)
  • change: Bump zizmorcore/zizmor-action from 0.6.1 to 0.6.2 (#691)
  • change: Bump zizmorcore/zizmor-action from 0.6.2 to 0.6.3 (#718)
  • change: Consolidate application exclusions in ClipService (#728)
  • change: Continue migrating UserDefaults settings to Swift Sharing (#708)
  • change: Migrate UserDefaults settings to Swift Sharing (#696)
  • change: Migrate settings to SwiftUI (#720)
  • change: Refactor utility responsibilities (#697)
  • …and 7 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

Clipy/Clipy 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 27 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 6e3caa180a84c5ee8f1089b23150b0977961805f — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-d00c643c3f66.