A declarative, performant iOS calendar UI component for SwiftUI and UIKit, supporting simple date pickers to full-featured calendar apps.
HorizonCalendar is an open-source iOS calendar UI component developed by Airbnb that provides a declarative and performant way to build calendar interfaces. It solves the problem of creating customizable, production-ready calendar views that can scale from simple date pickers to complex calendar applications with features like range selection, custom styling, and international calendar support.
iOS developers building apps that require calendar interfaces, including those working on travel, scheduling, booking, or event management applications who need a flexible and performant calendar component.
Developers choose HorizonCalendar because it offers a battle-tested solution used in production by Airbnb, with extensive customization capabilities, support for both SwiftUI and UIKit, and excellent performance even with large date ranges—all through a clean declarative API.
A declarative, performant, iOS calendar UI component that supports use cases ranging from simple date pickers all the way up to fully-featured calendar apps.
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Encourages unidirectional data flow by separating content from presentation, leading to cleaner and more maintainable code for complex calendar interfaces, as highlighted in the philosophy section.
Seamlessly works with both SwiftUI and UIKit, allowing integration into modern SwiftUI apps or traditional UIKit codebases, demonstrated through separate tutorials in the README.
Offers customizable views for days, month headers, range indicators, and overlays, enabling fully branded designs like those shown in Airbnb's production app screenshots.
Efficiently handles large or virtually infinite date ranges without performance issues, crucial for applications with extensive scheduling needs, as stated in the key features.
For UIKit, creating custom views requires implementing the CalendarItemViewRepresentable protocol with separate invariant and content properties, adding significant boilerplate code compared to drop-in solutions.
CalendarView lacks an intrinsic content size, necessitating explicit Auto Layout constraints or frame settings, which can be error-prone and requires additional setup steps, as noted in the integration tutorial.
The declarative API and separation of concerns may challenge developers unfamiliar with these patterns, especially when handling state updates in SwiftUI closures, as warned in the README's customization sections.