hi-manshu/Kalendar
 Watch    7
 Star    923
 Fork    72

📅 Kalendar: The Calendar Your App Deserves

Kalendar Github: Open Issues Kalendar Kalendar Kalendar Kalendar KalendarFoundation Github Followers Twitter Follow

Kalendar is no ordinary library — it’s the Elder Wand of calendar components, crafted for Compose (now with KMP support) sorcerers who demand both power and elegance. With the flick of your wrist (or a few lines of Kotlin), you conjure a magical, interactive calendar that bends to your will. With Kalendar, your app becomes as organized as Hermione’s study schedule — but far more fun.

So go on, Wield this enchanted tool and create a calendar so charming and powerful, even * Dumbledore* would pause to admire it.

🎉 Why Kalendar?

  • 🪄 Unparalleled Customization: Shape your calendar like it’s made of Transfiguration magic. Colors, styles, themes — you control it all.
  • 📜 Event Management, Sorted: Whether it’s the next Quidditch match or your weekly stand-up, display events clearly and beautifully.
  • ✨ Interactive and Responsive:Tap, click, and swipe — and watch your calendar respond like it’s enchanted.
  • 🚀 KMP/CMP-Friendly: No weird incantations needed — just simple, idiomatic Multiplatform Compose code.

So unless you fancy scribbling your dates on a Howler, let Kalendar handle your scheduling magic.

Made with ❤️ for Android Developers by Himanshu

Live demo

Try every view in your browser (Compose for Web/wasm build of the sample app): hi-manshu.github.io/Kalendar — deployed from main by the Deploy Demo workflow. (Requires GitHub Pages to be set to "GitHub Actions" in the repo settings the first time.) The same deployment also publishes the Dokka API reference under /api/kalendar/ and /api/kalendar-foundation/.

Standalone views (recommended)

  • KalendarMonth: full month grid, arrow-click and swipe navigation together.
  • KalendarWeek: single week row, arrow-click and swipe navigation together.
  • KalendarYear: 12-month year overview, arrow-click and swipe navigation together.
  • KalendarTimeline: continuous, boundless vertical scroll through every month — no paging.
  • KalendarSchedule: hourly time grid for a single day — duration-sized event blocks, overlap packing, and a now-indicator.
  • KalendarScheduleWeek: the 7-day variant — day columns sharing one hour gutter.
  • KalendarAgenda: scrollable list of events grouped by date — no grid, no paging.

All views are restylable via KalendarTheme colour tokens — no Material dependency required in your app's design system.

Events can be handed over up front as a list, or loaded a visible range at a time when they live in a database or behind a network call: the view reports the range it is about to draw, adjacent pages are prefetched so a swipe does not land on an empty grid, and a loadingContent slot keeps "no events yet" from looking like "no events".

Every view is a top-level composable called directly — KalendarMonth(...), KalendarAgenda(...). There is no Kalendar(type = ...) entry point and no KalendarType: both were removed in 2.0. They use the event model from kalendar-foundation (KalendarEvent/BasicKalendarEvent), which kalendar re-exports as an api dependency — adding com.himanshoe:kalendar alone is enough. See their docs for usage.

Device calendar sync

kalendar-sync: reads, writes, and exports events from the device's real calendar (Android CalendarContract, iOS EventKit, a file-backed .ics provider on Desktop) — no third-party account required. Includes RFC 5545 recurrence and iCal import/export, and is independent of kalendar/kalendar-foundation.

Recurring series can be edited or deleted at one occurrence, this and following, or the whole series — each scope resolving to an explicit set of writes, so you can see exactly what your backend will be asked to do.

🎉 Getting Started

Version Catalog

If you're using Version Catalog, you can configure the dependency by adding it to your libs.versions.toml file as follows:

[versions]
kalendar = "<version>"
kalendarFoundation = "<version>"
kalendarSync = "<version>"

[libraries]
kalendar = { module = "com.himanshoe:kalendar", version.ref = "kalendar" }
kalendar-foundation = { module = "com.himanshoe:kalendar-foundation", version.ref = "kalendarFoundation" }
kalendar-sync = { module = "com.himanshoe:kalendar-sync", version.ref = "kalendarSync" }

Gradle

Add the dependency below to your module's `build.gradle.kts` file:
dependencies {
    implementation("com.himanshoe:kalendar:$version")
    implementation("com.himanshoe:kalendar-foundation:$version")
    implementation("com.himanshoe:kalendar-sync:$version") // optional: device calendar sync

    // if you're using Version Catalog
    implementation(libs.kalendar)
    implementation(libs.kalendar.foundation)
    implementation(libs.kalendar.sync)

}

For Kotlin Multiplatform, add the dependency below to your commonMain source set's build.gradle.kts file:

sourceSets {
    commonMain.dependencies {
          implementation(libs.kalendar)
          implementation(libs.kalendar.foundation)
          implementation(libs.kalendar.sync) // optional: device calendar sync
     }
}

📖Documentation

You can find it here: Kalendar Documentation

关于
Kalendar is no ordinary library — it’s the Elder Wand of calendar components, crafted for Compose (now with KMP support) sorcerers who demand both power and elegance. With the flick of your wrist (or a few lines of Kotlin), you conjure a magical, interactive calendar that bends to your will. With Kalendar, your app becomes as organized as Hermione
最后更新于  10 days ago