
Highly configurable calendar picker logic with customizable day-cell UI, multiple view modes (month, week, vertical, horizontal), selection types (single, multiple, range), and animated scrolling.
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 | ✅ |
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 can be found here: docs.md
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:

| Compose version | Library version |
|---|---|
| 1.5.11 | 0.0.8-compose-1.5.11 |
| 1.6.1 | 0.0.8 |
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.
To run the application on android device/emulator:
To build the application bundle:
./gradlew :sample:composeApp:assembleDebug
.apk file in sample/composeApp/build/outputs/apk/debug/composeApp-debug.apk
Run the desktop application: ./gradlew :sample:composeApp:run
To run the application on iPhone device/simulator:
iosApp/iosApp.xcproject in Xcode and run standard configuration cd "$SRCROOT/../../"
./gradlew :sample:composeApp:embedAndSignAppleFrameworkForXcode
And build the project.
Run the browser application: ./gradlew :sample:composeApp:jsBrowserDevelopmentRun
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 | ✅ |
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 can be found here: docs.md
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:

| Compose version | Library version |
|---|---|
| 1.5.11 | 0.0.8-compose-1.5.11 |
| 1.6.1 | 0.0.8 |
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.
To run the application on android device/emulator:
To build the application bundle:
./gradlew :sample:composeApp:assembleDebug
.apk file in sample/composeApp/build/outputs/apk/debug/composeApp-debug.apk
Run the desktop application: ./gradlew :sample:composeApp:run
To run the application on iPhone device/simulator:
iosApp/iosApp.xcproject in Xcode and run standard configuration cd "$SRCROOT/../../"
./gradlew :sample:composeApp:embedAndSignAppleFrameworkForXcode
And build the project.
Run the browser application: ./gradlew :sample:composeApp:jsBrowserDevelopmentRun