Kaluga 2.0.0-alpha.1213 released

Published: Jul 8, 2026 by

Prerelease: This is an alpha version of Kaluga.

We are preparing a fully revamped release of Kaluga. When we first started developing Kaluga in 2019, Kotlin Multiplatform was not yet stable and many features we wanted as app developers were simply not yet available. Kaluga was developed to bridge these gaps and over time added Bluetooth, Location, (MVVM) Architecture, Alerts, Spinners and many more.

New library structure

The more features we added, the bigger Kaluga became. Additionally features often required test modules for validating them. As all these features belonged to the same module group, things started to feel bloated. To make the structure easier to navigate, starting with Kaluga 2.0.0 features have been moved to their own dedicated groups.

com.splendo.kaluga:location-permissions now becomes com.splendo.kaluga.permissions:location for instance.

The general rule:

1.6.0 2.0.0
com.splendo.kaluga:<feature> com.splendo.kaluga.<feature>:<feature>
com.splendo.kaluga:<feature>-compose com.splendo.kaluga.<feature>:compose
com.splendo.kaluga:<feature>-databinding com.splendo.kaluga.<feature>:databinding
com.splendo.kaluga:<x>-permissions com.splendo.kaluga.permissions:<x>
com.splendo.kaluga:test-utils-<feature> com.splendo.kaluga.<feature>:test

A few utilities keep the flat groupId (no change): com.splendo.kaluga:links, com.splendo.kaluga:logging, com.splendo.kaluga:review.

Moving to Compose

Kaluga includes some architecture and UI features that allow for creating MVVM apps on native UI layers. As Kotlin matured however, some of these features are becoming less relevant. Compose Multiplatform offers MVVM and a multiplatform UI layer, while better bridging to Swift simplifies setting up observability. We have therefore decided to deprecate some of the oldest modules of Kaluga:alerts,architecture, hud, date-time-picker, and resources. We recommend using CMP instead.

Expanded target set

As of Kaluga 2.0.0 we are significantly expanding the target set of the library. We now target android, ios, macos, tvos, watchos, js, jsWasm, and jvm. Whether a given feature actually supports a specific target depends on whether the feature can be supported on the platform however. So the Bluetooth Server cannot be targeted on Javascript for instance.

Split base module

The Kaluga base module contained many utils used by other features. As more features were introduced, it grew a bit too much. Therefore we have split it up into several submodules so you dont have to include all of it.

The single base module and the single date-time module have each been split into focused modules, and several types moved to a package that matches their new module. Add a dependency on the specific module(s) you use, and update the affected imports.

basebase:core plus base:state, base:decimal, base:bytes, base:crc, base:i18n, base:formatting. date-timedate-time:date-time (the calendar types and date formatter) and date-time:timer (RecurringTimer).

A more mature Bluetooth

The initial implementation of Bluetooth focussed on a core set of Bluetooth client APIs. With Kaluga 2.0.0 we are significantly expanding it. Instead of a single bluetooth module, you can now use bluetooth:core, bluetooth:client, and bluetooth:server to target both sides of the Bluetooth client-server model. The API has been rewritten to handle proper status coding, automatically subscribe to notifiable characteristics, and (de)serialize raw Byte data coming from your Bluetooth connection. A Kotlin KSP module even offers a quick way to generate typed Bluetooth Client/Server APIs. A gradle Plugin will launch alongside a full 2.0 release to make this setup even easier.

➡️ Check the full Migration Guide

📖 Check the Documentation

🧐 Check the Web Example

kaluga

Share