A Swift calendar UI library for iOS and Mac Catalyst that mimics the Apple Calendar app with full customization.
CalendarKit is a Swift calendar UI library for iOS and Mac Catalyst that provides a ready-to-use calendar interface resembling the Apple Calendar app. It solves the problem of building a native-feeling calendar component from scratch by offering an out-of-the-box solution with extensive customization options.
iOS and Mac Catalyst developers who need to integrate a calendar view into their apps, particularly those seeking a native Apple-like appearance without building a custom calendar UI from the ground up.
Developers choose CalendarKit because it delivers a high-quality, native-looking calendar component that works immediately while allowing deep customization of styles, themes, and event displays through a modular architecture.
📅 Calendar for Apple platforms in Swift
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Mimics the design and feel of the default Apple Calendar app out-of-the-box, providing a familiar user experience without custom design work, as shown in the screenshot examples.
Allows full style and theme customization, including Dark Mode support, by creating or modifying CalendarStyle objects and calling updateStyle, detailed in the Styles section.
Automatically adapts to the iOS locale for month/day names and first day of the week, reducing manual translation effort, with examples provided for German and Norwegian.
Composed of multiple independent modules that can be used separately, enabling developers to import only needed components without bloating the app, as stated in the philosophy.
Built on UIKit, which doesn't integrate natively with SwiftUI, forcing developers to use UIViewRepresentable bridges and adding complexity for modern SwiftUI-based projects.
Focuses on basic event display via EventDataSource but lacks built-in handling for common needs like recurring events or drag-and-drop editing, requiring custom implementation.
Requires developers to implement the EventDataSource protocol and manually format event data into strings, which can be verbose and error-prone for complex event models, as seen in the usage example.