Calendar icon indicating copy to clipboard operation
Calendar copied to clipboard

Kotlin Multiplatform Calendar Library

Compose Multiplatform Calendar

Maven Central

Highly configurable Kotlin Multiplatform Compose library where you can easily draw calendar picker for any platform you want: Android, iOS, Desktop or even Web!

We give you logic, you define UI with Composables!


Features:

Feature Supported
Single month calendar view
Week calendar
Horizontal calendar
Customizable UI
Headers support
Calendar offsets
Single selection
Multiple selection
Month/Year picker
Scroll to date animation
Vertical calendar
Range selection

Setup

Maven Central

In Android project:

dependencies {
  implementation 'io.github.wojciechosak:calendar:<latest-version>'
}

In Kotlin Multiplatform project:

commonMain.dependencies {
  implementation 'io.github.wojciechosak:calendar:<latest-version>'
}
HorizontalCalendarView(startDate = startDate) { monthOffset ->
  CalendarView(
    config = rememberCalendarState(
      startDate = startDate,
      monthOffset = 0
    ),
    day = { dayState ->
      // define your day composable here!
    }
  )
}

Basic horizontal scrollable view:

HorizontalCalendarView(startDate = startDate) { monthOffset ->
  CalendarView(
    config = rememberCalendarState(
      startDate = startDate,
      monthOffset = monthOffset,
    ),
  )
}

Documentation

Documentation can be found here: docs.md

Composables

List of available views

Simply use in Compose any view you want:

View type Preview
CalendarView
HorizontalView
VerticalView
WeekView
MonthPicker
YearPicker

Each view get as parameter day cell composable. Thanks to that your calendar can look whatever you like:

Versions

Compose version Library version
1.5.11 0.0.8-compose-1.5.11
1.6.1 0.0.8

Samples:

In directory sample you can find bunch of examples. You can run Android/iOS application and test it yourself. Below you can find instruction how to run sample project on your computer.

Sample project

Before running!

  • check your system with KDoctor
  • install JDK 17 on your machine

Android

To run the application on android device/emulator:

  • open project in Android Studio and run imported android run configuration

To build the application bundle:

  • run ./gradlew :sample:composeApp:assembleDebug
  • find .apk file in sample/composeApp/build/outputs/apk/debug/composeApp-debug.apk

Desktop

Run the desktop application: ./gradlew :sample:composeApp:run

iOS

To run the application on iPhone device/simulator:

  • Open iosApp/iosApp.xcproject in Xcode and run standard configuration
  • In XCode open Build Phases -> Run Script -> paste script:
    cd "$SRCROOT/../../"
    ./gradlew :sample:composeApp:embedAndSignAppleFrameworkForXcode

And build the project.

Browser

Run the browser application: ./gradlew :sample:composeApp:jsBrowserDevelopmentRun