LunarBar-app/LunarBar
55.6
Adequate · 1 October 2026
4.6k
lines of production code
Swift
primary language
2
measurements over time
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.