Skip to content
CAI
Software that uses CAICheck a score

LunarBar-app/LunarBar

55.6

Adequate · 1 October 2026

4.6k

lines of production code

Swift

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

LunarBar is a macOS menu bar utility that displays lunar calendar dates alongside Gregorian events and reminders. It provides users with customizable icon styles, detailed date popovers, and holiday information, while supporting both standard calendar events and reminders through Apple Events. The system focuses on precise date formatting, locale-aware lunar calculations, and a modernized interface for macOS 15 and later.

Features

New macOS Tahoe design language and menu bar icon customization

The app now adopts a modern design language for macOS Tahoe (and later), featuring increased content margins, larger cell corner radii, and a larger menu bar icon size. Users can now customize the menu bar icon, choosing between filled date, outlined date, calendar, system symbol, or custom format styles. Additionally, a new content scale option allows users to adjust the calendar's density (default, compact, or roomy).

LunarBarMac/Sources/Shared · high confidence

Behavioural changes

Calendar and holiday managers modernized with concurrency, caching, and expanded scope

The CalendarManager now supports both events and reminders, utilizing a memory cache to improve performance and adding a preload capability for smoother user experience. It also adopts modern Swift concurrency patterns, including MainActor isolation and async/await for file operations. The HolidayManager has been updated to use raw.githubusercontent.com for fetching holiday data, ensures intermediate directories are created when needed, and aligns with the new concurrency model. A new DateRefreshTimer component has been introduced to handle time-based UI updates with granular control.

LunarBarMac/Sources/Managers · high confidence

Drops macOS 13 support and raises minimum version to macOS 15

LunarBar now requires macOS 15 (Sequoia) or later, dropping support for macOS 13 and 14. Users on older operating systems can no longer install the latest version; historical builds for macOS 13 and 14 remain available via specific release tags. The app version has been bumped to 1.9.2.

(repo-wide) · high confidence

Enhanced button interactivity and new editable text field for menu bar apps

The AppKitControls module now includes an EditableTextField subclass that restores standard editing keyboard shortcuts (select all, copy, paste, cut, undo, redo) for text fields in environments without a main menu, such as macOS status bar utilities. CustomButton support has been expanded with a new onMouseHover callback and a slightly reduced tracking area to prevent adjacent views from being hovered simultaneously. Additionally, ImageButton has been refactored to support customizable icon sizes, corner radii, and dynamic highlight colors, providing richer visual feedback when users interact with menu bar icons.

LunarBarMac/Modules/Sources/AppKitControls · high confidence

Enhanced menu bar icon customization and improved keyboard navigation

Users can now choose from several menu bar icon styles, including filled date, outlined date, calendar, system symbols, and custom formats, with the icon updating dynamically based on preferences. The app also introduces a weekly automatic update check for users who keep the app running, and improves keyboard navigation by resolving conflicts with the date picker, allowing arrow keys to move by month or year and space to select dates when full keyboard access is enabled.

LunarBarMac/Sources/Main · high confidence

Expanded AppKit extensions for rendering, theming, and animations

This update adds and refines several AppKit helper extensions to improve visual fidelity and code safety. It introduces new methods for rendering text as images (NSBezierPath, NSImage) and creating markdown-capable text views (NSTextView), which support better readability and custom formatting. Theming is enhanced with a new isDarkMode property on NSAppearance and a darkerColor helper on NSColor, while window and view animations are standardized via fadeIn/fadeOut and setAlphaValue helpers. The changes also include safer access to visual effect views, support for macOS 27 menu item image visibility, and general thread-safety improvements by marking key extensions as @MainActor.

LunarBarMac/Modules/Sources/AppKitExtensions · high confidence

LunarCalendar conforms to Swift concurrency safety

The LunarCalendar class now conforms to the Sendable protocol, enabling it to be used safely across concurrent execution contexts without data races. This change supports stricter concurrency checking within the LunarBarKit library.

LunarBarKit/Sources/LunarCalendar · high confidence

New date details popover and improved calendar grid interactions

The calendar now displays a dedicated details popover when a date is selected, showing the day's title and a list of associated calendar events with color-coded indicators and time ranges. The calendar grid itself has been refactored to use a diffable data source for more stable updates, and individual date cells now feature a visual highlight effect on hover. Navigation buttons in the header have been restyled with compact icons and click animations, while the date label now uses a monospaced font for consistent width. Additionally, clicking the date label in the header provides a hidden shortcut to jump to the current day, and event data is preloaded for adjacent months to improve responsiveness.

LunarBarMac/Sources/Views · high confidence

Project structure reorganized and Xcode version updated

The Xcode project has been updated to object version 70 (LastUpgradeVersion 2630), reflecting a migration to Xcode 16. The source tree has been restructured: the previous nested groups (Main, Shared, Managers, Views, Updater) have been flattened into a single 'Sources' folder using file system synchronization. Several source files (e.g., AppLocalizer, CalendarManager, AppUpdater) were removed from the project references, while new test files (RuntimeTests, DateFormatterTests) and an icon resource (AppIcon.icon) were added.

LunarBar.xcodeproj · high confidence

Refactor calendar and event handling extensions for improved locale and date logic

The LunarBarKit extensions have been reorganized to improve date formatting consistency and event overlap detection. DateFormatter now includes specific styles for lunar dates (enforced with Chinese locales) and localized months. EKCalendarItem extensions consolidate overlap logic previously scattered in EKEvent, allowing unified handling of events and reminders. Calendar extensions now respect the user's first day of the week setting for Gregorian calendars and simplify leap month and last-day-of-year checks. Additionally, JSValue gains a safe date conversion method, and String gains a utility to remove leading digits.

LunarBarKit/Sources/Extensions · high confidence

Refactor logging implementation to use os.Logger instance

The internal logging mechanism in LunarBarKit has been updated to use a dedicated private os.Logger instance instead of the global .default log. This change modernizes the logging approach within the Logger.swift source file, ensuring that log messages are routed through a specific logger instance rather than the system-wide default.

LunarBarKit/Sources · high confidence

SwiftLint plugin updated for Swift 6 compatibility

The SwiftLint build tool plugin has been migrated to use Swift 6 APIs, replacing deprecated \.string\ path accessors with \.url\ and \.path(percentEncoded: false)\ methods to ensure compatibility with modern Swift Package Manager standards. Additionally, the plugin now explicitly defines empty input and output files and an empty environment dictionary for the lint command, aligning with stricter build system requirements.

LunarBarTools/Plugins/SwiftLint · high confidence

Updated permission descriptions and added Reminders support strings

The permission request dialogs for Calendar access have been rewritten to clarify that LunarBar uses Apple Events to reveal dates and show events, noting that core functionality remains without the permission but specific features like jumping to a date or showing events will be unavailable. Additionally, new usage descriptions for NSRemindersFullAccess and NSRemindersUsage have been added to support displaying reminders alongside dates, and various UI strings have been refined, including the removal of holiday/workday labels in favor of a new date-distance template and the addition of strings for custom format confirmation and calendar icon options.

LunarBarMac, LunarBarMac/Resources · high confidence

Users can now disable automatic app updates

The updater now respects a new user preference to disable automatic update checks. If the 'general.disable-updates' setting is enabled, the app will skip the update check process and log the action, giving users more control over when they are notified about new versions. Additionally, the 'Learn More' button in update alerts now uses the general localization key, and the 'up-to-date' message has been updated to use a curly apostrophe.

LunarBarMac/Sources/Updater · high confidence

Test coverage

Added and updated unit tests for LunarBarMac; Updated Xcode scheme upgrade versions; Updated test suite header comments and corrected calendar test logic.

Dependencies

Upgrade to Swift 6 and update minimum platform versions

The project has been upgraded to Swift 6.0, raising the minimum supported versions to iOS 18 and macOS 15. This change also enables strict concurrency checking in LunarBarKit to improve data safety and updates the SwiftLint binary dependency to version 0.65.1.

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

Lenses

  • Code Health 99 → 98 (-1.1)
  • Architecture 87 → 96 (+8.7)
  • Maturity 33 → 36 (+3.1)
  • Readiness 54 → 49 (-5.6)
  • Security 100 → 100 (+0.0)

Resolved (2)

  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)

New (3)

  • Coverage not measured — Swift suite
  • MethodTooLong: Calendar.solar (LunarBarMac/Sources/Shared/AppDefinitions.swift)
  • Off the main sequence: LunarBarKit

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

Survey your own repository

LunarBar-app/LunarBar 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 1b2114bbb86061de2ec942d94f94f363cd85bd4f — 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.