Recipes is a Kotlin Multiplatform (KMP) application for browsing and searching recipes. It demonstrates modern Android and KMP development practices, including the use of Compose Multiplatform, Circuit architecture, and various powerful libraries.
- Search: Quickly find recipes by keyword.
- Categories: Browse recipes organized by categories.
- Favorites: Save your favorite recipes for quick access.
- Recipe Details: View detailed instructions and ingredients for each recipe.
The project leverages a modern and robust tech stack for multiplatform development:
- Kotlin Multiplatform (KMP): Shared business logic and data layers across Android, iOS, Desktop, and Web.
- Compose Multiplatform: Shared UI framework for building beautiful and consistent interfaces on all platforms.
- Circuit: A simple, reactive framework for building UI on Android and multiplatform.
- Metro: A multiplatform, compile-time dependency injection (DI) framework for Kotlin.
- Ktor: For networking and API interactions.
- Coil 3: Image loading for Kotlin Multiplatform.
- Room 3: SQLite object mapping library, now supporting KMP.
- Store 5: A library for managing data loading and caching.
- Data Source: Uses TheMealDB API for fetching recipe data.
The project is organized into several modules to ensure a clean separation of concerns:
app: Android-specific application code.ui: Shared UI components using Compose Multiplatform.domain: Shared business logic and presenters (Circuit).model: Shared data models.repository: Shared data repository layer.network: Shared networking layer using Ktor.storage: Shared persistence layer using Room.shared: Dependency injection (DI) and application-level shared logic.iosApp: iOS-specific application code (Swift).webApp: Web-specific application code using Compose for Web.desktopApp: Desktop-specific application code using Compose for Desktop.sqliteWasmWorker: Helper for SQLite WASM on Web.
- Android Studio Panda or newer.
- Xcode (for iOS development).
- Android: Open the project in Android Studio and run the
appconfiguration. - iOS: Open
iosApp/iosApp.xcworkspacein Xcode and run on a simulator or device. - Desktop: Run
./gradlew :desktopApp:run. - Web (JS): Run
./gradlew :webApp:jsBrowserDevelopmentRun. - Web (wasmJS): Run
./gradlew :webApp:wasmJsBrowserDevelopmentRun.
This project is licensed under the Apache License 2.0. See the LICENSE file for details.