Skip to content
CAI
Software that uses CAICheck a score

chocoford/ExcalidrawZ

55.0

Adequate · 1 October 2026

148.3k

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 application designed for creating and managing Excalidraw drawings, featuring robust cloud synchronization with providers like Dropbox, Google Drive, and OneDrive. It ensures data integrity through encrypted content storage, persistent caching, and structured termination sequences. The application also integrates system-level features such as Quick Look previews for direct file viewing in Finder and supports automated release workflows via Fastlane and Firebase.

Features

Add Quick Look preview support for Excalidraw files

Users can now preview Excalidraw files directly in macOS Finder and iOS file browsers using the system Quick Look feature. This change introduces a new Quick Look Preview Extension that registers the \com.chocoford.excalidrawFile\ content type, allowing the system to render a live preview of the drawing via the \ExcalidrawRenderer\ component without opening the full application.

QuickLookPreviewExtension · high confidence

Initial macOS app structure and cloud storage assets

The macOS application entry point (AppDelegate) now implements a structured termination sequence that waits for screen annotation saves, pending editor operations, and canvas snapshots before closing, ensuring data integrity. The app bundle is configured to handle Excalidraw file types and integrates authentication URL schemes for Microsoft, Dropbox, and Google Drive. Additionally, the project includes the initial asset library for cloud storage providers (Box, Dropbox, Google Drive, OneDrive, etc.) and collaboration indicators, establishing the foundation for the app's file and sync capabilities.

ExcaliDrawZ · high confidence

Initial repository setup and release tooling

The repository is initialized with core documentation (README, CHANGELOG) and configuration for Firebase and release automation. A new shell script (ExcalidrawZRelease.command) provides a terminal-based console for managing app versions, build numbers, and fastlane release workflows. The .gitignore is updated to exclude sensitive provisioning profiles, Firebase artifacts, and local build resources.

(repo-wide) · high confidence

Behavioural changes

Added CI post-clone script to skip Xcode validation

A new \ci\_post\_clone.sh\ script has been added to the \ci\_scripts\ directory. This script configures Xcode to skip package plugin fingerprint validation and macro fingerprint validation during the CI build process, which helps prevent build failures or delays caused by strict validation checks in the CI environment.

_ci\scripts · high confidence

Introduction of centralized configuration file

A new Project.xcconfig file has been added to the Config directory, serving as the primary configuration entry point that conditionally includes an Overrides.xcconfig file. This change establishes a structured location for project settings, enabling the management of configuration overrides without modifying the base project configuration directly.

Config · medium confidence

Project renamed from ExcaliDrawZ to ExcalidrawZ

The Xcode project has been renamed from ExcaliDrawZ to ExcalidrawZ. This change updates the project file structure, including the main project.pbxproj, workspace files, and build schemes, to reflect the corrected spelling. Users will see the updated name in Xcode and build outputs.

ExcaliDrawZ.xcodeproj · high confidence

Test coverage

Added tests for cloud storage providers, encryption, and persistence

Added comprehensive test coverage for the new cloud storage infrastructure, including model mapping and capability resolution for Box, Dropbox, Google Drive, OneDrive, and WebDAV providers. Added tests for the cloud storage provider registry, file cache I/O conflict resolution, and backward-compatible persistence of cloud storage types. Added tests for the new encrypted content envelope, recovery key handling, and locked-content read policies. Added tests for the Excalidraw file model encoding/decoding and Core Data persistence operations.

ExcaliDrawZTests · high confidence

Dependencies

Updated Swift Package Manager dependencies

The project's Package.resolved file has been updated to pin specific versions and revisions for its Swift Package Manager dependencies. This includes updates to libraries such as Kingfisher (8.10.0), Sparkle (2.9.4), Swift Markdown UI (2.4.1), and Microsoft Authentication Library for Objective-C (2.14.1), ensuring the application uses the resolved dependency states defined in this commit.

(dependencies) · high confidence

Housekeeping

Renamed UI test suite from ExcaliDrawZUITests to ExcalidrawZUITests

The UI test suite files and their internal class definitions have been renamed to correct the spelling of 'Excalidraw' (from 'ExcaliDraw'). This affects the test bundle structure and class names within the ExcalidrawZUITests module, ensuring consistency with the product name.

ExcalidrawZUITests · 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 55 → 55 (-0.4)
  • Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.

Lenses

  • Code Health 86 → 85 (-0.2)
  • Architecture 96 → 93 (-2.5)
  • Maturity 46 → 63 (+17.6)
  • Readiness 41 → 39 (-2.1)
  • Security 100 → 100 (+0.0)
  • Domain Modelling 84 → 83 (-0.4)
  • Performance 60 (new)

Resolved (16)

  • Dependency hygiene PARTLY measured — SwiftPM pinning read, dependency currency NOT established
  • Hotspot: ExcalidrawZ/ExcalidrawView/Collaboration/JoinRoomSheetView.swift (ExcalidrawZ/ExcalidrawView/Collaboration/JoinRoomSheetView.swift)
  • Hotspot: ExcalidrawZ/ExcalidrawView/Editor/ExcalidrawEditor+FileStatusObserver.swift (ExcalidrawZ/ExcalidrawView/Editor/ExcalidrawEditor+FileStatusObserver.swift)
  • Hotspot: ExcalidrawZ/ExcalidrawView/ScreenAnnotation/ScreenAnnotationWebRuntime.swift (ExcalidrawZ/ExcalidrawView/ScreenAnnotation/ScreenAnnotationWebRuntime.swift)
  • Hotspot: ExcalidrawZ/ExcalidrawView/Toolbar/ApplePencilToolbar/ApplePencilToolbar.swift (ExcalidrawZ/ExcalidrawView/Toolbar/ApplePencilToolbar/ApplePencilToolbar.swift)
  • Hotspot: ExcalidrawZ/ExcalidrawView/components/ElementPropertiesPanel/ElementPropertiesPanel.swift (ExcalidrawZ/ExcalidrawView/components/ElementPropertiesPanel/ElementPropertiesPanel.swift)
  • Hotspot: ExcalidrawZ/Persistence/CloudStorage/WebDAV/WebDAVClient.swift (ExcalidrawZ/Persistence/CloudStorage/WebDAV/WebDAVClient.swift)
  • Hotspot: ExcalidrawZ/Persistence/FileStorage/SyncCoordinator/FileEnumerator.swift (ExcalidrawZ/Persistence/FileStorage/SyncCoordinator/FileEnumerator.swift)
  • Hotspot: ExcalidrawZ/Share/ExportImageView.swift (ExcalidrawZ/Share/ExportImageView.swift)
  • Hotspot: ExcalidrawZ/Sidebar/FileRowView+DragMove.swift (ExcalidrawZ/Sidebar/FileRowView+DragMove.swift)
  • Hotspot: ExcalidrawZ/SidebarTrailing/AIChat/Tools/ReadFileTool/ReadFileTool.swift (ExcalidrawZ/SidebarTrailing/AIChat/Tools/ReadFileTool/ReadFileTool.swift)
  • Hotspot: ExcalidrawZ/SidebarTrailing/AIChat/components/ToolCards/AIProposalToolResultCard.swift (ExcalidrawZ/SidebarTrailing/AIChat/components/ToolCards/AIProposalToolResultCard.swift)
  • Hotspot: ExcalidrawZ/SidebarTrailing/Presentation/ExcalidrawPresentationModel.swift (ExcalidrawZ/SidebarTrailing/Presentation/ExcalidrawPresentationModel.swift)
  • Hotspot: ExcalidrawZ/Store/ToolState.swift (ExcalidrawZ/Store/ToolState.swift)
  • Hotspot: ExcalidrawZ/components/FlexibleSplitView/FlexibleSplitView.swift (ExcalidrawZ/components/FlexibleSplitView/FlexibleSplitView.swift)
  • MethodTooLong: MathInputSheetView.generatePreview (ExcalidrawZ/ExcalidrawView/Toolbar/components/MathInput/MathInputSheetView.swift)

New (165)

  • AISettingsView.activityBody (cognitive 24) (ExcalidrawZ/Settings/AISettings/AISettingsView.swift)
  • AISettingsView.activityBody (cyclomatic 16) (ExcalidrawZ/Settings/AISettings/AISettingsView.swift)
  • ArchiveFilesModifier.swift.archiveAllCloudFiles (cognitive 29) (ExcalidrawZ/Utils/ArchiveFilesModifier.swift)
  • ArchiveFilesModifier.swift.backupAllCloudFiles (cognitive 36) (ExcalidrawZ/Utils/ArchiveFilesModifier.swift)
  • ArchiveFilesModifier.swift.storedEncryptedContentIfPresent (cognitive 16) (ExcalidrawZ/Utils/ArchiveFilesModifier.swift)
  • BackupsSettingsView.body (cognitive 19) (ExcalidrawZ/Settings/BackupsSettings/BackupsSettingsView.swift)
  • BackupsSettingsView.body (cyclomatic 17) (ExcalidrawZ/Settings/BackupsSettings/BackupsSettingsView.swift)
  • CollaborationEditor.body (cognitive 35) (ExcalidrawZ/ExcalidrawView/Collaboration/CollaborationEditor.swift)
  • CollaborationEditor.body (cyclomatic 24) (ExcalidrawZ/ExcalidrawView/Collaboration/CollaborationEditor.swift)
  • CollaborationHomeBackground.body (cyclomatic 16) (ExcalidrawZ/ContentView+/Detail/Home/CollaborationHome/CollaborationHome.swift)
  • CompactContentMoreMenu.body (cognitive 21) (ExcalidrawZ/ContentView+/Detail/Home/CompactIOS/CompactBrowseRootView.swift)
  • CompactExcalidrawBottomToolbarContent.body (cognitive 22) (ExcalidrawZ/ExcalidrawView/Toolbar/CompactExcalidrawBottomToolbarContent.swift)
  • CompactPlansView.planButtons (cognitive 26) (ExcalidrawZ/Subscription/components/CompactPlansView.swift)
  • CursorStyle.asNSCursor (cyclomatic 20) (ExcalidrawZ/Utils/CursorHoverView/CursorStyle.swift)
  • DrawingSettingsPanel.body (cognitive 34) (ExcalidrawZ/ExcalidrawView/components/DrawingSettingsPanel/DrawingSettingsPanel.swift)
  • DrawingSettingsPanel.body (cyclomatic 37) (ExcalidrawZ/ExcalidrawView/components/DrawingSettingsPanel/DrawingSettingsPanel.swift)
  • Duplicated block (10 lines × 2) (ExcalidrawZ/ContentView+/Detail/Home/CompactIOS/CompactBrowseRootView.swift)
  • Duplicated block (10 lines × 2) (ExcalidrawZ/ExcalidrawView/Collaboration/CollaborationEditor.swift)
  • Duplicated block (10 lines × 2) (ExcalidrawZ/ExcalidrawView/Editor/ExcalidrawEditor.swift)
  • Duplicated block (10 lines × 2) (ExcalidrawZ/Persistence/CloudStorage/CloudStorageFolderPicker.swift)
  • …and 145 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

chocoford/ExcalidrawZ 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 6b73ab1dbf8ed1560fa2bc8c2b844796cb336b48 — 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.