Alkaa (begin, start in Finnish) is a to-do application to study the latest components, architecture, and tools for multiplatform development. The project is available on Google Play, App Store, and for Desktop! ❤️
The current version of Alkaa was completely migrated to Kotlin and Compose Multiplatform!
|
One of the main goals of Alkaa is to use all the latest libraries and tools available.
- Application entirely written in Kotlin
- UI developed in Compose Multiplatform
- UI Tests with Compose Multiplatform UI Testing
- Following the Material You guidelines and dynamic color (Android only)
- Adaptive layouts with Compose Adaptive
- Navigation using Navigation3
- Asynchronous processing using Coroutines
- Widgets using Jetpack Glance
- Dependency injection with Koin
- Database using SQLDelight
- Local storage with DataStore
- License management with AboutLibraries
For more dependencies used in project, please access the Dependency File
If you want to check the previous version of Alkaa, please take a look at the latest V1 or V2 releases.
Alkaa architecture is strongly based on the Hexagonal Architecture by Alistair Cockburn. The application also relies heavily on modularization for better separation of concerns and encapsulation.
Let's take a look at each major module of the application:
- app, ios-app, and desktop-app - The platform-specific app modules. They contain the initialization logic for each platform.
- shared - The module containing the code shared between all platforms.
- features - The modules containing the features (visual or not) of the application.
- domain - The modules containing the business logic. These modules depend only on themselves, and all interaction is done via dependency inversion.
- data - The modules containing the data logic (local, repository, etc.).
- libraries - The modules with useful small libraries for the project, such as design system, navigation, testing, etc.
This type of architecture protects the most important modules in the app. To achieve this, all dependencies point to the center. The modules are organized so that the more a module is in the center, the more important it is.
To better represent the idea behind the modules, here is an architecture image representing the flow of dependency:
Copyright 2018 Igor Escodro
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.


